曲靖3层树特殊处理

This commit is contained in:
2026-01-07 08:50:51 +08:00
parent be8c14625f
commit 82efce189a
2 changed files with 198 additions and 147 deletions

View File

@@ -25,6 +25,12 @@ public class SimpleDTO implements Serializable {
@ApiModelProperty(name = "value", value = "数值")
private String value;
/**
* 针对云南曲靖特殊处理的五层树标识符
* 特殊在不显示供电公司,显示(变电站、线路)这两个是部门的名称+母线_监测点的名称
*/
private String deptName;
private Integer sort;
private Integer algoDescribe;

View File

@@ -29,6 +29,8 @@ import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
import com.njcn.system.api.AreaFeignClient;
import com.njcn.system.pojo.enums.StatisticsEnum;
import com.njcn.system.pojo.po.Area;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -52,6 +54,8 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
private final LineMapper lineMapper;
private final DeptFeignClient deptFeignClient;
private final LineDetailMapper lineDetailMapper;
private final AreaFeignClient areaFeignClient;
@@ -84,40 +88,40 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
//处理存在用户的台账
List<TerminalTree> newLineList = lineMapper.getLineAndLineDetail();
//用户侧测点
List<TerminalTree> userLineList = newLineList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<TerminalTree> userLineList = newLineList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
//用户侧装置
List<String> devIds = userLineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
List<TerminalTree> devUserList = devList.stream().filter(it->devIds.contains(it.getId())).collect(Collectors.toList());
List<String> devIds = userLineList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
List<TerminalTree> devUserList = devList.stream().filter(it -> devIds.contains(it.getId())).collect(Collectors.toList());
//用户侧线路
List<TerminalTree> subvUserList = subvList.stream().filter(it->devIds.contains(it.getPid())).collect(Collectors.toList());
List<TerminalTree> subvUserList = subvList.stream().filter(it -> devIds.contains(it.getPid())).collect(Collectors.toList());
List<String> subvUserIds = subvUserList.stream().map(TerminalTree::getId).distinct().collect(Collectors.toList());
//电网侧测点
List<TerminalTree> otherLineList = newLineList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
List<String> devOtherIds = otherLineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
List<TerminalTree> otherLineList = newLineList.stream().filter(it -> StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
List<String> devOtherIds = otherLineList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
//电网侧装置
List<TerminalTree> devOtherList = devList.stream().filter(it->devOtherIds.contains(it.getId())).collect(Collectors.toList());
List<TerminalTree> noBindDevList = devList.stream().filter(it->!devOtherIds.contains(it.getId()) && !devIds.contains(it.getId())).collect(Collectors.toList());
List<TerminalTree> devOtherList = devList.stream().filter(it -> devOtherIds.contains(it.getId())).collect(Collectors.toList());
List<TerminalTree> noBindDevList = devList.stream().filter(it -> !devOtherIds.contains(it.getId()) && !devIds.contains(it.getId())).collect(Collectors.toList());
devOtherList.addAll(noBindDevList);
//电网侧线路
List<TerminalTree> subvOtherList = subvList.stream().filter(it->devOtherIds.contains(it.getPid())).collect(Collectors.toList());
List<TerminalTree> subvOtherList = subvList.stream().filter(it -> devOtherIds.contains(it.getPid())).collect(Collectors.toList());
List<String> otherBusBarIds = subvOtherList.stream().map(TerminalTree::getId).distinct().collect(Collectors.toList());
List<TerminalTree> noBindList = subvList.stream().filter(it->!subvUserIds.contains(it.getId()) && !otherBusBarIds.contains(it.getId())).collect(Collectors.toList());
List<TerminalTree> noBindList = subvList.stream().filter(it -> !subvUserIds.contains(it.getId()) && !otherBusBarIds.contains(it.getId())).collect(Collectors.toList());
subvOtherList.addAll(noBindList);
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
userReportPOList = userReportPOList.stream().filter(it->StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String,List<UserLedgerVO>> userMap = userReportPOList.stream().collect(Collectors.groupingBy(UserLedgerVO::getStationId));
userReportPOList = userReportPOList.stream().filter(it -> StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String, List<UserLedgerVO>> userMap = userReportPOList.stream().collect(Collectors.groupingBy(UserLedgerVO::getStationId));
subvOtherList.forEach(subv -> subv.setChildren(getChildren(subv, otherLineList)));
devOtherList.forEach(dev -> dev.setChildren(getChildren(dev, subvOtherList)));
subList.forEach(sub -> sub.setChildren(specialDealSubChildren(sub, userLineList,devOtherList,subvUserList,devUserList,userMap.get(sub.getId()))));
subList.forEach(sub -> sub.setChildren(specialDealSubChildren(sub, userLineList, devOtherList, subvUserList, devUserList, userMap.get(sub.getId()))));
//subList.forEach(sub -> sub.setChildren(getChildren(sub, devList)));
gdList.forEach(gd -> gd.setChildren(getChildren(gd, subList)));
provinceList.forEach(province -> province.setChildren(getChildren(province, gdList)));
@@ -137,15 +141,15 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
}
private List<TerminalTree> specialDealSubChildren(TerminalTree sub,List<TerminalTree> lineUserList,List<TerminalTree> devOtherList,List<TerminalTree> busBarList,List<TerminalTree> devAllList,List<UserLedgerVO> userReportPOList){
private List<TerminalTree> specialDealSubChildren(TerminalTree sub, List<TerminalTree> lineUserList, List<TerminalTree> devOtherList, List<TerminalTree> busBarList, List<TerminalTree> devAllList, List<UserLedgerVO> userReportPOList) {
List<TerminalTree> list = new ArrayList<>();
//电网侧
List<TerminalTree> devTree = devOtherList.stream().filter(it->it.getPid().equals(sub.getId())).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(devTree)){
List<TerminalTree> devTree = devOtherList.stream().filter(it -> it.getPid().equals(sub.getId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(devTree)) {
list.addAll(devTree);
}
//非电网侧
if(CollUtil.isNotEmpty(userReportPOList)) {
if (CollUtil.isNotEmpty(userReportPOList)) {
Map<String, UserLedgerVO> userLedgerVOMap = userReportPOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
List<TerminalTree> userLineList = lineUserList.stream().filter(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()].equals(sub.getId())).collect(Collectors.toList());
@@ -190,7 +194,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
});
UserLedgerVO userReportPO = userLedgerVOMap.get(objId);
if(Objects.isNull(userReportPO)){
if (Objects.isNull(userReportPO)) {
System.out.println(map);
}
TerminalTree terminalTree = new TerminalTree();
@@ -209,8 +213,6 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
}
/**
* 5层树排除设备 母线监测点合并
*
@@ -226,78 +228,122 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) {
// 创建集合
List<TerminalTree> taiZhang = new ArrayList<>();
// 获取用户
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
userReportPOList = userReportPOList.stream().filter(it -> StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String, UserLedgerVO> userMap = userReportPOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
// 遍历集合
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
// 创建实体类
TerminalTree terminalTree = new TerminalTree();
// 判断监测点索引集合状态
if (CollectionUtils.isEmpty(generalDeviceDTO.getLineIndexes())) {
continue;
}
// 通过供电公司索引查询省会
List<TerminalTree> proList = treeMapper.getProvinceList(generalDeviceDTO.getGdIndexes());
// 通过供电公司索引查询供电公司信息
List<TerminalTree> gdList = treeMapper.getGdList(generalDeviceDTO.getGdIndexes());
// 通过供电站索引查询供电站信息
List<TerminalTree> subList = treeMapper.getSubList(generalDeviceDTO.getSubIndexes());
// 通过监测点索引查询监测点信息
List<TerminalTree> lineList = treeMapper.getLineList(generalDeviceDTO.getLineIndexes());
List<TerminalTree> userLineList = lineList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<TerminalTree> otherLineList = lineList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
Map<String,List<TerminalTree>> temMap = new HashMap<>();
if(CollUtil.isNotEmpty(userLineList)) {
Map<String, List<TerminalTree>> objMap = userLineList.stream().collect(Collectors.groupingBy(TerminalTree::getObjId));
List<TerminalTree> temList = new ArrayList<>();
objMap.forEach((objId, monitorList) -> {
UserLedgerVO userLedgerVO = userMap.get(objId);
TerminalTree tree = new TerminalTree();
tree.setLevel(LineBaseEnum.USER_LEVEL.getCode());
tree.setPid(userLedgerVO.getStationId());
tree.setId(userLedgerVO.getId());
tree.setChildren(monitorList);
int devSize = (int) monitorList.stream().map(x -> {
// 获取父id字符串通过 逗号 分割 成一个数组
String[] pid = x.getPids().split(StrUtil.COMMA);
return pid[LineBaseEnum.DEVICE_LEVEL.getCode()];
}).distinct().count();
tree.setName(userLedgerVO.getProjectName());
//特殊处理用户层级下面的装置数量临时存到pids字段。
tree.setPids(String.valueOf(devSize));
temList.add(tree);
});
temMap = temList.stream().collect(Collectors.groupingBy(TerminalTree::getPid));
if (StrUtil.isNotBlank(deviceInfoParam.getStatisticalType().getDeptName())) {
// 遍历集合
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
// 创建实体类
TerminalTree terminalTree = new TerminalTree();
terminalTree.setName(generalDeviceDTO.getName());
terminalTree.setId(generalDeviceDTO.getIndex());
terminalTree.setLevel(0);
// 处理子部门
deviceInfoParam.setDeptIndex(generalDeviceDTO.getIndex());
List<GeneralDeviceDTO> generalDeviceDTOsubList = generalDeviceService.getDeviceInfo(deviceInfoParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(generalDeviceDTOsubList)) {
List<TerminalTree> terminalTreeList = new ArrayList<>();
for (int i = 0; i < generalDeviceDTOsubList.size(); i++) {
GeneralDeviceDTO deviceDTO = generalDeviceDTOsubList.get(i);
TerminalTree terminalSubTree = new TerminalTree();
terminalSubTree.setName(deviceDTO.getName());
terminalSubTree.setId(deviceDTO.getIndex());
terminalSubTree.setPid(generalDeviceDTO.getIndex());
terminalSubTree.setLevel(2);
terminalSubTree.setSort(i);
if(CollectionUtil.isNotEmpty(deviceDTO.getLineIndexes())){
// 处理该部门下的检测点显示
// 通过监测点索引查询监测点信息
List<TerminalTree> lineList = treeMapper.getLineList(deviceDTO.getLineIndexes());
terminalSubTree.setChildren(lineList);
terminalTreeList.add(terminalSubTree);
}
}
terminalTree.setChildren(terminalTreeList);
} else {
if(CollectionUtil.isNotEmpty(generalDeviceDTO.getLineIndexes())){
// 处理该部门下的检测点显示
// 通过监测点索引查询监测点信息
List<TerminalTree> lineList = treeMapper.getLineList(generalDeviceDTO.getLineIndexes());
terminalTree.setChildren(lineList);
}
}
taiZhang.add(terminalTree);
}
} else {
// 获取用户
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
userReportPOList = userReportPOList.stream().filter(it -> StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String, UserLedgerVO> userMap = userReportPOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
// 遍历集合
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
// 创建实体类
TerminalTree terminalTree = new TerminalTree();
// 判断监测点索引集合状态
if (CollectionUtils.isEmpty(generalDeviceDTO.getLineIndexes())) {
continue;
}
// 通过供电公司索引查询省会
List<TerminalTree> proList = treeMapper.getProvinceList(generalDeviceDTO.getGdIndexes());
// 通过供电公司索引查询供电公司信息
List<TerminalTree> gdList = treeMapper.getGdList(generalDeviceDTO.getGdIndexes());
// 通过供电站索引查询供电站信息
List<TerminalTree> subList = treeMapper.getSubList(generalDeviceDTO.getSubIndexes());
// 通过监测点索引查询监测点信息
List<TerminalTree> lineList = treeMapper.getLineList(generalDeviceDTO.getLineIndexes());
List<TerminalTree> userLineList = lineList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<TerminalTree> otherLineList = lineList.stream().filter(it -> StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
Map<String, List<TerminalTree>> temMap = new HashMap<>();
if (CollUtil.isNotEmpty(userLineList)) {
Map<String, List<TerminalTree>> objMap = userLineList.stream().collect(Collectors.groupingBy(TerminalTree::getObjId));
List<TerminalTree> temList = new ArrayList<>();
objMap.forEach((objId, monitorList) -> {
UserLedgerVO userLedgerVO = userMap.get(objId);
TerminalTree tree = new TerminalTree();
tree.setLevel(LineBaseEnum.USER_LEVEL.getCode());
tree.setPid(userLedgerVO.getStationId());
tree.setId(userLedgerVO.getId());
tree.setChildren(monitorList);
int devSize = (int) monitorList.stream().map(x -> {
// 获取父id字符串通过 逗号 分割 成一个数组
String[] pid = x.getPids().split(StrUtil.COMMA);
return pid[LineBaseEnum.DEVICE_LEVEL.getCode()];
}).distinct().count();
tree.setName(userLedgerVO.getProjectName());
//特殊处理用户层级下面的装置数量临时存到pids字段。
tree.setPids(String.valueOf(devSize));
temList.add(tree);
});
temMap = temList.stream().collect(Collectors.groupingBy(TerminalTree::getPid));
}
//处理变电站
dealChildrenData(subList, otherLineList, temMap,true);
//处理变电站
dealChildrenData(subList, otherLineList, temMap, true);
//监测点前面加序号,后面不需要删除下面两行就行
//Integer[] arr = {1};
//subList.forEach(item->item.getChildren().forEach(it->it.setName((arr[0]++ +"_"+it.getName()))));
//处理供电公司
dealChildrenData(gdList, subList, null,false);
//监测点前面加序号,后面不需要删除下面两行就行
//Integer[] arr = {1};
//subList.forEach(item->item.getChildren().forEach(it->it.setName((arr[0]++ +"_"+it.getName()))));
//处理供电公司
dealChildrenData(gdList, subList, null, false);
if (deviceInfoParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) {
terminalTree.setChildren(gdList);
} else {
//还需要额外处理省会
dealChildrenData(proList, gdList, null,false);
terminalTree.setChildren(proList);
if (deviceInfoParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) {
terminalTree.setChildren(gdList);
} else {
//还需要额外处理省会
dealChildrenData(proList, gdList, null, false);
terminalTree.setChildren(proList);
}
terminalTree.setId(generalDeviceDTO.getIndex());
terminalTree.setName(generalDeviceDTO.getName());
terminalTree.setLevel(0);
taiZhang.add(terminalTree);
}
terminalTree.setId(generalDeviceDTO.getIndex());
terminalTree.setName(generalDeviceDTO.getName());
terminalTree.setLevel(0);
taiZhang.add(terminalTree);
}
return taiZhang;
} else {
@@ -312,7 +358,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
* @param childrenData
* @param isLine
*/
private void dealChildrenData(List<TerminalTree> targetData, List<TerminalTree> childrenData,Map<String,List<TerminalTree>> userLineMap, boolean isLine) {
private void dealChildrenData(List<TerminalTree> targetData, List<TerminalTree> childrenData, Map<String, List<TerminalTree>> userLineMap, boolean isLine) {
// 创建一个map集合用于封装对象
Map<String, List<TerminalTree>> groupLine;
if (isLine) {
@@ -328,7 +374,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
//变电站
targetData.forEach(terminalTree -> {
List<TerminalTree> terminalTrees = new ArrayList<>();
if(groupLine.containsKey(terminalTree.getId())) {
if (groupLine.containsKey(terminalTree.getId())) {
terminalTrees.addAll(groupLine.get(terminalTree.getId()).stream().sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList()));
}
if (isLine) {
@@ -340,13 +386,13 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
}).distinct().count();
int devSize = 0;
if(userLineMap.containsKey(terminalTree.getId())){
if (userLineMap.containsKey(terminalTree.getId())) {
List<TerminalTree> userList = userLineMap.get(terminalTree.getId());
devSize= (int) userList.stream().mapToDouble(it->Integer.parseInt(it.getPids())).sum();
devSize = (int) userList.stream().mapToDouble(it -> Integer.parseInt(it.getPids())).sum();
terminalTrees.addAll(userList);
}
int sumDev = size+devSize;
terminalTree.setName(terminalTree.getName() + "" +sumDev+ "台装置)");
int sumDev = size + devSize;
terminalTree.setName(terminalTree.getName() + "" + sumDev + "台装置)");
terminalTree.setChildren(terminalTrees);
} else {
terminalTree.setChildren(terminalTrees);
@@ -392,7 +438,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
DeviceInfoParam deviceInfoParam = new DeviceInfoParam();
deviceInfoParam.setDeptIndex(RequestUtil.getDeptIndex());
deviceInfoParam.setServerName(ServerEnum.HARMONIC.getName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, Stream.of(0,1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, Stream.of(0, 1).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
if (CollectionUtil.isEmpty(generalDeviceDTO.getLineIndexes())) {
@@ -472,89 +518,89 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
List<LineDetail> list = lineDetailMapper.selectList(new LambdaQueryWrapper<LineDetail>().in(CollUtil.isNotEmpty(lineIds), LineDetail::getId, lineIds));
Map<String, LineDetail> powerFlagMap = list.stream().collect(Collectors.toMap(LineDetail::getId, Function.identity()));
for (TerminalTree x : lineList) {
if(powerFlagMap.containsKey(x.getId())){
if (powerFlagMap.containsKey(x.getId())) {
x.setPowerFlag(powerFlagMap.get(x.getId()).getPowerFlag());
x.setPowerSubstationName(powerFlagMap.get(x.getId()).getPowerSubstationName());
x.setObjName(powerFlagMap.get(x.getId()).getObjName());
}else{
} else {
x.setPowerFlag(LineBaseEnum.POWER_FLAG.getCode());
}
}
Map<String, List<TerminalTree>> lineObjNameMap = lineList.stream().filter(x -> StrUtil.isNotBlank(x.getPowerSubstationName())).collect(Collectors.groupingBy(TerminalTree::getPowerSubstationName));
Map<String, List<TerminalTree>> lineObjNameMap = lineList.stream().filter(x -> StrUtil.isNotBlank(x.getPowerSubstationName())).collect(Collectors.groupingBy(TerminalTree::getPowerSubstationName));
//组织变电站信息
List<TerminalTree> subInfoList = new ArrayList<>();
List<TerminalTree> subInfoList = new ArrayList<>();
lineObjNameMap.forEach((key, value)->{
lineObjNameMap.forEach((key, value) -> {
List<TerminalTree> terminalTrees = Collections.unmodifiableList(collect1);
//获取变电信息
List<TerminalTree> collect = subList.stream().filter(x -> x.getName().equals(key.replace("±",""))).collect(Collectors.toList());
List<TerminalTree> collect = subList.stream().filter(x -> x.getName().equals(key.replace("±", ""))).collect(Collectors.toList());
//电网侧监测点
List<TerminalTree> powerFlag = value.stream().filter(x -> x.getPowerFlag().equals(LineBaseEnum.POWER_FLAG.getCode())).collect(Collectors.toList());
if(CollUtil.isEmpty(powerFlag)){
if (CollUtil.isEmpty(powerFlag)) {
//解决变电站下没有监测点显示问题(变电站-》终端-》母线)
powerFlag.addAll(collect);
}
List<TerminalTree> subChildren = new ArrayList<>();
TerminalTree recursion = getRecursionChildren(powerFlag, terminalTrees);
if(ObjectUtil.isNotNull(recursion)){
if (ObjectUtil.isNotNull(recursion)) {
subChildren.add(recursion);
}
//非电网侧监测点
List<TerminalTree> powerFlagNot = value.stream().filter(x -> x.getPowerFlag().equals(LineBaseEnum.POWER_FLAG_NOT.getCode())).collect(Collectors.toList());
List<TerminalTree> notSubChildren = new ArrayList<>();
if(CollUtil.isNotEmpty(powerFlagNot)){
if (CollUtil.isNotEmpty(powerFlagNot)) {
Map<String, List<TerminalTree>> objNameMap = powerFlagNot.stream().collect(Collectors.groupingBy(TerminalTree::getObjName));
objNameMap.forEach((objNameKey,objNameValue)->{
objNameMap.forEach((objNameKey, objNameValue) -> {
TerminalTree recursionChildren = getRecursionChildren(objNameValue, terminalTrees);
if(ObjectUtil.isNotNull(recursionChildren)){
if (ObjectUtil.isNotNull(recursionChildren)) {
recursionChildren.setName(objNameKey);
notSubChildren.add(recursionChildren);
}
});
}
if(CollUtil.isNotEmpty(collect)){
if (CollUtil.isNotEmpty(collect)) {
List<TerminalTree> valueList = new ArrayList<>();
TerminalTree sub=new TerminalTree();
TerminalTree sub = new TerminalTree();
sub.setId(collect.get(0).getId());
sub.setName(collect.get(0).getName());
sub.setPid(collect.get(0).getPid());
sub.setSort(0);
sub.setChildren(valueList);
TerminalTree powerTree=new TerminalTree();
TerminalTree powerTree = new TerminalTree();
powerTree.setName("电网侧");
powerTree.setId(collect.get(0).getId());
powerTree.setChildren(subChildren);
valueList.add(powerTree);
TerminalTree notPowerTree=new TerminalTree();
TerminalTree notPowerTree = new TerminalTree();
notPowerTree.setName("非电网侧");
notPowerTree.setChildren(notSubChildren);
valueList.add(notPowerTree);
subInfoList.add(sub);
}else{
} else {
//电网侧变电站能否找到
for (TerminalTree child : subChildren) {
List<TerminalTree> valueList = new ArrayList<>();
List<TerminalTree> exist = subInfoList.stream().filter(x -> x.getId().equals(child.getId())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(exist)){
if (CollUtil.isNotEmpty(exist)) {
//电网侧
List<TerminalTree> children =new ArrayList<>();
List<TerminalTree> children = new ArrayList<>();
children.addAll(exist.get(0).getChildren().get(0).getChildren());
children.add(child);
exist.get(0).getChildren().get(0).setChildren(children);
}else{
TerminalTree sub=new TerminalTree();
} else {
TerminalTree sub = new TerminalTree();
sub.setId(child.getId());
sub.setName(child.getName());
sub.setPid(child.getPid());
sub.setSort(0);
TerminalTree powerTree=new TerminalTree();
TerminalTree powerTree = new TerminalTree();
powerTree.setName("电网侧");
powerTree.setId(child.getId());
powerTree.setChildren(Arrays.asList(child));
@@ -574,7 +620,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
List<TerminalTree> exist = subInfoList.stream().filter(x -> x.getId().equals(child.getId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(exist)) {
//非电网侧
List<TerminalTree> children =new ArrayList<>();
List<TerminalTree> children = new ArrayList<>();
children.addAll(exist.get(0).getChildren().get(1).getChildren());
children.add(child);
exist.get(0).getChildren().get(1).setChildren(children);
@@ -615,7 +661,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
for (TerminalTree notSub : collect) {
//只显示变电站下有装置的
TerminalTree notSub1 = findParents(collect1, notSub);
if(CollUtil.isNotEmpty(notSub1.getChildren())){
if (CollUtil.isNotEmpty(notSub1.getChildren())) {
List<TerminalTree> valueList = new ArrayList<>();
TerminalTree sub = new TerminalTree();
@@ -638,7 +684,7 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
subInfoList.add(sub);
dw.add(sub);
}
}
}
gdList.forEach(gd -> gd.setChildren(getChildren(gd, subInfoList)));
provinceList.forEach(province -> province.setChildren(getChildren(province, gdList)));
@@ -668,28 +714,26 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
List<TerminalTree> devList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.DEVICE_LEVEL.getCode())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> subvList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.SUB_V_LEVEL.getCode())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> linepowerList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())&&item.getPowerFlag() != 1).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> lineNotPowerList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())&&item.getPowerFlag() == 1).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> linepowerList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode()) && item.getPowerFlag() != 1).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> lineNotPowerList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode()) && item.getPowerFlag() == 1).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
subvList.forEach(subv ->{
if(CollUtil.isEmpty(subv.getChildren())){
subvList.forEach(subv -> {
if (CollUtil.isEmpty(subv.getChildren())) {
subv.setChildren(getRecursionChildren(subv, linepowerList));
}
}
);
);
subvList.forEach(subv -> {
if(CollUtil.isEmpty(subv.getChildren())){
if (CollUtil.isEmpty(subv.getChildren())) {
subv.setChildren(getRecursionChildren(subv, lineNotPowerList));
}
}
);
subvList.stream().filter(x-> ObjUtil.isNull(x.getPowerFlag())).forEach(x->x.setPowerFlag(0));
subvList.stream().filter(x -> ObjUtil.isNull(x.getPowerFlag())).forEach(x -> x.setPowerFlag(0));
devList.forEach(dev -> dev.setChildren(getRecursionChildren(dev, subvList)));
devList.stream().filter(x-> ObjUtil.isNull(x.getPowerFlag())).forEach(x->x.setPowerFlag(0));
devList.stream().filter(x -> ObjUtil.isNull(x.getPowerFlag())).forEach(x -> x.setPowerFlag(0));
subList.forEach(sub -> sub.setChildren(getRecursionChildrenCs(sub, devList)));
@@ -709,36 +753,36 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
*/
public List<TerminalTree> getChildren(TerminalTree item, List<TerminalTree> all) {
List<TerminalTree> collect = all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect)){
long sortSize = collect.stream().filter(x->ObjUtil.isNotNull(x.getSort())).filter(x -> x.getSort() == 0).count();
if(collect.size()-sortSize/collect.size()>50){
collect.sort(Comparator.comparing(x->x.getName()));
if (CollUtil.isNotEmpty(collect)) {
long sortSize = collect.stream().filter(x -> ObjUtil.isNotNull(x.getSort())).filter(x -> x.getSort() == 0).count();
if (collect.size() - sortSize / collect.size() > 50) {
collect.sort(Comparator.comparing(x -> x.getName()));
}
}
return collect;
}
public List<TerminalTree> getRecursionChildrenCs(TerminalTree item, List<TerminalTree> all){
public List<TerminalTree> getRecursionChildrenCs(TerminalTree item, List<TerminalTree> all) {
List<TerminalTree> collect = all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> list=new ArrayList<>();
TerminalTree power=new TerminalTree();
List<TerminalTree> list = new ArrayList<>();
TerminalTree power = new TerminalTree();
power.setName("电网侧");
power.setSort(0);
power.setChildren(collect.stream().filter(x -> 1 != x.getPowerFlag()).collect(Collectors.toList()));
list.add(power);
TerminalTree notPower=new TerminalTree();
TerminalTree notPower = new TerminalTree();
notPower.setName("非电网侧");
notPower.setSort(1);
notPower.setChildren(collect.stream().filter(x -> 1 == x.getPowerFlag()).collect(Collectors.toList()));
list.add(notPower);
return list;
}
public List<TerminalTree> getRecursionChildren(TerminalTree item, List<TerminalTree> all){
public List<TerminalTree> getRecursionChildren(TerminalTree item, List<TerminalTree> all) {
List<TerminalTree> list = all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
if(CollUtil.isNotEmpty(list)){
if (CollUtil.isNotEmpty(list)) {
item.setPowerFlag(list.get(0).getPowerFlag());
}
return list;
@@ -746,31 +790,32 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
/**
* 变电站层级增加电网侧和非电网侧电站
*
* @param line 变电站对象
* @param all 检测对象
* @param all 检测对象
* @return
*/
public TerminalTree getRecursionChildren(List<TerminalTree> line, List<TerminalTree> all) {
List<TerminalTree> aa=new ArrayList<>();
List<TerminalTree> aa = new ArrayList<>();
for (TerminalTree lineTree : line) {
findParentsRecursive(lineTree, all,aa);
findParentsRecursive(lineTree, all, aa);
aa.add(lineTree);
}
List<TerminalTree> distinctList =new ArrayList<>(aa.stream().distinct().collect(Collectors.toList()));
List<TerminalTree> distinctList = new ArrayList<>(aa.stream().distinct().collect(Collectors.toList()));
long count = line.stream().filter(x -> !x.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())).count();
if(count>0){
if (count > 0) {
aa.addAll(all);
}
List<TerminalTree> lines = aa.stream().distinct().sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> collect = distinctList.stream().filter(x -> x.getLevel() == LineBaseEnum.SUB_LEVEL.getCode()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect)){
if (CollUtil.isNotEmpty(collect)) {
TerminalTree terminalTree = BeanUtil.copyProperties(collect.get(0), TerminalTree.class);
return findParents(lines,terminalTree);
return findParents(lines, terminalTree);
}
return null;
}
private static void findParentsRecursive(TerminalTree tree, List<TerminalTree> all,List<TerminalTree> newParents) {
private static void findParentsRecursive(TerminalTree tree, List<TerminalTree> all, List<TerminalTree> newParents) {
if (tree.getLevel() == LineBaseEnum.SUB_LEVEL.getCode()) {
return;
}
@@ -783,12 +828,12 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
}
}
private TerminalTree findParents(List<TerminalTree> all,TerminalTree subTree) {
private TerminalTree findParents(List<TerminalTree> all, TerminalTree subTree) {
List<TerminalTree> collect = all.stream().filter(allItem -> allItem.getPid().equals(subTree.getId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
collect.forEach(treeMap -> {
subTree.setChildren(collect);
findParents( all,treeMap);
findParents(all, treeMap);
});
}
return subTree;