From d43e0dd661b0b4d7840eef329cd03c1d2aed5021 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Fri, 26 Jun 2026 15:29:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(ledger):=20=E5=AE=9E=E7=8E=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E5=A4=87=E6=9D=83=E9=99=90=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 集成CsCommTerminalFeignClient用于获取用户关联的设备线路 - 新增filterLedgerTree方法实现台账树的递归过滤功能 - 添加isNodeRelevant方法判断节点是否包含目标监测点 - 重构CsLedgerServiceImpl中的线路数据处理逻辑 - 在CsLedgerVO中新增lineNo字段用于监测点线路号显示 - 修复CsLinePOServiceImpl中线路号为空时的默认值处理 - 注释掉过期的线路最新数据查询接口调用 - 优化IcdServiceImpl中的线路排序逻辑并修正默认值处理 --- .../com/njcn/csdevice/pojo/vo/CsLedgerVO.java | 3 + .../controller/line/CslineController.java | 4 ++ .../impl/CsDeviceUserPOServiceImpl.java | 49 ++++++++++++-- .../service/impl/CsLedgerServiceImpl.java | 66 +++++++++++-------- .../service/impl/CsLinePOServiceImpl.java | 14 ++-- .../csdevice/service/impl/IcdServiceImpl.java | 10 ++- 6 files changed, 100 insertions(+), 46 deletions(-) diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java index 55af1a7..8172217 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsLedgerVO.java @@ -84,6 +84,9 @@ public class CsLedgerVO implements Serializable { @ApiModelProperty(name = "治理方案名称") private String governPlanName; + @ApiModelProperty(name = "监测点线路号") + private Integer lineNo; + @ApiModelProperty(name = "children",value = "子节点") private List children = new ArrayList<>(); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java index 8cd4e04..78342c0 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java @@ -30,6 +30,7 @@ import springfox.documentation.annotations.ApiIgnore; import java.util.List; import java.util.Map; +import java.util.Objects; /** * Description: @@ -148,6 +149,9 @@ public class CslineController extends BaseController { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(CsLinePO::getLineId,lineId).eq(CsLinePO::getStatus,1); CsLinePO po = csLinePOService.getOne(queryWrapper); + if (Objects.isNull(po.getLineNo())) { + po.setLineNo(po.getClDid()); + } return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDeviceUserPOServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDeviceUserPOServiceImpl.java index c685356..b39a255 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDeviceUserPOServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDeviceUserPOServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.csdevice.api.CsCommTerminalFeignClient; import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.mapper.CsDeviceUserPOMapper; import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper; @@ -31,10 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; import static java.util.Objects.isNull; @@ -61,6 +59,7 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl(); } + } else { + //根据用户获取所属的设备 + List lineIds = commTerminalService.getLineIdsByUser(RequestUtil.getUserIndex()).getData(); + if (CollectionUtil.isEmpty(lineIds)) { + return vo; + } + Set targetLineIds = new HashSet<>(lineIds); + appLedger = filterLedgerTree(appLedger, targetLineIds); } if (CollectionUtil.isNotEmpty(appLedger)) { @@ -317,6 +324,40 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl filterLedgerTree(List nodes, Set targetLineIds) { + if (CollectionUtils.isEmpty(nodes)) { + return Collections.emptyList(); + } + return nodes.stream() + .filter(node -> isNodeRelevant(node, targetLineIds)) + .peek(node -> { + // 递归过滤子节点,并重新设置过滤后的子列表 + if (CollectionUtil.isNotEmpty(node.getChildren())) { + node.setChildren(filterLedgerTree(node.getChildren(), targetLineIds)); + } + }) + .collect(Collectors.toList()); + } + + /** + * 判断当前节点或其任意子孙节点是否包含目标lineId + */ + private boolean isNodeRelevant(CsLedgerVO node, Set targetLineIds) { + // 1. 当前节点本身就是目标监测点 + if (node.getId() != null && targetLineIds.contains(node.getId())) { + return true; + } + // 2. 子孙节点中包含目标监测点 + if (CollectionUtil.isNotEmpty(node.getChildren())) { + return node.getChildren().stream() + .anyMatch(child -> isNodeRelevant(child, targetLineIds)); + } + return false; + } + /** * @Description: 判断当前用户是否是主用户 0-否1-是 * @Param: diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLedgerServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLedgerServiceImpl.java index 8b557f8..2ecf22a 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLedgerServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLedgerServiceImpl.java @@ -210,6 +210,7 @@ public class CsLedgerServiceImpl extends ServiceImpl i (v1, v2) -> v1 )); } + List finalLineList; //获取监测点数据 Integer targetLevel = LineBaseEnum.LINE_LEVEL.getCode(); List lineIds = allList.stream() @@ -217,36 +218,43 @@ public class CsLedgerServiceImpl extends ServiceImpl i .map(CsLedgerVO::getId) .filter(Objects::nonNull) .collect(Collectors.toList()); - List poList = csLinePOService.listByIds(lineIds); - Map lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1)); - List finalLineList = allList.stream() - .filter(item -> item.getLevel().equals(targetLevel)) - .sorted(Comparator.comparing(CsLedgerVO::getSort)) - .peek( - item -> { - PqGovernPlan beforePlan = beforeMap.get(item.getId()); - PqGovernPlan afterPlan = afterMap.get(item.getId()); - if (beforePlan != null) { - PqSensitiveUser user = sensitiveUserMap.get(beforePlan.getPid()); - item.setSensitiveUserId(beforePlan.getPid()); - item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName()); - item.setGovernPlanName(beforePlan.getGovernName()); + if (CollectionUtil.isNotEmpty(lineIds)) { + List poList = csLinePOService.listByIds(lineIds); + Map lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1)); + finalLineList = allList.stream() + .filter(item -> item.getLevel().equals(targetLevel)) + .peek( + item -> { + PqGovernPlan beforePlan = beforeMap.get(item.getId()); + PqGovernPlan afterPlan = afterMap.get(item.getId()); + if (beforePlan != null) { + PqSensitiveUser user = sensitiveUserMap.get(beforePlan.getPid()); + item.setSensitiveUserId(beforePlan.getPid()); + item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName()); + item.setGovernPlanName(beforePlan.getGovernName()); + } + if (afterPlan != null) { + PqSensitiveUser user = sensitiveUserMap.get(afterPlan.getPid()); + item.setSensitiveUserId(afterPlan.getPid()); + item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName()); + item.setGovernPlanName(afterPlan.getGovernName()); + } + item.setType("line"); + CsLinePO po = lineMap.get(item.getId()); + item.setConType(po.getConType()); + if (Objects.isNull(po.getClDid())) { + item.setSort(po.getLineNo()); + } else { + item.setSort(po.getClDid()); + } + item.setLineType(Objects.equals(po.getClDid(), 0) ? 0 : 1); } - if (afterPlan != null) { - PqSensitiveUser user = sensitiveUserMap.get(afterPlan.getPid()); - item.setSensitiveUserId(afterPlan.getPid()); - item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName()); - item.setGovernPlanName(afterPlan.getGovernName()); - } - item.setType("line"); - CsLinePO po = lineMap.get(item.getId()); - item.setConType(po.getConType()); - item.setSort(po.getLineNo()); - item.setLineType(Objects.equals(po.getClDid(), 0) ? 0 : 1); - } - ) - .collect(Collectors.toList()); - + ) + .sorted(Comparator.comparing(CsLedgerVO::getSort, Comparator.nullsLast(Comparator.naturalOrder()))) + .collect(Collectors.toList()); + } else { + finalLineList = allList; + } checkDevSetData(deviceList); List engineeringList1 = new ArrayList<>(); List projectList1 = new ArrayList<>(); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java index b0b0eca..f4b3526 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java @@ -398,11 +398,11 @@ public class CsLinePOServiceImpl extends ServiceImpl i sensitiveUserNameMap = pqSensitiveUserList.stream().collect(Collectors.toMap(PqSensitiveUser::getId, PqSensitiveUser::getName)); } // 最新数据时间 - List lineLatestDataList = csLineLatestDataFeignClient.listData().getData(); - Map lineLatestDataMap = new HashMap<>(); - if (CollUtil.isNotEmpty(lineLatestDataList)) { - lineLatestDataMap = lineLatestDataList.stream().collect(Collectors.toMap(CsLineLatestData::getLineId, item -> item)); - } +// List lineLatestDataList = csLineLatestDataFeignClient.listData().getData(); +// Map lineLatestDataMap = new HashMap<>(); +// if (CollUtil.isNotEmpty(lineLatestDataList)) { +// lineLatestDataMap = lineLatestDataList.stream().collect(Collectors.toMap(CsLineLatestData::getLineId, item -> item)); +// } PqSensitiveUserLineVO sensitiveUserLineVO; @@ -442,12 +442,12 @@ public class CsLinePOServiceImpl extends ServiceImpl i if (ObjectUtil.isNotNull(record.getVolGrade())) { sensitiveUserLineVO.setVolGrade(record.getVolGrade()); } - // 运行状态 + // 通讯状态 sensitiveUserLineVO.setRunStatus(String.valueOf(devDetailDTOMap.get(record.getLineId()).getRunStatus())); // 报告文件 sensitiveUserLineVO.setReportFilePath(record.getReportFilePath()); //最新数据时间 - sensitiveUserLineVO.setLatestTime(Objects.isNull(lineLatestDataMap.get(record.getLineId()))? null : lineLatestDataMap.get(record.getLineId()).getTimeId()); + //sensitiveUserLineVO.setLatestTime(Objects.isNull(lineLatestDataMap.get(record.getLineId()))? null : lineLatestDataMap.get(record.getLineId()).getTimeId()); list.add(sensitiveUserLineVO); } result.setRecords(list); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java index 23dc820..a9cdbd8 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java @@ -611,15 +611,15 @@ class IcdServiceImpl implements IcdService { item.setCt2Ratio(1.0); } if (Objects.isNull(item.getLineNo())) { - item.setLineNo(item.getClDid() == 0 ? null:item.getClDid()); + item.setLineNo(item.getClDid() == 0 ? 0:item.getClDid()); } if (Objects.isNull(item.getRunStatus())) { item.setRunStatus(csEquipmentDeliveryPOS.get(0).getRunStatus()); } }); } - list.sort(Comparator.comparingInt((CsLinePO cs) -> cs.getLineNo() == null ? Integer.MAX_VALUE : cs.getLineNo()) - .thenComparingInt(cs -> cs.getClDid() == null ? Integer.MAX_VALUE : cs.getClDid())); + list.sort(Comparator.comparingInt((CsLinePO cs) -> cs.getClDid() == null ? Integer.MAX_VALUE : cs.getClDid()) + .thenComparingInt(cs -> cs.getLineNo() == null ? Integer.MAX_VALUE : cs.getLineNo())); vo.setLineInfoList(list); } @@ -666,9 +666,7 @@ class IcdServiceImpl implements IcdService { if (item.getCt2Ratio() == null) { item.setCt2Ratio(1.0); } - if (item.getLineNo() == null && item.getClDid() != null && item.getClDid() != 0) { - item.setLineNo(item.getClDid()); - } + item.setLineNo(item.getClDid()); } } vo.setLineInfoList(line);