diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java index f4be41a1..9d67daab 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java @@ -290,71 +290,71 @@ public class SimulationRunServiceImpl extends ServiceImpl curUserId.equals(member.getUserId())).toList(); - if (CollectionUtils.isEmpty(taskExecutorMemberVoList)) { - log.error("任务列表中未查询到仿真执行人为当前用户的数据"); - return ; - } - List myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList(); - currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList(); - if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) { - // 查询当前任务下算例 - Map taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy( - TaskNodePo::getUuid, - Collectors.collectingAndThen( - Collectors.toList(), - list -> list.get(0) - ) - )); - if (CollectionUtils.isNotEmpty(taskTreeRunList)) { - List eachRunNodeList; - List currentTaskAssociatedRunList = taskTreeRunList.stream().filter(run -> ObjectUtils.isNotEmpty(taskMap.get(run.getTaskId()))).toList(); - if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) { - Map> 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 myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList(); + currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList(); + if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) { + // 查询当前任务下算例 + Map taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy( + TaskNodePo::getUuid, + Collectors.collectingAndThen( + Collectors.toList(), + list -> list.get(0) + ) + )); + if (CollectionUtils.isNotEmpty(taskTreeRunList)) { + List eachRunNodeList; + List currentTaskAssociatedRunList = taskTreeRunList.stream().filter(run -> ObjectUtils.isNotEmpty(taskMap.get(run.getTaskId()))).toList(); + if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) { + Map> 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> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build()); - if (ObjectUtils.isEmpty(cidUserResp)) { - return; - } - List cidUserRespList = cidUserResp.getData(); - if (CollectionUtils.isEmpty(cidUserRespList)) { - return; - } - Map cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity())); - // 查询当前任务的负责人和执行人 - for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) { - List eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList(); - List 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 eUserList = new ArrayList<>(); - for (Long eUserId : eUserIdList) { - CIDUserResp eCidUser = cidUserMap.get(eUserId); - if (ObjectUtils.isEmpty(eCidUser)) { - continue; - } - eUserList.add(eCidUser); - } - taskNodePo.setEMemberList(eUserList); + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build()); + if (ObjectUtils.isEmpty(cidUserResp)) { + return; } + List cidUserRespList = cidUserResp.getData(); + if (CollectionUtils.isEmpty(cidUserRespList)) { + return; + } + Map cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity())); + // 查询当前任务的负责人和执行人 + for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) { + List eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList(); + List 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 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 pUserList = new ArrayList<>(); - for (Long eUserId : pUserIdList) { - CIDUserResp pCidUser = cidUserMap.get(eUserId); - if (ObjectUtils.isEmpty(pCidUser)) { - continue; + if (CollectionUtils.isNotEmpty(pUserIdList)) { + List 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 item.getChildren().stream().filter(Objects::nonNull)).toList()); + List 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 filterNodesWithTaskChildren(List 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) {