fix[project]: 仿真执行只显示有任务的节点

This commit is contained in:
2026-03-22 10:34:41 +08:00
parent f85c462eef
commit cac0def5ec

View File

@@ -290,71 +290,71 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (CollectionUtils.isNotEmpty(taskExecutorMemberVoList)) {
// 根据仿真执行人过滤任务
taskExecutorMemberVoList = taskExecutorMemberVoList.stream().filter(member -> curUserId.equals(member.getUserId())).toList();
if (CollectionUtils.isEmpty(taskExecutorMemberVoList)) {
log.error("任务列表中未查询到仿真执行人为当前用户的数据");
return ;
}
List<String> myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList();
currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
// 查询当前任务下算例
Map<String, TaskNodePo> taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy(
TaskNodePo::getUuid,
Collectors.collectingAndThen(
Collectors.toList(),
list -> list.get(0)
)
));
if (CollectionUtils.isNotEmpty(taskTreeRunList)) {
List<RunNodePo> eachRunNodeList;
List<RunNodePo> currentTaskAssociatedRunList = taskTreeRunList.stream().filter(run -> ObjectUtils.isNotEmpty(taskMap.get(run.getTaskId()))).toList();
if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) {
Map<String, List<RunNodePo>> runMap = currentTaskAssociatedRunList.stream().collect(Collectors.groupingBy(RunNodePo::getTaskId));
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
eachRunNodeList = runMap.get(taskNodePo.getUuid());
if (CollectionUtils.isNotEmpty(eachRunNodeList)) {
taskNodePo.getChildren().addAll(eachRunNodeList);
if (CollectionUtils.isNotEmpty(taskExecutorMemberVoList)) {
List<String> myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList();
currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
// 查询当前任务下算例
Map<String, TaskNodePo> taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy(
TaskNodePo::getUuid,
Collectors.collectingAndThen(
Collectors.toList(),
list -> list.get(0)
)
));
if (CollectionUtils.isNotEmpty(taskTreeRunList)) {
List<RunNodePo> eachRunNodeList;
List<RunNodePo> currentTaskAssociatedRunList = taskTreeRunList.stream().filter(run -> ObjectUtils.isNotEmpty(taskMap.get(run.getTaskId()))).toList();
if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) {
Map<String, List<RunNodePo>> runMap = currentTaskAssociatedRunList.stream().collect(Collectors.groupingBy(RunNodePo::getTaskId));
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
eachRunNodeList = runMap.get(taskNodePo.getUuid());
if (CollectionUtils.isNotEmpty(eachRunNodeList)) {
taskNodePo.getChildren().addAll(eachRunNodeList);
}
}
}
}
}
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build());
if (ObjectUtils.isEmpty(cidUserResp)) {
return;
}
List<CIDUserResp> cidUserRespList = cidUserResp.getData();
if (CollectionUtils.isEmpty(cidUserRespList)) {
return;
}
Map<Long, CIDUserResp> cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity()));
// 查询当前任务的负责人和执行人
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
List<Long> eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
List<Long> pUserIdList = memberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(eUserIdList)) {
List<CIDUserResp> eUserList = new ArrayList<>();
for (Long eUserId : eUserIdList) {
CIDUserResp eCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(eCidUser)) {
continue;
}
eUserList.add(eCidUser);
}
taskNodePo.setEMemberList(eUserList);
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build());
if (ObjectUtils.isEmpty(cidUserResp)) {
return;
}
List<CIDUserResp> cidUserRespList = cidUserResp.getData();
if (CollectionUtils.isEmpty(cidUserRespList)) {
return;
}
Map<Long, CIDUserResp> cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity()));
// 查询当前任务的负责人和执行人
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
List<Long> eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
List<Long> pUserIdList = memberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(eUserIdList)) {
List<CIDUserResp> eUserList = new ArrayList<>();
for (Long eUserId : eUserIdList) {
CIDUserResp eCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(eCidUser)) {
continue;
}
eUserList.add(eCidUser);
}
taskNodePo.setEMemberList(eUserList);
}
if (CollectionUtils.isNotEmpty(pUserIdList)) {
List<CIDUserResp> pUserList = new ArrayList<>();
for (Long eUserId : pUserIdList) {
CIDUserResp pCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(pCidUser)) {
continue;
if (CollectionUtils.isNotEmpty(pUserIdList)) {
List<CIDUserResp> pUserList = new ArrayList<>();
for (Long eUserId : pUserIdList) {
CIDUserResp pCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(pCidUser)) {
continue;
}
pUserList.add(pCidUser);
}
pUserList.add(pCidUser);
taskNodePo.setPMemberList(pUserList);
}
taskNodePo.setPMemberList(pUserList);
}
}
}else {
currentNodeAssociatedTaskList = new ArrayList<>();
}
}else {
currentNodeAssociatedTaskList = new ArrayList<>();
@@ -623,7 +623,51 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
sortWorkspaceNode(projectNodePo);
}
}
return SdmResponse.success(realTopProjectNodeList.stream().flatMap(item -> item.getChildren().stream().filter(Objects::nonNull)).toList());
List<NodeAllBase> nodeAllBaseList = realTopProjectNodeList.stream().flatMap(item -> item.getChildren().stream().filter(Objects::nonNull)).collect(Collectors.toList());
return SdmResponse.success(filterNodesWithTaskChildren(nodeAllBaseList));
}
/**
* 过滤节点列表仅保留任意层级children包含nodeType=task的节点
* @param nodeList 原始节点列表
* @return 过滤后的节点列表
*/
public static List<NodeAllBase> filterNodesWithTaskChildren(List<NodeAllBase> nodeList) {
if (nodeList == null || nodeList.isEmpty()) {
return new ArrayList<>();
}
// 仅保留包含task子节点的节点
return nodeList.stream()
.filter(SimulationRunServiceImpl::hasTaskNodeInChildren)
.collect(Collectors.toList());
}
/**
* 递归判断当前节点的任意层级children中是否存在nodeType=task的节点
* @param node 待判断的节点
* @return true=存在false=不存在
*/
private static boolean hasTaskNodeInChildren(NodeAllBase node) {
// 边界条件:节点为空 或 子节点为空 → 直接返回false
if (node == null || node.getChildren() == null || node.getChildren().isEmpty()) {
return false;
}
// 遍历当前节点的直接子节点
for (NodeAllBase child : node.getChildren()) {
// 1. 当前子节点的type是task → 直接返回true
if ("task".equals(child.getNodeType())) {
return true;
}
// 2. 递归检查当前子节点的子节点 → 如果存在task返回true
if (hasTaskNodeInChildren(child)) {
return true;
}
}
// 所有层级都没有task节点 → 返回false
return false;
}
private void sortWorkspaceNode(ProjectNodePo projectNodePo) {