feat(ledger): 实现用户设备权限过滤功能并优化台账数据处理
- 集成CsCommTerminalFeignClient用于获取用户关联的设备线路 - 新增filterLedgerTree方法实现台账树的递归过滤功能 - 添加isNodeRelevant方法判断节点是否包含目标监测点 - 重构CsLedgerServiceImpl中的线路数据处理逻辑 - 在CsLedgerVO中新增lineNo字段用于监测点线路号显示 - 修复CsLinePOServiceImpl中线路号为空时的默认值处理 - 注释掉过期的线路最新数据查询接口调用 - 优化IcdServiceImpl中的线路排序逻辑并修正默认值处理
This commit is contained in:
@@ -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<>();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,36 +218,43 @@ 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());
|
||||||
List<CsLinePO> poList = csLinePOService.listByIds(lineIds);
|
if (CollectionUtil.isNotEmpty(lineIds)) {
|
||||||
Map<String, CsLinePO> lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1));
|
List<CsLinePO> poList = csLinePOService.listByIds(lineIds);
|
||||||
List<CsLedgerVO> finalLineList = allList.stream()
|
Map<String, CsLinePO> lineMap = poList.stream().collect(Collectors.toMap(CsLinePO::getLineId,Function.identity(),(v1, v2) -> v1));
|
||||||
.filter(item -> item.getLevel().equals(targetLevel))
|
finalLineList = allList.stream()
|
||||||
.sorted(Comparator.comparing(CsLedgerVO::getSort))
|
.filter(item -> item.getLevel().equals(targetLevel))
|
||||||
.peek(
|
.peek(
|
||||||
item -> {
|
item -> {
|
||||||
PqGovernPlan beforePlan = beforeMap.get(item.getId());
|
PqGovernPlan beforePlan = beforeMap.get(item.getId());
|
||||||
PqGovernPlan afterPlan = afterMap.get(item.getId());
|
PqGovernPlan afterPlan = afterMap.get(item.getId());
|
||||||
if (beforePlan != null) {
|
if (beforePlan != null) {
|
||||||
PqSensitiveUser user = sensitiveUserMap.get(beforePlan.getPid());
|
PqSensitiveUser user = sensitiveUserMap.get(beforePlan.getPid());
|
||||||
item.setSensitiveUserId(beforePlan.getPid());
|
item.setSensitiveUserId(beforePlan.getPid());
|
||||||
item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName());
|
item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName());
|
||||||
item.setGovernPlanName(beforePlan.getGovernName());
|
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());
|
.sorted(Comparator.comparing(CsLedgerVO::getSort, Comparator.nullsLast(Comparator.naturalOrder())))
|
||||||
item.setSensitiveUserId(afterPlan.getPid());
|
.collect(Collectors.toList());
|
||||||
item.setSensitiveUserName(Objects.isNull(user) ? null : user.getName());
|
} else {
|
||||||
item.setGovernPlanName(afterPlan.getGovernName());
|
finalLineList = allList;
|
||||||
}
|
}
|
||||||
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());
|
|
||||||
|
|
||||||
checkDevSetData(deviceList);
|
checkDevSetData(deviceList);
|
||||||
List<CsLedgerVO> engineeringList1 = new ArrayList<>();
|
List<CsLedgerVO> engineeringList1 = new ArrayList<>();
|
||||||
List<CsLedgerVO> projectList1 = new ArrayList<>();
|
List<CsLedgerVO> projectList1 = new ArrayList<>();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,9 +666,7 @@ 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user