Przeglądaj źródła

通过接线组ID查询线路开关段(所属变电站分组)接口

liuaini 2 miesięcy temu
rodzic
commit
752274dd2d

+ 96 - 1
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/application/FeederGroupApplication.java

@@ -1,12 +1,15 @@
 package com.hdkj.lt.bf.application;
 
+import cn.hutool.core.map.MapUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hdkj.fhzg.optimization.response.FeederGroupTreeNode;
+import com.hdkj.lt.base.constants.DictConstants;
 import com.hdkj.lt.bf.constants.OptimizationConstants;
 import com.hdkj.lt.bf.entity.TJxz;
 import com.hdkj.lt.bf.entity.TJxzXl;
 import com.hdkj.lt.bf.entity.convert.EntityToVOConvertor;
-import com.hdkj.lt.bf.entity.vo.XlRelVO;
+import com.hdkj.lt.bf.entity.vo.*;
+import com.hdkj.lt.bf.mapper.FhzgGridOperationAbnormalityMapper;
 import com.hdkj.lt.bf.service.TJxzService;
 import com.hdkj.lt.bf.service.TJxzXlService;
 import com.hdkj.lt.bf.service.impl.XlRelServiceImpl;
@@ -18,6 +21,10 @@ import com.hdkj.lt.core.sys.service.DwdShbDsFeederBaseService;
 import com.hdkj.lt.utils.cache.RedisRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
+import org.apache.commons.compress.utils.Lists;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
@@ -39,6 +46,7 @@ public class FeederGroupApplication {
     private final XlRelServiceImpl xlRelService;
     private final RedisRepository redisRepository;
     private final DwdShbDsFeederBaseService dwdShbDsFeederBaseService;
+    private final FhzgGridOperationAbnormalityMapper fhzgGridOperationAbnormalityMapper;
 
 
     public List<FeederGroupTreeNode> getFeederGroupTree() {
@@ -123,4 +131,91 @@ public class FeederGroupApplication {
         List<XlRel> xlRelList = xlRelService.list(new LambdaQueryWrapper<XlRel>().in(XlRel::getXlIdOne, xlIds));
         return EntityToVOConvertor.INSTANCE.toXlRelVOList(xlRelList);
     }
+
+    /**
+     * 通过接线组ID查询默认态开关段
+     * @param feederGroupId 接线组id
+     * @return List
+     */
+    public List<List<BreakerAreaVO>> getOverviewSwitchByFeederGroupId(String feederGroupId){
+        //获取开关类型
+        List<String> kgPsrTypes = Arrays.asList(DictConstants.KG_PSR_TYPE.split(","));
+        // 根据接线组ID获取线路
+        List<TJxzXl> jxzList = jxzXlService.list(new LambdaQueryWrapper<TJxzXl>().eq(TJxzXl::getJxzId, feederGroupId));
+        List<String> feederIds = jxzList.stream().map(TJxzXl::getXlid).collect(Collectors.toList());
+        //根据线路获取所属变电站
+        LambdaQueryWrapper<DwdShbDsFeederBase> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(DwdShbDsFeederBase::getPsrId, feederIds);
+        List<DwdShbDsFeederBase> list = dwdShbDsFeederBaseService.list(wrapper);
+        Map<String, String> stationMap = list.stream().collect(Collectors.toMap(DwdShbDsFeederBase::getPsrId, DwdShbDsFeederBase::getStartStation));
+        List<BreakerAreaVO> breakerAreaList = Lists.newArrayList();
+        feederIds.forEach(feeder->{
+            Map<String, List<String>> feederSwitchMap = MapUtil.newHashMap();
+            //*ztj ArgTableNameHandler.setArgument(fhzgOrganSuffixMapper.getOrganSuffixByPsrIdOrFeeder(null, feeder));
+            List<FeederDeviceVO> feederDeviceList = fhzgGridOperationAbnormalityMapper.getSwitchInfoWithoutNormal(feeder, kgPsrTypes);
+            Map<String, List<FeederDeviceVO>> collectMap = feederDeviceList.stream().collect(Collectors.groupingBy(FeederDeviceVO::getFeeder));
+            DynamicSvgDirectVO dynamicSvgDirect = fhzgGridOperationAbnormalityMapper.getDistLineDynamicSvgDirectCurrent(feeder);
+            Optional.ofNullable(dynamicSvgDirect).ifPresent(en -> {
+                // 动态表名切换
+                //*ztj ArgTableNameHandler.setArgument(fhzgOrganSuffixMapper.getOrganSuffixByPsrIdOrFeeder(null, feeder));
+                List<String> psrIds = en.getKgList().stream().map(FeederSwitchVO::getPsrId).collect(Collectors.toList());
+                // 查询topo数据真实的线路信息,如果是联络开关目前暂时不处理,取原图信息
+                Map<String, List<FeederSwitchVO>> stringMap = Optional.ofNullable(fhzgGridOperationAbnormalityMapper.getFeederSwitchByPsrId(psrIds))
+                        .map(data -> data.stream().collect(Collectors.groupingBy(FeederSwitchVO::getPsrId))).orElse(MapUtil.newHashMap());
+                feederSwitchMap.putAll(en.getKgList().stream()
+                        .peek(data -> {
+                            List<FeederSwitchVO> feederSwitchList = stringMap.get(data.getPsrId());
+                            if (CollectionUtils.size(feederSwitchList) == 1) { // 这里数量为1时表示非联络开关
+                                data.setFeeder(feederSwitchList.get(0).getFeeder());
+                            }
+                        }).collect(Collectors.groupingBy(FeederSwitchVO::getFeeder, Collectors.mapping(FeederSwitchVO::getPsrId, Collectors.toList()))));
+            });
+            List<String> feederList = feederSwitchMap.keySet().stream()
+                    .filter(strings -> !StringUtils.equals(feeder, strings)).collect(Collectors.toList());
+            if (CollectionUtils.size(feederList) > 0) {
+                // 动态表名切换
+                //*ztj ArgTableNameHandler.setArgument(fhzgOrganSuffixMapper.getOrganSuffixByPsrIdOrFeeder(null, feeder));
+                // 母线转换成线路分组数据
+                Map<String, List<FeederDeviceVO>> feederBusbar = Optional.ofNullable(fhzgGridOperationAbnormalityMapper.getFeederSwitchBusbar(feederList))
+                        .map(e -> e.stream().collect(Collectors.groupingBy(FeederDeviceVO::getFeeder))).orElse(MapUtil.newHashMap());
+                // 开关信息添加母线信息
+                feederSwitchMap.forEach((key, subList) -> {
+                    Optional.ofNullable(feederBusbar.get(key)).ifPresent(en -> subList.addAll(en.stream()
+                            .filter(f -> subList.contains(f.getSwitchId())).map(FeederDeviceVO::getPsrId).collect(Collectors.toList())));
+                });
+            }
+            // 返回值处理
+            breakerAreaList.addAll(collectMap.entrySet().stream()
+                    .map(e -> {
+                        List<FeederDeviceVO> feederDevices = e.getValue();
+                        String startSwitchId = null;
+                        Optional<FeederDeviceVO> first = feederDevices.stream().filter(f -> !StringUtils.equals("-", f.getSwitchId())).findFirst();
+                        if (first.isPresent()) {
+                            startSwitchId = first.get().getSwitchId();
+                        }
+                        List<String> endSwitchList = feederDevices.stream()
+                                .map(FeederDeviceVO::getEndSwitchId)
+                                .filter(endSwitchId -> !StringUtils.equals("-", endSwitchId)).collect(Collectors.toList());
+                        List<String> midSwitchList = feederDevices.stream()
+                                .map(FeederDeviceVO::getPsrId)
+                                .filter(psrId -> !StringUtils.equals("-", psrId)).collect(Collectors.toList());
+                        // 成图对应的显示开关,需要排除结尾开关和已存在的中间开关
+                        List<String> switchMxList = Optional.ofNullable(feederSwitchMap.get(e.getKey()))
+                                .map(en -> en.stream().filter(s -> !endSwitchList.contains(s) && !midSwitchList.contains(s)).collect(Collectors.toList()))
+                                .orElse(Lists.newArrayList());
+                        BreakerAreaVO breakerArea = new BreakerAreaVO();
+                        breakerArea.setIsFullLine("0").setOppositeLineId(e.getKey())
+                                .setStartSwitch(startSwitchId)
+                                .setEndSwitch(endSwitchList)
+                                .setMidSwitch(ListUtils.union(midSwitchList, switchMxList));
+                        return breakerArea;
+                    }).collect(Collectors.toList())
+            );
+        });
+        if(CollectionUtils.size(breakerAreaList) > 0){
+            Map<String, List<BreakerAreaVO>> listMap = breakerAreaList.stream().collect(Collectors.groupingBy(ba -> stationMap.get(ba.getOppositeLineId())));
+            return new ArrayList<>(listMap.values());
+        }
+        return Lists.newArrayList();
+    }
 }

+ 1 - 1
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/FhzgOperationAbnormalityController.java

@@ -133,7 +133,7 @@ public class FhzgOperationAbnormalityController extends BaseController {
 
     @PostMapping("/getDefaultOverviewSwitch")
     @ApiOperation(value = "通过事件ID查询默认态开关段")
-    @RequiresCountryPermissions(lineFields = "feederId")
+//    @RequiresCountryPermissions(lineFields = "feederId")
     public ApiResponse<List<BreakerAreaVO>> getDefaultOverviewSwitch(@RequestBody OperationAbnormalityQueryDTO request) {
         Boolean assertFlag = ObjectUtils.isNotEmpty(request) && StringUtils.isNotEmpty(request.getFeederId());
         Assert.isTrue(assertFlag, "线路ID不允许为空!");

+ 19 - 12
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/optimization/FeederGroupController.java

@@ -1,30 +1,24 @@
 package com.hdkj.lt.bf.controller.optimization;
 
-import com.alibaba.nacos.common.http.param.MediaType;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.hdkj.fhzg.optimization.request.FeederGroupRequest;
 import com.hdkj.fhzg.optimization.request.FeederRequest;
 import com.hdkj.fhzg.optimization.response.FeederGroupTreeNode;
 import com.hdkj.hussar.ApiResponse;
 import com.hdkj.lt.bf.application.FeederGroupApplication;
+import com.hdkj.lt.bf.entity.vo.BreakerAreaVO;
 import com.hdkj.lt.bf.entity.vo.XlRelVO;
+import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.ResponseEntity;
-import org.springframework.util.LinkedMultiValueMap;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.RestTemplate;
 
-import java.io.File;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * @author rj
@@ -61,5 +55,18 @@ public class FeederGroupController {
         return ApiResponse.success(xlRelList);
     }
 
+    /**
+     * 通过接线组ID查询默认态开关段
+     * @param request
+     * @return
+     */
+    @PostMapping("/getOverviewSwitchByFeederGroupId")
+    @ApiOperation(value = "通过接线组ID查询默认态开关段")
+    public ApiResponse<List<List<BreakerAreaVO>>> getOverviewSwitchByFeederGroupId(@RequestBody FeederGroupRequest request) {
+        boolean assertFlag = ObjectUtils.isNotEmpty(request) && StringUtils.isNotEmpty(request.getFeederGroupId());
+        Assert.isTrue(assertFlag, "接线组ID不允许为空!");
+        return ApiResponse.success(FeederGroupApplication.getOverviewSwitchByFeederGroupId(request.getFeederGroupId()));
+    }
+
 
 }

+ 1 - 1
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/entity/vo/BreakerAreaVO.java

@@ -24,7 +24,7 @@ public class BreakerAreaVO implements Serializable {
     @ApiModelProperty(value = "中间开关")
     List<String> midSwitch;
 
-    @ApiModelProperty(value = "终止开关开关")
+    @ApiModelProperty(value = "终止开关")
     List<String> endSwitch;
 
     @ApiModelProperty(value = "对侧联络线路ID")

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

@@ -39,6 +39,8 @@ public interface FhzgGridOperationAbnormalityMapper extends BaseMapper<FhzgGridO
     List<String> getFilterDirectCurrentSwitchInfo(@Param("filterLineSwitch")List<FilterLineSwitchVO> filterLineSwitch, @Param("kgPsrTypes")List<String> kgPsrTypes);
 
     LocalDateTime getPlanCreateTimeById(@Param("id")Long id);
+
+    List<FeederDeviceVO> getSwitchInfoWithoutNormal(@Param("feederId")String feederId, @Param("kgPsrTypes")List<String> kgPsrTypes);
 }
 
 

+ 17 - 0
services/load-transfer-bf/src/main/resources/mapper/FhzgGridOperationAbnormalityMapper.xml

@@ -216,6 +216,23 @@
     <select id="getPlanCreateTimeById" resultType="java.time.LocalDateTime">
         select create_time from fhzg_operation_abnormality_transfer_area_result where oa_id = #{id}
     </select>
+    <select id="getSwitchInfoWithoutNormal" resultType="com.hdkj.lt.bf.entity.vo.FeederDeviceVO">
+        with recursive res_tab as (
+            select t.feeder,t.psr_id,t.name, t.psr_type, t.start_kg_id ,t.normal_open
+            from t_feeder_topo t
+            where  t.feeder = #{feederId} and start_kg_id is null
+              and t.psr_type in <foreach collection='kgPsrTypes' item='item' open="(" separator=',' close=')'>#{item}</foreach>
+            union all
+            select t.feeder,t.psr_id, t.name , t.psr_type,t.start_kg_id ,t.normal_open
+            from t_feeder_topo t join res_tab p on t.start_kg_id = p.psr_id and t.feeder = p.feeder
+            where p.normal_open !='true'  and t.feeder = #{feederId} and t.psr_type in
+            <foreach collection='kgPsrTypes' item='item' open="(" separator=',' close=')'>#{item}</foreach>
+            )
+        select feeder, psr_id , name psrName, psr_type,
+               if(start_kg_id is null,psr_id,'-') switchId,
+               if(normal_open ='true',psr_id,'-') endSwitchId
+        from res_tab
+    </select>
 
     <sql id="forwardCurrentSql">
         <!-- 正向朝流经过的开关信息 -->