fix[project]: 仿真执行只显示有任务的节点
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user