|
|
@@ -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();
|
|
|
+ }
|
|
|
}
|