feat(ledger): 实现用户设备权限过滤功能并优化台账数据处理

- 集成CsCommTerminalFeignClient用于获取用户关联的设备线路
- 新增filterLedgerTree方法实现台账树的递归过滤功能
- 添加isNodeRelevant方法判断节点是否包含目标监测点
- 重构CsLedgerServiceImpl中的线路数据处理逻辑
- 在CsLedgerVO中新增lineNo字段用于监测点线路号显示
- 修复CsLinePOServiceImpl中线路号为空时的默认值处理
- 注释掉过期的线路最新数据查询接口调用
- 优化IcdServiceImpl中的线路排序逻辑并修正默认值处理
This commit is contained in:
xy
2026-06-26 15:29:24 +08:00
parent dbdf9ba000
commit d43e0dd661
6 changed files with 100 additions and 46 deletions

View File

@@ -84,6 +84,9 @@ public class CsLedgerVO implements Serializable {
@ApiModelProperty(name = "治理方案名称") @ApiModelProperty(name = "治理方案名称")
private String governPlanName; private String governPlanName;
@ApiModelProperty(name = "监测点线路号")
private Integer lineNo;
@ApiModelProperty(name = "children",value = "子节点") @ApiModelProperty(name = "children",value = "子节点")
private List<CsLedgerVO> children = new ArrayList<>(); private List<CsLedgerVO> children = new ArrayList<>();

View File

@@ -30,6 +30,7 @@ import springfox.documentation.annotations.ApiIgnore;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* Description: * Description:
@@ -148,6 +149,9 @@ public class CslineController extends BaseController {
LambdaQueryWrapper<CsLinePO> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CsLinePO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CsLinePO::getLineId,lineId).eq(CsLinePO::getStatus,1); queryWrapper.eq(CsLinePO::getLineId,lineId).eq(CsLinePO::getStatus,1);
CsLinePO po = csLinePOService.getOne(queryWrapper); CsLinePO po = csLinePOService.getOne(queryWrapper);
if (Objects.isNull(po.getLineNo())) {
po.setLineNo(po.getClDid());
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
} }

View File

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsCommTerminalFeignClient;
import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.mapper.CsDeviceUserPOMapper; import com.njcn.csdevice.mapper.CsDeviceUserPOMapper;
import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper; import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper;
@@ -31,10 +32,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.Objects.isNull; import static java.util.Objects.isNull;
@@ -61,6 +59,7 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper,
private final EventUserFeignClient eventUserFeignClient; private final EventUserFeignClient eventUserFeignClient;
private final UserFeignClient userFeignClient; private final UserFeignClient userFeignClient;
private final IMqttUserService mqttUserService; private final IMqttUserService mqttUserService;
private final CsCommTerminalFeignClient commTerminalService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -157,6 +156,14 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper,
// 如果游客没有配置任何数据权限,返回空列表 // 如果游客没有配置任何数据权限,返回空列表
appLedger = new ArrayList<>(); appLedger = new ArrayList<>();
} }
} else {
//根据用户获取所属的设备
List<String> lineIds = commTerminalService.getLineIdsByUser(RequestUtil.getUserIndex()).getData();
if (CollectionUtil.isEmpty(lineIds)) {
return vo;
}
Set<String> targetLineIds = new HashSet<>(lineIds);
appLedger = filterLedgerTree(appLedger, targetLineIds);
} }
if (CollectionUtil.isNotEmpty(appLedger)) { if (CollectionUtil.isNotEmpty(appLedger)) {
@@ -317,6 +324,40 @@ public class CsDeviceUserPOServiceImpl extends ServiceImpl<CsDeviceUserPOMapper,
return vo; return vo;
} }
/**
* 递归过滤台账树仅保留包含目标lineId的分支
*/
private List<CsLedgerVO> filterLedgerTree(List<CsLedgerVO> nodes, Set<String> 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<String> 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-是 * @Description: 判断当前用户是否是主用户 0-否1-是
* @Param: * @Param:

View File

@@ -210,6 +210,7 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
(v1, v2) -> v1 (v1, v2) -> v1
)); ));
} }
List<CsLedgerVO> finalLineList;
//获取监测点数据 //获取监测点数据
Integer targetLevel = LineBaseEnum.LINE_LEVEL.getCode(); Integer targetLevel = LineBaseEnum.LINE_LEVEL.getCode();
List<String> lineIds = allList.stream() List<String> lineIds = allList.stream()
@@ -217,11 +218,11 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
.map(CsLedgerVO::getId) .map(CsLedgerVO::getId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(lineIds)) {
List<CsLinePO> poList = csLinePOService.listByIds(lineIds); List<CsLinePO> poList = csLinePOService.listByIds(lineIds);
Map<String, CsLinePO> lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1)); Map<String, CsLinePO> lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1));
List<CsLedgerVO> finalLineList = allList.stream() finalLineList = allList.stream()
.filter(item -> item.getLevel().equals(targetLevel)) .filter(item -> item.getLevel().equals(targetLevel))
.sorted(Comparator.comparing(CsLedgerVO::getSort))
.peek( .peek(
item -> { item -> {
PqGovernPlan beforePlan = beforeMap.get(item.getId()); PqGovernPlan beforePlan = beforeMap.get(item.getId());
@@ -241,12 +242,19 @@ public class CsLedgerServiceImpl extends ServiceImpl<CsLedgerMapper, CsLedger> i
item.setType("line"); item.setType("line");
CsLinePO po = lineMap.get(item.getId()); CsLinePO po = lineMap.get(item.getId());
item.setConType(po.getConType()); item.setConType(po.getConType());
if (Objects.isNull(po.getClDid())) {
item.setSort(po.getLineNo()); item.setSort(po.getLineNo());
} else {
item.setSort(po.getClDid());
}
item.setLineType(Objects.equals(po.getClDid(), 0) ? 0 : 1); item.setLineType(Objects.equals(po.getClDid(), 0) ? 0 : 1);
} }
) )
.sorted(Comparator.comparing(CsLedgerVO::getSort, Comparator.nullsLast(Comparator.naturalOrder())))
.collect(Collectors.toList()); .collect(Collectors.toList());
} else {
finalLineList = allList;
}
checkDevSetData(deviceList); checkDevSetData(deviceList);
List<CsLedgerVO> engineeringList1 = new ArrayList<>(); List<CsLedgerVO> engineeringList1 = new ArrayList<>();
List<CsLedgerVO> projectList1 = new ArrayList<>(); List<CsLedgerVO> projectList1 = new ArrayList<>();

View File

@@ -398,11 +398,11 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
sensitiveUserNameMap = pqSensitiveUserList.stream().collect(Collectors.toMap(PqSensitiveUser::getId, PqSensitiveUser::getName)); sensitiveUserNameMap = pqSensitiveUserList.stream().collect(Collectors.toMap(PqSensitiveUser::getId, PqSensitiveUser::getName));
} }
// 最新数据时间 // 最新数据时间
List<CsLineLatestData> lineLatestDataList = csLineLatestDataFeignClient.listData().getData(); // List<CsLineLatestData> lineLatestDataList = csLineLatestDataFeignClient.listData().getData();
Map<String,CsLineLatestData> lineLatestDataMap = new HashMap<>(); // Map<String,CsLineLatestData> lineLatestDataMap = new HashMap<>();
if (CollUtil.isNotEmpty(lineLatestDataList)) { // if (CollUtil.isNotEmpty(lineLatestDataList)) {
lineLatestDataMap = lineLatestDataList.stream().collect(Collectors.toMap(CsLineLatestData::getLineId, item -> item)); // lineLatestDataMap = lineLatestDataList.stream().collect(Collectors.toMap(CsLineLatestData::getLineId, item -> item));
} // }
PqSensitiveUserLineVO sensitiveUserLineVO; PqSensitiveUserLineVO sensitiveUserLineVO;
@@ -442,12 +442,12 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
if (ObjectUtil.isNotNull(record.getVolGrade())) { if (ObjectUtil.isNotNull(record.getVolGrade())) {
sensitiveUserLineVO.setVolGrade(record.getVolGrade()); sensitiveUserLineVO.setVolGrade(record.getVolGrade());
} }
// 运行状态 // 通讯状态
sensitiveUserLineVO.setRunStatus(String.valueOf(devDetailDTOMap.get(record.getLineId()).getRunStatus())); sensitiveUserLineVO.setRunStatus(String.valueOf(devDetailDTOMap.get(record.getLineId()).getRunStatus()));
// 报告文件 // 报告文件
sensitiveUserLineVO.setReportFilePath(record.getReportFilePath()); 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); list.add(sensitiveUserLineVO);
} }
result.setRecords(list); result.setRecords(list);

View File

@@ -611,15 +611,15 @@ class IcdServiceImpl implements IcdService {
item.setCt2Ratio(1.0); item.setCt2Ratio(1.0);
} }
if (Objects.isNull(item.getLineNo())) { 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())) { if (Objects.isNull(item.getRunStatus())) {
item.setRunStatus(csEquipmentDeliveryPOS.get(0).getRunStatus()); item.setRunStatus(csEquipmentDeliveryPOS.get(0).getRunStatus());
} }
}); });
} }
list.sort(Comparator.comparingInt((CsLinePO cs) -> cs.getLineNo() == null ? Integer.MAX_VALUE : cs.getLineNo()) list.sort(Comparator.comparingInt((CsLinePO cs) -> cs.getClDid() == null ? Integer.MAX_VALUE : cs.getClDid())
.thenComparingInt(cs -> cs.getClDid() == null ? Integer.MAX_VALUE : cs.getClDid())); .thenComparingInt(cs -> cs.getLineNo() == null ? Integer.MAX_VALUE : cs.getLineNo()));
vo.setLineInfoList(list); vo.setLineInfoList(list);
} }
@@ -666,11 +666,9 @@ class IcdServiceImpl implements IcdService {
if (item.getCt2Ratio() == null) { if (item.getCt2Ratio() == null) {
item.setCt2Ratio(1.0); 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); vo.setLineInfoList(line);
} }