fix[project]: 仿真执行只显示有任务的节点
This commit is contained in:
@@ -290,71 +290,71 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
|||||||
if (CollectionUtils.isNotEmpty(taskExecutorMemberVoList)) {
|
if (CollectionUtils.isNotEmpty(taskExecutorMemberVoList)) {
|
||||||
// 根据仿真执行人过滤任务
|
// 根据仿真执行人过滤任务
|
||||||
taskExecutorMemberVoList = taskExecutorMemberVoList.stream().filter(member -> curUserId.equals(member.getUserId())).toList();
|
taskExecutorMemberVoList = taskExecutorMemberVoList.stream().filter(member -> curUserId.equals(member.getUserId())).toList();
|
||||||
if (CollectionUtils.isEmpty(taskExecutorMemberVoList)) {
|
if (CollectionUtils.isNotEmpty(taskExecutorMemberVoList)) {
|
||||||
log.error("任务列表中未查询到仿真执行人为当前用户的数据");
|
List<String> myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList();
|
||||||
return ;
|
currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
|
||||||
}
|
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
|
||||||
List<String> myTaskIdList = taskExecutorMemberVoList.stream().map(SimulationTaskMember::getTaskId).toList();
|
// 查询当前任务下算例
|
||||||
currentNodeAssociatedTaskList = currentNodeAssociatedTaskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
|
Map<String, TaskNodePo> taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy(
|
||||||
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
|
TaskNodePo::getUuid,
|
||||||
// 查询当前任务下算例
|
Collectors.collectingAndThen(
|
||||||
Map<String, TaskNodePo> taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy(
|
Collectors.toList(),
|
||||||
TaskNodePo::getUuid,
|
list -> list.get(0)
|
||||||
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(taskTreeRunList)) {
|
if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) {
|
||||||
List<RunNodePo> eachRunNodeList;
|
Map<String, List<RunNodePo>> runMap = currentTaskAssociatedRunList.stream().collect(Collectors.groupingBy(RunNodePo::getTaskId));
|
||||||
List<RunNodePo> currentTaskAssociatedRunList = taskTreeRunList.stream().filter(run -> ObjectUtils.isNotEmpty(taskMap.get(run.getTaskId()))).toList();
|
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
|
||||||
if (CollectionUtils.isNotEmpty(currentTaskAssociatedRunList)) {
|
eachRunNodeList = runMap.get(taskNodePo.getUuid());
|
||||||
Map<String, List<RunNodePo>> runMap = currentTaskAssociatedRunList.stream().collect(Collectors.groupingBy(RunNodePo::getTaskId));
|
if (CollectionUtils.isNotEmpty(eachRunNodeList)) {
|
||||||
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
|
taskNodePo.getChildren().addAll(eachRunNodeList);
|
||||||
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());
|
||||||
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build());
|
if (ObjectUtils.isEmpty(cidUserResp)) {
|
||||||
if (ObjectUtils.isEmpty(cidUserResp)) {
|
return;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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)) {
|
if (CollectionUtils.isNotEmpty(pUserIdList)) {
|
||||||
List<CIDUserResp> pUserList = new ArrayList<>();
|
List<CIDUserResp> pUserList = new ArrayList<>();
|
||||||
for (Long eUserId : pUserIdList) {
|
for (Long eUserId : pUserIdList) {
|
||||||
CIDUserResp pCidUser = cidUserMap.get(eUserId);
|
CIDUserResp pCidUser = cidUserMap.get(eUserId);
|
||||||
if (ObjectUtils.isEmpty(pCidUser)) {
|
if (ObjectUtils.isEmpty(pCidUser)) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
pUserList.add(pCidUser);
|
||||||
}
|
}
|
||||||
pUserList.add(pCidUser);
|
taskNodePo.setPMemberList(pUserList);
|
||||||
}
|
}
|
||||||
taskNodePo.setPMemberList(pUserList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
currentNodeAssociatedTaskList = new ArrayList<>();
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
currentNodeAssociatedTaskList = new ArrayList<>();
|
currentNodeAssociatedTaskList = new ArrayList<>();
|
||||||
@@ -623,7 +623,51 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
|||||||
sortWorkspaceNode(projectNodePo);
|
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) {
|
private void sortWorkspaceNode(ProjectNodePo projectNodePo) {
|
||||||
|
|||||||
Reference in New Issue
Block a user