王苗苗 3 mesi fa
parent
commit
37f7c921c4

+ 31 - 2
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -3,11 +3,13 @@ package com.slibra.web.controller.business;
 import com.alibaba.fastjson2.JSON;
 import com.slibra.business.domain.City;
 import com.slibra.business.domain.TCallRecord;
-import com.slibra.business.mapper.CityMapper;
-import com.slibra.business.mapper.TCallRecordMapper;
+import com.slibra.business.domain.TPumpingStationNeighbourhoodNumber;
+import com.slibra.business.mapper.*;
 import com.slibra.business.req.AiChatReq;
 import com.slibra.business.req.AiChatRes;
+import com.slibra.business.res.PumpAndNumber;
 import com.slibra.business.service.IFrontService;
+import com.slibra.business.service.ITNeighborhoodService;
 import com.slibra.common.core.controller.BaseController;
 import com.slibra.common.core.domain.AjaxResult;
 import com.slibra.common.core.domain.R;
@@ -37,6 +39,25 @@ public class FrontController extends BaseController {
     @Autowired
     private TCallRecordMapper tCallRecordMapper;
 
+    @Autowired
+    private TCutOffWaterMapper tCutOffWaterMapper;
+
+    @Autowired
+    private TNeighborhoodBuildingMapper tNeighborhoodBuildingMapper;
+
+    @Autowired
+    private TNeighborhoodMapper tNeighborhoodMapper;
+
+    @Autowired
+    private TPumpingStationMapper tPumpingStationMapper;
+
+    @Autowired
+    private TPumpingStationNeighbourhoodNumberMapper tPumpingStationNeighbourhoodNumberMapper;
+
+    @Autowired
+    private ITNeighborhoodService tNeighborhoodService;
+
+
 
 
     /**
@@ -64,6 +85,14 @@ public class FrontController extends BaseController {
         return getDataTable(tCallRecordMapper.selectTCallRecordList(callRecordReq));
     }
 
+
+    //2024年11月12日11:17:56 新增接口 通过小区ID,查询楼号和泵站的关联关系
+    @GetMapping("/getPumpingStationAndNeighbourhoodBuildingsById")
+    private R<List<PumpAndNumber>> getPumpingStationAndNeighbourhoodBuildingsById(Long id){
+        log.info("进入了 通过小区ID,查询楼号和泵站的关联关系的接口 ");
+        return R.ok(tNeighborhoodService.getPumpingStationAndNeighbourhoodBuildingsById(id));
+    }
+
 //    /**
 //     * 获取大屏的实时数据 + 统计数据
 //     * @return

+ 8 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/TNeighborhoodController.java

@@ -2,6 +2,10 @@ package com.slibra.web.controller.business;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.slibra.business.res.PumpAndNumber;
+import com.slibra.common.core.domain.R;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -27,6 +31,7 @@ import com.slibra.common.core.page.TableDataInfo;
  * @author slibra
  * @date 2024-11-05
  */
+@Slf4j
 @RestController
 @RequestMapping("/business/neighborhood")
 public class TNeighborhoodController extends BaseController
@@ -103,4 +108,7 @@ public class TNeighborhoodController extends BaseController
     {
         return toAjax(tNeighborhoodService.deleteTNeighborhoodByIds(ids));
     }
+
+
+
 }

+ 11 - 0
slibra-system/src/main/java/com/slibra/business/domain/TNeighborhood.java

@@ -1,5 +1,6 @@
 package com.slibra.business.domain;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -51,11 +52,21 @@ public class TNeighborhood extends BaseEntity
     private String sort;
 
     /** 删除标志(0代表存在 2代表删除) */
+    @JsonIgnore
     private Long delFlag;
 
     /** 乐观锁 */
     @Excel(name = "乐观锁")
+    @JsonIgnore
     private Long revision;
 
+    //关联的楼号名称
+    private String buildingsNames;
+
+    //关联的泵站名称
+    private String pumpingStationNames;
+
+
+
 
 }

+ 17 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TNeighborhoodMapper.java

@@ -2,6 +2,8 @@ package com.slibra.business.mapper;
 
 import java.util.List;
 import com.slibra.business.domain.TNeighborhood;
+import com.slibra.business.domain.TPumpingStation;
+import com.slibra.business.res.PumpAndBuildingNumberNames;
 
 /**
  * 服务小区Mapper接口
@@ -58,4 +60,19 @@ public interface TNeighborhoodMapper
      * @return 结果
      */
     public int deleteTNeighborhoodByIds(Long[] ids);
+
+    String getNeighbourhoodBuildingsNamesById(Long id);
+
+    String getPumpingStationNamesById(Long id);
+
+    /**
+     * 通过小区的ID获取所有的关联的泵站信息
+     * @param id
+     * @return
+     */
+    List<TPumpingStation> getPumpingStationByNeighbourhoodId(Long id);
+
+    String getNeighbourhoodBuildingNamesByPumpingStationId(Long pumpingStationId);
+
+    List<PumpAndBuildingNumberNames> getPumpAndBuildingNumberNamesByNeighbourhoodId(Long id);
 }

+ 2 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TWhitelistMapper.java

@@ -58,4 +58,6 @@ public interface TWhitelistMapper
      * @return 结果
      */
     public int deleteTWhitelistByIds(Long[] ids);
+
+    String getUniquePhoneButNoThis(TWhitelist tWhitelist);
 }

+ 29 - 0
slibra-system/src/main/java/com/slibra/business/res/PumpAndBuildingNumberNames.java

@@ -0,0 +1,29 @@
+package com.slibra.business.res;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PumpAndBuildingNumberNames {
+
+    //关联的中间表的ID,唯一的一条记录
+    @JsonIgnore
+    private Long id;
+
+    //楼号名称
+    private String neighborhoodBuildingName;
+
+    //泵站名称
+    private String pumpingStationName;
+
+
+
+
+}

+ 32 - 0
slibra-system/src/main/java/com/slibra/business/res/PumpAndNumber.java

@@ -0,0 +1,32 @@
+package com.slibra.business.res;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PumpAndNumber {
+
+
+    //泵站ID
+//    @JsonIgnore
+//    private Long pumpingStationId;
+
+    //泵站名称
+    private String pumpingStationName;
+
+    //关联的楼号名称
+    private String buildingsNames;
+
+
+
+
+}

+ 3 - 0
slibra-system/src/main/java/com/slibra/business/service/ITNeighborhoodService.java

@@ -2,6 +2,7 @@ package com.slibra.business.service;
 
 import java.util.List;
 import com.slibra.business.domain.TNeighborhood;
+import com.slibra.business.res.PumpAndNumber;
 
 /**
  * 服务小区Service接口
@@ -58,4 +59,6 @@ public interface ITNeighborhoodService
      * @return 结果
      */
     public int deleteTNeighborhoodById(Long id);
+
+    List<PumpAndNumber> getPumpingStationAndNeighbourhoodBuildingsById(Long id);
 }

+ 50 - 1
slibra-system/src/main/java/com/slibra/business/service/impl/TNeighborhoodServiceImpl.java

@@ -1,12 +1,21 @@
 package com.slibra.business.service.impl;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.slibra.business.domain.TPumpingStation;
+import com.slibra.business.res.PumpAndBuildingNumberNames;
+import com.slibra.business.res.PumpAndNumber;
 import com.slibra.common.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.slibra.business.mapper.TNeighborhoodMapper;
 import com.slibra.business.domain.TNeighborhood;
 import com.slibra.business.service.ITNeighborhoodService;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 服务小区Service业务层处理
@@ -41,7 +50,16 @@ public class TNeighborhoodServiceImpl implements ITNeighborhoodService
     @Override
     public List<TNeighborhood> selectTNeighborhoodList(TNeighborhood tNeighborhood)
     {
-        return tNeighborhoodMapper.selectTNeighborhoodList(tNeighborhood);
+        List<TNeighborhood> tNeighborhoods = tNeighborhoodMapper.selectTNeighborhoodList(tNeighborhood);
+        if(!CollectionUtils.isEmpty(tNeighborhoods)){
+            for (TNeighborhood neighborhood : tNeighborhoods) {
+                //2024年11月12日10:58:29  额外返回楼号 关联泵站的信息
+                Long id = neighborhood.getId();//小区ID
+                neighborhood.setBuildingsNames(this.tNeighborhoodMapper.getNeighbourhoodBuildingsNamesById(id));
+                neighborhood.setPumpingStationNames(this.tNeighborhoodMapper.getPumpingStationNamesById(id));
+            }
+        }
+        return tNeighborhoods;
     }
 
     /**
@@ -93,4 +111,35 @@ public class TNeighborhoodServiceImpl implements ITNeighborhoodService
     {
         return tNeighborhoodMapper.deleteTNeighborhoodById(id);
     }
+
+    @Override
+    public List<PumpAndNumber> getPumpingStationAndNeighbourhoodBuildingsById(Long id) {
+        //先通过小区的ID查询所有的关联的泵站的信息
+        /*List<TPumpingStation> pumpingStations = this.tNeighborhoodMapper.getPumpingStationByNeighbourhoodId(id);
+        if(CollectionUtils.isEmpty(pumpingStations))
+            return Collections.emptyList();
+        List<PumpAndNumber> result = new ArrayList<>(pumpingStations.size());
+        for (TPumpingStation pumpingStation : pumpingStations) {
+            Long pumpingStationId = pumpingStation.getId();
+            PumpAndNumber pumpAndNumber = new PumpAndNumber();
+            pumpAndNumber.setPumpingStationId(pumpingStationId);
+            pumpAndNumber.setPumpingStationName(pumpingStation.getName());
+            pumpAndNumber.setBuildingsNames(this.tNeighborhoodMapper.getNeighbourhoodBuildingNamesByPumpingStationId(pumpingStationId));
+            result.add(pumpAndNumber);
+        }
+        return result;*/
+        //2024年11月12日14:03:17 上述的查询太浪费性能,改成一次查出多条对应的数据,再在程序中处理
+        List<PumpAndBuildingNumberNames> pumpAndNumbers = this.tNeighborhoodMapper.getPumpAndBuildingNumberNamesByNeighbourhoodId(id);
+        if(CollectionUtils.isEmpty(pumpAndNumbers))
+            return Collections.emptyList();
+        Map<String, List<PumpAndBuildingNumberNames>> collect = pumpAndNumbers.stream().collect(Collectors.groupingBy(PumpAndBuildingNumberNames::getPumpingStationName));
+        List<PumpAndNumber> result = new ArrayList<>(collect.size());
+        collect.forEach((key, value) -> {
+            PumpAndNumber pumpAndNumber = new PumpAndNumber();
+            pumpAndNumber.setPumpingStationName(key);
+            pumpAndNumber.setBuildingsNames(value.stream().map(PumpAndBuildingNumberNames::getNeighborhoodBuildingName).collect(Collectors.joining("、")));
+            result.add(pumpAndNumber);
+        });
+        return result;
+    }
 }

+ 10 - 0
slibra-system/src/main/java/com/slibra/business/service/impl/TWhitelistServiceImpl.java

@@ -1,12 +1,16 @@
 package com.slibra.business.service.impl;
 
 import java.util.List;
+
+import com.slibra.common.exception.ServiceException;
 import com.slibra.common.utils.DateUtils;
+import com.slibra.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.slibra.business.mapper.TWhitelistMapper;
 import com.slibra.business.domain.TWhitelist;
 import com.slibra.business.service.ITWhitelistService;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 白名单配置Service业务层处理
@@ -54,6 +58,9 @@ public class TWhitelistServiceImpl implements ITWhitelistService
     public int insertTWhitelist(TWhitelist tWhitelist)
     {
         tWhitelist.setCreateTime(DateUtils.getNowDate());
+        //2024年11月12日10:48:13 校验是否已经存在
+        if(!CollectionUtils.isEmpty(this.tWhitelistMapper.selectTWhitelistList(TWhitelist.builder().phone(tWhitelist.getPhone()).build())))
+            throw new ServiceException("该电话号码已经存在白名单中了,请勿重复添加!");
         return tWhitelistMapper.insertTWhitelist(tWhitelist);
     }
 
@@ -67,6 +74,9 @@ public class TWhitelistServiceImpl implements ITWhitelistService
     public int updateTWhitelist(TWhitelist tWhitelist)
     {
         tWhitelist.setUpdateTime(DateUtils.getNowDate());
+        //2024年11月12日10:48:13 校验是否已经存在
+        if(StringUtils.isNotBlank(this.tWhitelistMapper.getUniquePhoneButNoThis(tWhitelist)))
+            throw new ServiceException("该电话号码已经存在白名单中了,请勿重复添加!");
         return tWhitelistMapper.updateTWhitelist(tWhitelist);
     }
 

+ 82 - 0
slibra-system/src/main/resources/mapper/business/TNeighborhoodMapper.xml

@@ -112,4 +112,86 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <!-- 2024年11月12日11:05:57 下面是新增的,不允许覆盖 -->
+    <select id="getNeighbourhoodBuildingsNamesById" resultType="string">
+        SELECT
+            GROUP_CONCAT(DISTINCT tnb.`name` SEPARATOR '、')
+        FROM
+            t_neighborhood_building tnb
+                INNER JOIN t_neighborhood tn ON tnb.neighborhood_id = tn.id
+        WHERE tnb.del_flag = 0 AND tn.del_flag = 0
+          AND tn.id = #{id}
+    </select>
+
+    <!-- 2024年11月12日11:15:57  如果数据量大了,可以在程序中处理,或者优化下SQL -->
+    <select id="getPumpingStationNamesById" resultType="string">
+        SELECT
+            GROUP_CONCAT( DISTINCT tps.`name` SEPARATOR '、' )
+        FROM
+            t_neighborhood_building tnb
+                INNER JOIN t_neighborhood tn ON tnb.neighborhood_id = tn.id
+                INNER JOIN t_pumping_station_neighbourhood_number tpsnn ON tpsnn.neighborhood_id = tn.id AND tpsnn.neighborhood_building_id = tnb.id
+                INNER JOIN t_pumping_station tps ON tps.id = tpsnn.pumping_station_id
+        WHERE
+            tnb.del_flag = 0
+          AND tn.del_flag = 0
+          AND tpsnn.del_flag = 0
+          AND tps.del_flag = 0
+          AND tn.id = #{id}
+    </select>
+
+    <select id="getPumpingStationByNeighbourhoodId" resultType="com.slibra.business.domain.TPumpingStation">
+        SELECT DISTINCT
+            tps.id id,
+            tps.NAME name,
+            tps.province_id provinceId,
+            tps.city_id cityId,
+            tps.country_id countryId,
+            tps.address address
+        FROM
+            t_neighborhood_building tnb
+                INNER JOIN t_neighborhood tn ON tnb.neighborhood_id = tn.id
+                INNER JOIN t_pumping_station_neighbourhood_number tpsnn ON tpsnn.neighborhood_id = tn.id
+                AND tpsnn.neighborhood_building_id = tnb.id
+                INNER JOIN t_pumping_station tps ON tps.id = tpsnn.pumping_station_id
+        WHERE
+            tnb.del_flag = 0
+          AND tn.del_flag = 0
+          AND tpsnn.del_flag = 0
+          AND tps.del_flag = 0
+          AND tn.id = #{id}
+    </select>
+
+    <select id="getNeighbourhoodBuildingNamesByPumpingStationId" resultType="string">
+        SELECT
+            GROUP_CONCAT( DISTINCT tnb.`name` SEPARATOR '、' )
+        FROM
+            t_neighborhood_building tnb
+                INNER JOIN t_neighborhood tn ON tnb.neighborhood_id = tn.id
+                INNER JOIN t_pumping_station_neighbourhood_number tpsnn ON tpsnn.neighborhood_id = tn.id AND tpsnn.neighborhood_building_id = tnb.id
+                INNER JOIN t_pumping_station tps ON tps.id = tpsnn.pumping_station_id
+        WHERE
+            tnb.del_flag = 0
+          AND tn.del_flag = 0
+          AND tpsnn.del_flag = 0
+          AND tps.del_flag = 0
+          AND tps.id = #{pumpingStationId}
+    </select>
+
+    <select id="getPumpAndBuildingNumberNamesByNeighbourhoodId" resultType="com.slibra.business.res.PumpAndBuildingNumberNames">
+        SELECT
+            tpsnn.id id,
+            tnb.`name` neighborhoodBuildingName,
+            IFNULL(tps.`name`, 'NULL') pumpingStationName
+        FROM
+            t_neighborhood_building tnb
+                LEFT JOIN t_pumping_station_neighbourhood_number tpsnn ON tpsnn.neighborhood_building_id = tnb.id
+                AND tpsnn.del_flag = 0
+                LEFT JOIN t_pumping_station tps ON tps.id = tpsnn.pumping_station_id
+                AND tps.del_flag = 0
+        WHERE
+            tnb.del_flag = 0
+          AND tnb.neighborhood_id = #{id}
+    </select>
 </mapper>

+ 13 - 0
slibra-system/src/main/resources/mapper/business/TWhitelistMapper.xml

@@ -92,4 +92,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <!-- 2024年11月12日10:52:37 下面是新增的SQL,不允许覆盖 -->
+    <select id="getUniquePhoneButNoThis" parameterType="com.slibra.business.domain.TWhitelist" resultType="string">
+        SELECT
+            id
+        FROM
+            t_whitelist
+        WHERE
+            phone = #{phone}
+          AND id != #{id}
+	      AND del_flag = 0
+	    limit 1
+    </select>
 </mapper>