Просмотр исходного кода

故障停电信息优化,增加区段信息

liuaini 1 месяц назад
Родитель
Сommit
af978bd866

+ 6 - 0
common/common-core/src/main/java/com/hdkj/lt/core/bizms/modle/po/fault/FaultPowerCut.java

@@ -227,4 +227,10 @@ public class FaultPowerCut implements Serializable {
      */
     @TableField(exist = false)
     private List<Long> countyCodeList;
+
+    /**
+     * 故障区段状态(默认0:未确认,1:已确认)
+     */
+    @TableField("section_status")
+    private Integer sectionStatus;
 }

+ 37 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/entity/vo/FhzgFaultPowerCutSectionVO.java

@@ -0,0 +1,37 @@
+package com.hdkj.lt.bf.entity.vo;
+
+import com.hdkj.lt.core.bizms.modle.dto.FhzgFaultDistMappingFileDTO;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * @author Liuaini
+ */
+@Data
+@Accessors(chain = true)
+public class FhzgFaultPowerCutSectionVO  {
+
+    //fhzg_fault_power_cut.fault_no
+    private String faultNo;
+    //fhzg_fault_power_cut.id
+    private Long faultId;
+    //开始开关
+    private String startSwitch;
+    //结束开关
+    private String endSwitch;
+    //开始开关名称
+    private String startSwitchName;
+    //结束开关名称
+    private String endSwitchName;
+    //故障区段状态(默认0:未确认,1:已确认)
+    private Integer sectionStatus;
+    //线路文件列表
+    private List<FhzgFaultDistMappingFileDTO> fileList;
+    //创建时间
+    private LocalDateTime createTime;
+
+}

+ 5 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/entity/vo/FhzgFaultPowerCutVO.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author lisonglin
@@ -46,4 +47,8 @@ public class FhzgFaultPowerCutVO extends FaultPowerCut {
 
     //保电用户
     private Integer protectUsers;
+
+    private List<FhzgFaultPowerCutSectionVO> sectionList;
+
+    private String faultId;
 }

+ 3 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/FaultPowerCutMapper.java

@@ -26,6 +26,9 @@ public interface FaultPowerCutMapper extends BaseMapper<FaultPowerCut> {
     @MybatisLikeInterceptorMethod
     List<FhzgFaultPowerCutVO> selectSchemeList(Page<FhzgFaultPowerCutVO> page, @Param("params")FaultPowerCut params );
 
+    @MybatisLikeInterceptorMethod
+    List<FhzgFaultPowerCutVO> selectSchemeList2(Page<FhzgFaultPowerCutVO> page, @Param("params")FaultPowerCut params );
+
     @Update("update fhzg_fault_power_cut t set t.scheme_state=#{obj.schemeState} where t.id = #{obj.id}")
     Integer updateSchemeState(@Param("obj") FaultPowerCut obj);
 

+ 5 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/FhzgFaultSwitchInfoListMapper.java

@@ -1,8 +1,12 @@
 package com.hdkj.lt.bf.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutSectionVO;
 import com.hdkj.lt.core.bizms.modle.po.fault.FhzgFaultSwitchInfoList;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
 * @author userlrk
@@ -13,6 +17,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface FhzgFaultSwitchInfoListMapper extends BaseMapper<FhzgFaultSwitchInfoList> {
 
+    List<FhzgFaultPowerCutSectionVO> querySectionsSwitchByFaultId(@Param("faultIdList") List<Long> faultId);
 }
 
 

+ 79 - 26
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/FaultPowerCutServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hdkj.lt.base.exception.BusinessException;
 import com.hdkj.lt.bf.entity.dto.HasDataTagDTO;
+import com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutSectionVO;
 import com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutVO;
 import com.hdkj.lt.bf.mapper.FaultAwaitTransferUsersMapper;
 import com.hdkj.lt.bf.mapper.FaultDistMappingFileMapper;
@@ -20,14 +21,14 @@ import com.hdkj.lt.core.bizms.modle.dto.FhzgFaultDistCustomerDTO;
 import com.hdkj.lt.core.bizms.modle.dto.FhzgFaultDistMappingFileDTO;
 import com.hdkj.lt.core.bizms.modle.po.fault.*;
 import com.hdkj.lt.modle.dto.jsty.AllSwitchInfoListDTO;
+import com.ruoyi.common.core.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -69,32 +70,78 @@ public class FaultPowerCutServiceImpl extends ServiceImpl<FaultPowerCutMapper, F
         Page<FhzgFaultPowerCutVO> page = new Page<>();
         page.setCurrent(obj.getPageNum());
         page.setSize(obj.getPageSize());
-        List<FhzgFaultPowerCutVO> list = baseMapper.selectSchemeList(page, obj);
-
-        if (CollUtil.isNotEmpty(list)) {
+//        List<FhzgFaultPowerCutVO> list = baseMapper.selectSchemeList(page, obj);
+        List<FhzgFaultPowerCutVO> list2 = baseMapper.selectSchemeList2(page, obj);
+
+        if (CollUtil.isNotEmpty(list2)) {
+            //获取故障停电主键id,grid_pd_outage_event_base.id
+            List<String> faultNoList = list2.stream().map(FhzgFaultPowerCutVO::getFaultId).collect(Collectors.toList());
+            //根据faultId获取idList,fhzg_fault_power_cut.id
+            List<FaultPowerCut> faultList = this.list(new LambdaQueryWrapper<FaultPowerCut>().in(FaultPowerCut::getFaultNo, faultNoList));
+            //根据FaultNo分组
+            Map<String,List<Long>> faultCollect = faultList.stream().collect(Collectors.groupingBy(FaultPowerCut::getFaultNo,
+                    Collectors.mapping(FaultPowerCut::getId,Collectors.toList())));
+            List<Long> idList = faultList.stream().map(FaultPowerCut::getId).collect(Collectors.toList());
+            //获取开关信息
+            List<FhzgFaultPowerCutSectionVO> faultPowerCutSectionList = switchInfoListMapper.querySectionsSwitchByFaultId(idList);
+            Map<String, List<FhzgFaultPowerCutSectionVO>> sectionMap = faultPowerCutSectionList.stream().collect(Collectors.groupingBy(
+                    FhzgFaultPowerCutSectionVO::getFaultNo,
+                    Collectors.collectingAndThen(
+                            Collectors.toList(),
+                            list->list.stream().sorted(
+                                    Comparator.comparing(FhzgFaultPowerCutSectionVO::getSectionStatus,Comparator.reverseOrder())
+                                            .thenComparing(FhzgFaultPowerCutSectionVO::getCreateTime,Comparator.reverseOrder()))
+                                    .collect(Collectors.toList())))
+            );
             //查询计划对应的线路图信息
-            List<Long> idList = list.stream().map(FhzgFaultPowerCutVO::getId).collect(Collectors.toList());
             List<FhzgFaultDistMappingFileDTO> fileList = faultDistMappingFileMapper.getMappingFileByPlanId(idList);
-            if (CollUtil.isNotEmpty(fileList)) {
-                Map<Long, List<FhzgFaultDistMappingFileDTO>> fileListMap = fileList.stream().collect(Collectors.groupingBy(FhzgFaultDistMappingFileDTO::getFaultId));
-                list.forEach(e -> {
-                    e.setFileList(fileListMap.get(e.getId()));
-                });
+           if (CollUtil.isNotEmpty(faultPowerCutSectionList)) {
+               Map<Long, List<FhzgFaultDistMappingFileDTO>> fileListMap = fileList.stream().collect(Collectors.groupingBy(FhzgFaultDistMappingFileDTO::getFaultId));
+               list2.forEach(e -> {
+                   //故障id
+                   String fId = e.getFaultId();
+                   List<FhzgFaultPowerCutSectionVO> faultPowerCuts = null != sectionMap.get(fId) ? sectionMap.get(fId) : new ArrayList<>();
+                   faultPowerCuts.forEach(section->{
+                       Optional.of(fileListMap).ifPresent(f->section.setFileList(Objects.nonNull(f.get(section.getFaultId()))?f.get(section.getFaultId()): Lists.newArrayList()));
+                   });
+                   e.setSectionList(faultPowerCuts);
+               });
             } else {
-                log.info("未查询到故障停电文件列表faultIdList:{}", idList);
+                log.info("未查询到故障停电开关信息faultIdList:{}", idList);
             }
             //查询统计,用户数量,重要用户数量,敏感用户数量,用户负荷
             List<FhzgFaultAwaitTransferUsersCountDTO> usersCountDTOList = faultAwaitTransferUsersMapper.selectAwaitUserCountByFaultId(idList);
             if (CollUtil.isNotEmpty(usersCountDTOList)) {
                 Map<Long, FhzgFaultAwaitTransferUsersCountDTO> fusersCountMap = usersCountDTOList.stream().collect(Collectors.toMap(FhzgFaultAwaitTransferUsersCountDTO::getFaultId, Function.identity(), (k1, k2) -> k2));
-                list.forEach(e -> {
-                    FhzgFaultAwaitTransferUsersCountDTO userCountDTO = fusersCountMap.get(e.getId());
-                    if (!Objects.isNull(userCountDTO)) {
-                        e.setTransferCriticalUsers(userCountDTO.getTransferCriticalUsers());//重要用户数量
-                        e.setTransferSensitiveUsers(userCountDTO.getTransferSensitiveUsers());//敏感用户
-                        e.setUserCount(userCountDTO.getUserCount());//用户数量
-                        e.setUserLoads(userCountDTO.getUserLoads());//用户负荷
-                        e.setProtectUsers(userCountDTO.getProtectUsers());//保电用户数量
+                list2.forEach(e -> {
+//                    FhzgFaultAwaitTransferUsersCountDTO userCountDTO = fusersCountMap.get(e.getId());
+//                    if (!Objects.isNull(userCountDTO)) {
+//                        e.setTransferCriticalUsers(userCountDTO.getTransferCriticalUsers());//重要用户数量
+//                        e.setTransferSensitiveUsers(userCountDTO.getTransferSensitiveUsers());//敏感用户
+//                        e.setUserCount(userCountDTO.getUserCount());//用户数量
+//                        e.setUserLoads(userCountDTO.getUserLoads());//用户负荷
+//                        e.setProtectUsers(userCountDTO.getProtectUsers());//保电用户数量
+//                    }
+                    //故障id
+                    String fId = e.getFaultId();
+                    List<Long> ids = faultCollect.get(fId);
+                    List<FhzgFaultAwaitTransferUsersCountDTO> dtoList = ids.stream().map(fusersCountMap::get).filter(Objects::nonNull).collect(Collectors.toList());
+                    if(!dtoList.isEmpty()){
+                        Integer maxTransferCriticalUsers = dtoList.stream().map(FhzgFaultAwaitTransferUsersCountDTO::getTransferCriticalUsers)
+                                .filter(Objects::nonNull).max(Integer::compareTo).orElse(null);
+                        Integer maxTransferSensitiveUsers = dtoList.stream().map(FhzgFaultAwaitTransferUsersCountDTO::getTransferSensitiveUsers)
+                                .filter(Objects::nonNull).max(Integer::compareTo).orElse(null);
+                        Integer maxUserCount = dtoList.stream().map(FhzgFaultAwaitTransferUsersCountDTO::getUserCount)
+                                .filter(Objects::nonNull).max(Integer::compareTo).orElse(null);
+                        BigDecimal maxUserLoads = dtoList.stream().map(FhzgFaultAwaitTransferUsersCountDTO::getUserLoads)
+                                .filter(Objects::nonNull).max(BigDecimal::compareTo).orElse(null);
+                        Integer maxProtectUsers = dtoList.stream().map(FhzgFaultAwaitTransferUsersCountDTO::getProtectUsers)
+                                .filter(Objects::nonNull).max(Integer::compareTo).orElse(null);
+                        e.setTransferCriticalUsers(maxTransferCriticalUsers);//重要用户数量
+                        e.setTransferSensitiveUsers(maxTransferSensitiveUsers);//敏感用户
+                        e.setUserCount(maxUserCount);//用户数量
+                        e.setUserLoads(maxUserLoads);//用户负荷
+                        e.setProtectUsers(maxProtectUsers);//保电用户数量
                     }
                 });
             } else {
@@ -104,9 +151,14 @@ public class FaultPowerCutServiceImpl extends ServiceImpl<FaultPowerCutMapper, F
             List<FaultPowerCutPvUsers> countCutPvUsers = faultPowerCutPvUsersService.countByFaultId(idList);
             if (CollUtil.isNotEmpty(countCutPvUsers)) {
                 Map<Long, FaultPowerCutPvUsers> cutPvUsersMap = countCutPvUsers.stream().collect(Collectors.toMap(FaultPowerCutPvUsers::getFaultId, Function.identity(), (k1, k2) -> k2));
-                list.forEach(e -> {
-                    FaultPowerCutPvUsers faultPowerCutPvUsers = cutPvUsersMap.get(e.getId());
-                    Integer count = Objects.isNull(faultPowerCutPvUsers) ? 0 : Objects.isNull(faultPowerCutPvUsers.getCount()) ? 0 : faultPowerCutPvUsers.getCount();
+                list2.forEach(e -> {
+//                    FaultPowerCutPvUsers faultPowerCutPvUsers = cutPvUsersMap.get(e.getId());
+//                    Integer count = Objects.isNull(faultPowerCutPvUsers) ? 0 : Objects.isNull(faultPowerCutPvUsers.getCount()) ? 0 : faultPowerCutPvUsers.getCount();
+//                    e.setPvUsers(count);
+                    String fId = e.getFaultId();
+                    List<Long> ids = faultCollect.get(fId);
+                    List<FaultPowerCutPvUsers> usersList = ids.stream().map(cutPvUsersMap::get).filter(Objects::nonNull).collect(Collectors.toList());
+                    Integer count = usersList.stream().map(FaultPowerCutPvUsers::getCount).filter(Objects::nonNull).max(Integer::compareTo).orElse(0);
                     e.setPvUsers(count);
                 });
             } else {
@@ -116,8 +168,9 @@ public class FaultPowerCutServiceImpl extends ServiceImpl<FaultPowerCutMapper, F
         } else {
             log.info("查询故障停电数据为空condition:{}", obj);
         }
-        list.stream().filter(i -> i.getUserLoads() != null).forEach(i->i.setUserLoads(i.getUserLoads().multiply(new BigDecimal("1000"))));
-        return page.setRecords(list);
+        BigDecimal multiplyNumber = new BigDecimal("1000");
+        list2 = list2.stream().filter(i -> i.getUserLoads()!= null && i.getUserLoads().compareTo(BigDecimal.ZERO) != 0).peek(i->i.setUserLoads(i.getUserLoads().multiply(multiplyNumber))).collect(Collectors.toList());
+        return page.setRecords(list2);
     }
 
     @Override

+ 38 - 1
services/load-transfer-bf/src/main/resources/mapper/FaultPowerCutMapper.xml

@@ -4,7 +4,12 @@
 
 
     <select id="selectSchemeList" resultType="com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutVO">
+        <include refid="schemeListSql"/>
+    </select>
+
+    <sql id="schemeListSql">
         select t.id,
+        t.fault_no fault_id,
         t.fault_start_time,
         t.fault_end_time,
         t.fault_type,
@@ -26,7 +31,8 @@
         t.last_time,
         t.county_code,
         t.county_name,
-        b.outage_number faultNo
+        b.outage_number faultNo,
+        ROW_NUMBER() over(partition by t.fault_no ORDER BY section_status desc,create_time desc) as rn
         from fhzg_fault_power_cut t
         left join grid_pd_outage_event_base b on t.fault_no = b.id
         <where>
@@ -59,5 +65,36 @@
             </if>
         </where>
         ORDER BY ABS(TIMESTAMPDIFF(SECOND,FAULT_START_TIME,NOW())) ASC ,id desc
+    </sql>
+    <select id="selectSchemeList2" resultType="com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutVO">
+        select t.id,
+        t.fault_id,
+        t.fault_start_time,
+        t.fault_end_time,
+        t.fault_type,
+        t.fault_source,
+        t.line_id,
+        t.line_name,
+        t.fault_description,
+        t.strategy_id,
+        t.feeder_name,
+        t.city_code,
+        t.city_name,
+        t.scheme_create_time,
+        t.scheme_create_duration,
+        t.scheme_state,
+        t.power_on_success,
+        t.creator,
+        t.create_time,
+        t.last_editor,
+        t.last_time,
+        t.county_code,
+        t.county_name,
+        t.faultNo
+        from (<include refid="schemeListSql"/>) t
+        <where>
+            t.rn =1
+        </where>
+
     </select>
 </mapper>

+ 16 - 0
services/load-transfer-bf/src/main/resources/mapper/FhzgFaultSwitchInfoListMapper.xml

@@ -14,4 +14,20 @@
         id
         ,fault_id,all_switch_info_list_json
     </sql>
+    <select id="querySectionsSwitchByFaultId" resultType="com.hdkj.lt.bf.entity.vo.FhzgFaultPowerCutSectionVO">
+        select pc.fault_no,cs.fault_id,cs.start_switch,cs.end_switch,
+               ft1.name start_switch_name,ft2.name end_switch_name,
+               pc.create_time,pc.section_status
+        from
+            fhzg_fault_power_cut pc
+                INNER JOIN fhzg_fault_power_cut_switch cs on cs.fault_id=pc.id
+                left join dwd_shb_ds_switch_base ft1 on cs.start_switch = ft1.psr_id
+                left join dwd_shb_ds_switch_base ft2 on cs.end_switch = ft2.psr_id
+        <where>
+            cs.fault_id in
+            <foreach collection="faultIdList" open="(" item="faultId" separator="," close=")">
+                #{faultId}
+            </foreach>
+        </where>
+    </select>
 </mapper>