diff --git a/1-sql/2026-04-15/sys_dept_user.sql b/1-sql/2026-04-15/sys_dept_user.sql new file mode 100644 index 00000000..36fb4b9a --- /dev/null +++ b/1-sql/2026-04-15/sys_dept_user.sql @@ -0,0 +1 @@ +ALTER TABLE spdm_baseline.sys_dept_user ADD simulationType varchar(255) NULL COMMENT '仿真类型'; diff --git a/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java b/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java index 2a5044b0..f65ccdb1 100644 --- a/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java +++ b/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java @@ -25,6 +25,9 @@ public class SysDeptUserResp { @Schema(description = "阶段") private String stage; + @Schema(description = "仿真类型") + private String simulationType; + @Schema(description = "部门负责人用户ID") @JsonFormat(shape = JsonFormat.Shape.STRING) private Long userId; diff --git a/project/src/main/java/com/sdm/project/common/NodeMemberTypeEnum.java b/project/src/main/java/com/sdm/project/common/NodeMemberTypeEnum.java index 12d29884..d5188c18 100644 --- a/project/src/main/java/com/sdm/project/common/NodeMemberTypeEnum.java +++ b/project/src/main/java/com/sdm/project/common/NodeMemberTypeEnum.java @@ -8,7 +8,8 @@ public enum NodeMemberTypeEnum { MANAGER("项目经理", 0), ATTENTION("项目关注人", 1), - PINNED("项目置顶人", 2); + PINNED("项目置顶人", 2), + PARTICIPANT("项目参与人", 3); private final String name; diff --git a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java index 4459bdb9..a2aa8793 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java @@ -118,10 +118,10 @@ public interface SimulationNodeMapper extends BaseMapper { List getNodeListByUserId(@Param("nodeType") String nodeType, @Param("nodeSubType") String nodeSubType, @Param("exeStatus") String exeStatus, @Param("nodeCode") String nodeCode, - @Param("manager") String manager, @Param("nodeName") String nodeName, @Param("tenantId") Long tenantId, @Param("pos") int pos, @Param("limit") int limit, @Param("userId") Long userId,@Param("type") Integer type); + @Param("manager") String manager, @Param("nodeName") String nodeName, @Param("tenantId") Long tenantId, @Param("pos") int pos, @Param("limit") int limit, @Param("userId") Long userId,@Param("type") Integer type,@Param("projectIdList") List projectIdList); int getNodeListCountByUserId(@Param("nodeType") String nodeType, @Param("nodeSubType") String nodeSubType, @Param("exeStatus") String exeStatus, @Param("nodeCode") String nodeCode, - @Param("manager") String manager, @Param("nodeName") String nodeName, @Param("tenantId") Long tenantId, @Param("userId") Long userId,@Param("type") Integer type); + @Param("manager") String manager, @Param("nodeName") String nodeName, @Param("tenantId") Long tenantId, @Param("userId") Long userId,@Param("type") Integer type,@Param("projectIdList") List projectIdList); List getNodeMemberListByMemberType(@Param("nodeIdList") List nodeIdList,@Param("userId") Long userId,@Param("memberType") Integer memberType); diff --git a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java index 3f13e78c..52f52c84 100644 --- a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java @@ -42,8 +42,13 @@ import com.sdm.common.utils.DateUtils; import com.sdm.common.utils.RandomUtil; import com.sdm.common.utils.SystemOperate; import com.sdm.common.utils.excel.ExcelUtil; -import com.sdm.outbridge.entity.*; +import com.sdm.outbridge.entity.LyricVAttachmentConfigToDM; +import com.sdm.outbridge.entity.LyricVProjectStationToDM; +import com.sdm.outbridge.entity.LyricVProjectToDM; +import com.sdm.outbridge.entity.LyricVTodoEmulationInfoDM; import com.sdm.outbridge.service.lyric.*; +import com.sdm.project.YA.req.SyncCidProjectReq; +import com.sdm.project.YA.resp.BosimSaveProjectTaskRsp; import com.sdm.project.bo.ExportOperate; import com.sdm.project.common.MemberTypeEnum; import com.sdm.project.common.NodeMemberTypeEnum; @@ -58,8 +63,6 @@ import com.sdm.project.model.entity.*; import com.sdm.project.model.po.PerformanceNodePo; import com.sdm.project.model.po.ProjectNodePo; import com.sdm.project.model.req.*; -import com.sdm.project.YA.req.SyncCidProjectReq; -import com.sdm.project.YA.resp.BosimSaveProjectTaskRsp; import com.sdm.project.model.vo.*; import com.sdm.project.service.*; import jakarta.servlet.http.HttpServletResponse; @@ -92,7 +95,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import static com.sdm.project.service.impl.LyricInternalServiceImpl.splitAndDistinct; +import static com.sdm.project.service.impl.LyricInternalServiceImpl.*; import static java.util.Collections.emptyList; @Slf4j @@ -290,7 +293,130 @@ public class NodeServiceImpl extends ServiceImpl nodeExtraReqList = new ArrayList<>(); + List lyricVProjectToDMList = lyricVProjectToDmService.lambdaQuery().in(LyricVProjectToDM::getProjectNum, Collections.singletonList(projectNode.getNodeCode())).list(); + if (CollectionUtils.isNotEmpty(lyricVProjectToDMList)) { + LyricVProjectToDM lyricVProjectToDM = lyricVProjectToDMList.get(0); + // 项目领域 + String domain = lyricVProjectToDM.getDomain(); + if (StringUtils.isNotBlank(domain)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(DOMAIN); + spdmNodeExtraReq.setPropertyValue(domain); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 客户名称 + String clientName = lyricVProjectToDM.getClientName(); + if (StringUtils.isNotBlank(clientName)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(CLIENT_NAME); + spdmNodeExtraReq.setPropertyValue(clientName); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 难度类型 + String difficultyType = lyricVProjectToDM.getDifficultyType(); + if (StringUtils.isNotBlank(difficultyType)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(DIFFICULT_TYPE); + spdmNodeExtraReq.setPropertyValue(difficultyType); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 方案管理人 + String programManager = lyricVProjectToDM.getProgramManager(); + if (StringUtils.isNotBlank(programManager)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(PROGRAM_MANAGER); + spdmNodeExtraReq.setPropertyValue(programManager); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 产品组 + String processSection = lyricVProjectToDM.getProcessSection(); + if (StringUtils.isNotBlank(processSection)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(PROCESS_SECTION); + spdmNodeExtraReq.setPropertyValue(processSection); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 产品线 + String produceLine = lyricVProjectToDM.getProduceLine(); + if (StringUtils.isNotBlank(produceLine)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(PRODUCE_LINE); + spdmNodeExtraReq.setPropertyValue(produceLine); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 方案制作部门 + String programTeam = lyricVProjectToDM.getProgramTeam(); + if (StringUtils.isNotBlank(domain)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(PROGRAM_TEAM); + spdmNodeExtraReq.setPropertyValue(programTeam); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 参考项目 + String referenceItem = lyricVProjectToDM.getReferenceItem(); + if (StringUtils.isNotBlank(domain)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(REFERENCE_ITEM); + spdmNodeExtraReq.setPropertyValue(referenceItem); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 项目承接主体 + String projectUndertaker = lyricVProjectToDM.getProjectUndertaker(); + if (StringUtils.isNotBlank(projectUndertaker)) { + SpdmNodeExtraReq spdmNodeExtraReq = new SpdmNodeExtraReq(); + spdmNodeExtraReq.setNodeId(projectNode.getUuid()); + spdmNodeExtraReq.setPropertyName(PROJECT_UNDERTAKER); + spdmNodeExtraReq.setPropertyValue(projectUndertaker); + spdmNodeExtraReq.setCreator(jobNumber); + spdmNodeExtraReq.setCreateTime(curDateStr); + nodeExtraReqList.add(spdmNodeExtraReq); + } + + // 保存项目拓展信息 + if (CollectionUtils.isNotEmpty(nodeExtraReqList)) { + nodeMapper.addNodeExtraBatch(nodeExtraReqList); + } + } + } + } else { // 这里要兼容单独只创建阶段的逻辑,需要反查出项目经理并设置权限 List phaseNodeList = addNodeList.stream().filter(node -> NodeTypeEnum.PHASE.getValue().equals(node.getNodeType())).toList(); if (CollectionUtils.isNotEmpty(phaseNodeList)) { @@ -427,7 +553,7 @@ public class NodeServiceImpl extends ServiceImpl taskNodePoList; if (NodeTypeEnum.PROJECT.getValue().equals(node.getNodeType())) { - taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag1,nodeId).list(); - }else { - taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag2,nodeId).list(); + taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag1, nodeId).list(); + } else { + taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag2, nodeId).list(); } if (CollectionUtils.isNotEmpty(taskNodePoList)) { List taskIdList = taskNodePoList.stream().map(SimulationTask::getUuid).toList(); - taskService.lambdaUpdate().in(SimulationTask::getUuid,taskIdList).remove(); + taskService.lambdaUpdate().in(SimulationTask::getUuid, taskIdList).remove(); nodeMapper.deleteTaskExtraBatch(taskIdList); nodeMapper.deleteTaskMemberBatch(taskIdList); // 删除当前节点及子节点下的指标相关信息 @@ -472,22 +598,22 @@ public class NodeServiceImpl extends ServiceImpl demandList = demandMapper.getDemandListByProjectId(nodeId); if (CollectionUtils.isEmpty(demandList)) { - log.info("项目:{}下未查询到关联的需求",node.getNodeName()); + log.info("项目:{}下未查询到关联的需求", node.getNodeName()); return true; } - log.info("共查询到项目:{}下的{}条需求",node.getNodeName(),demandList.size()); + log.info("共查询到项目:{}下的{}条需求", node.getNodeName(), demandList.size()); List demandIdList = demandList.stream().map(SpdmDemandVo::getUuid).toList(); demandMapper.deleteDemand(demandIdList); demandMapper.deleteDemandMember(demandIdList); demandMapper.deleteDemandExtra(demandIdList); - }catch (Exception ex) { - log.error("删除项目下关联的需求时发生异常:{}",ex.getMessage()); + } catch (Exception ex) { + log.error("删除项目下关联的需求时发生异常:{}", ex.getMessage()); return false; } return true; @@ -538,12 +664,37 @@ public class NodeServiceImpl extends ServiceImpl projectIdList = Optional.ofNullable( + simulationTaskMemberService.lambdaQuery() + .eq(SimulationTaskMember::getUserId, userId) + .list() + ) + .filter(CollectionUtils::isNotEmpty) + .stream() + .flatMap(List::stream) + .map(SimulationTaskMember::getTaskId) + .distinct() + .filter(StringUtils::isNotBlank) // 防止taskId为空 + .toList() + .stream() + .filter(StringUtils::isNotBlank) + .map(taskIds -> taskService.lambdaQuery() + .in(SimulationTask::getUuid, taskIds) + .list() + ) + .filter(CollectionUtils::isNotEmpty) + .flatMap(List::stream) + .map(SimulationTask::getTag1) + .filter(StringUtils::isNotBlank) + .distinct() + .toList(); nodeList = nodeMapper.getNodeListByUserId(req.getNodeType(), req.getNodeSubType(), req.getExeStatus(), req.getNodeCode(), req.getManager(), req.getNodeName(), - tenantId, pos, limit,userId,type); + tenantId, pos, limit, userId, type, projectIdList); // 设置关注标签 if (CollectionUtils.isNotEmpty(nodeList)) { List nodeIdList = nodeList.stream().map(SpdmNodeVo::getUuid).toList(); - List nodeMemberList = nodeMapper.getNodeMemberListByMemberType(nodeIdList,userId, NodeMemberTypeEnum.ATTENTION.getCode()); + List nodeMemberList = nodeMapper.getNodeMemberListByMemberType(nodeIdList, userId, NodeMemberTypeEnum.ATTENTION.getCode()); if (CollectionUtils.isNotEmpty(nodeMemberList)) { List attentNodeIdList = nodeMemberList.stream().map(SpdmNodeMemberVo::getNodeId).toList(); for (SpdmNodeVo spdmNodeVo : nodeList) { @@ -554,19 +705,19 @@ public class NodeServiceImpl extends ServiceImpl node.setAttentionFlag(1)); - total = nodeMapper.getNodeListCountByUserId(req.getNodeType(), req.getNodeSubType(), req.getExeStatus(), req.getNodeCode(), req.getManager(), req.getNodeName(), tenantId,userId,type); - }else { + total = nodeMapper.getNodeListCountByUserId(req.getNodeType(), req.getNodeSubType(), req.getExeStatus(), req.getNodeCode(), req.getManager(), req.getNodeName(), tenantId, userId, type, Collections.emptyList()); + } else { nodeList = nodeMapper.getNodeListByUserId(req.getNodeType(), req.getNodeSubType(), req.getExeStatus(), req.getNodeCode(), req.getManager(), req.getNodeName(), - tenantId, pos, limit,userId,type); + tenantId, pos, limit, userId, type, Collections.emptyList()); // 设置关注标签 if (CollectionUtils.isNotEmpty(nodeList)) { List nodeIdList = nodeList.stream().map(SpdmNodeVo::getUuid).toList(); - List nodeMemberList = nodeMapper.getNodeMemberListByMemberType(nodeIdList,userId, NodeMemberTypeEnum.ATTENTION.getCode()); + List nodeMemberList = nodeMapper.getNodeMemberListByMemberType(nodeIdList, userId, NodeMemberTypeEnum.ATTENTION.getCode()); if (CollectionUtils.isNotEmpty(nodeMemberList)) { List attentNodeIdList = nodeMemberList.stream().map(SpdmNodeMemberVo::getNodeId).toList(); for (SpdmNodeVo spdmNodeVo : nodeList) { @@ -577,7 +728,7 @@ public class NodeServiceImpl extends ServiceImpl nodeList) { @@ -794,6 +946,7 @@ public class NodeServiceImpl extends ServiceImpl nodeList, List filterDiscipline) { @@ -867,6 +1020,7 @@ public class NodeServiceImpl extends ServiceImpl dmProjectNodeList) { @@ -911,8 +1065,9 @@ public class NodeServiceImpl extends ServiceImpl nodeList) { @@ -977,18 +1134,48 @@ public class NodeServiceImpl extends ServiceImpl currentPhaseNodeList = sortedPhaseNodeList.stream() .filter(phaseNode -> isCurrentTimeInRange(phaseNode, currentTime, sdf)) - .findFirst() - .orElse(null); + .toList(); + SpdmNodeVo projectNode = nodeList.stream() + .filter(node -> projectNodeId.equals(node.getUuid())).findFirst().orElse(null); + if (projectNode != null) { + // 找到当前阶段,回写至对应的SpdmNodeVo + if (CollectionUtils.isNotEmpty(currentPhaseNodeList)) { + // 开始时间比当前时间小的里面的最大的一个 + List bigPhaseNodeList = currentPhaseNodeList.stream().filter(phaseNode -> { + try { + return currentTime <= sdf.parse(phaseNode.getBeginTime()).getTime(); + } catch (ParseException e) { + throw new RuntimeException(e); + } + }).toList(); + if (CollectionUtils.isEmpty(bigPhaseNodeList)) { + SimulationNode simulationNode = currentPhaseNodeList.stream().max(Comparator.comparingLong(phaseNode -> { + try { + return sdf.parse(phaseNode.getBeginTime()).getTime(); + } catch (ParseException e) { + throw new RuntimeException(e); + } + })).get(); + projectNode.setCurrentPhase(simulationNode.getNodeName()); + } else { + SimulationNode simulationNode = phaseNodeList.stream().min(Comparator.comparingLong(phaseNode -> { + try { + return sdf.parse(phaseNode.getBeginTime()).getTime(); + } catch (ParseException e) { + throw new RuntimeException(e); + } + })).get(); + projectNode.setCurrentPhase(simulationNode.getNodeName()); + } - // 找到当前阶段,回写至对应的SpdmNodeVo - if (Objects.nonNull(currentPhaseNode)) { - nodeList.stream() - .filter(node -> projectNodeId.equals(node.getUuid())) - .findFirst() - .ifPresent(node -> node.setCurrentPhase(currentPhaseNode.getNodeName())); + } else { + // 如果没有落在【开始时间, 结束时间】内的阶段节点,就选beginTime最大的阶段作为当前阶段 + projectNode.setCurrentPhase(sortedPhaseNodeList.get(sortedPhaseNodeList.size() - 1).getNodeName()); + } } + }); } @@ -1143,7 +1330,7 @@ public class NodeServiceImpl extends ServiceImpl pid.equals(node.getUuid())).findFirst().orElse(null); if (ObjectUtils.isNotEmpty(spdmProjectNodeEditReq)) { @@ -1241,10 +1428,21 @@ public class NodeServiceImpl extends ServiceImpl getAddPhaseNodeList() { return addPhaseNodeList; } - public List getAddMachineNodeList() { return addMachineNodeList; } - public List getAddWorkspaceNodeList() { return addWorkspaceNodeList; } + public SpdmProjectNodeEditReq getProjectNode() { + return projectNode; + } + + public List getAddPhaseNodeList() { + return addPhaseNodeList; + } + + public List getAddMachineNodeList() { + return addMachineNodeList; + } + + public List getAddWorkspaceNodeList() { + return addWorkspaceNodeList; + } } /** @@ -1257,7 +1455,7 @@ public class NodeServiceImpl extends ServiceImpl phaseNodes = filterResult.getAddPhaseNodeList(); BatchCreateDirItem projectCreateDirItem = new BatchCreateDirItem(); TagReq tagReq = new TagReq(); - BeanUtils.copyProperties(projectNode,tagReq); + BeanUtils.copyProperties(projectNode, tagReq); DirNodeInfo projectDirNodeInfo = buildDirNodeInfo( projectNode.getUuid(), null, - NodeTypeEnum.PROJECT.getValue(), projectNode.getNodeName(),tagReq + NodeTypeEnum.PROJECT.getValue(), projectNode.getNodeName(), tagReq ); projectCreateDirItem.setParentDirNodeInfo(projectDirNodeInfo); // 构建项目下的阶段子节点 @@ -1328,10 +1526,10 @@ public class NodeServiceImpl extends ServiceImpl machineNodes) { BatchCreateDirItem phaseCreateDirItem = new BatchCreateDirItem(); TagReq tagReq = new TagReq(); - BeanUtils.copyProperties(phaseNode,tagReq); + BeanUtils.copyProperties(phaseNode, tagReq); DirNodeInfo phaseDirNodeInfo = buildDirNodeInfo( phaseNode.getUuid(), projectUuid, - NodeTypeEnum.PHASE.getValue(), phaseNode.getNodeName(),tagReq + NodeTypeEnum.PHASE.getValue(), phaseNode.getNodeName(), tagReq ); phaseCreateDirItem.setParentDirNodeInfo(phaseDirNodeInfo); // 若无机台节点,子节点为空 @@ -1378,10 +1576,10 @@ public class NodeServiceImpl extends ServiceImpl workspaceNodes) { BatchCreateDirItem machineCreateDirItem = new BatchCreateDirItem(); TagReq tagReq = new TagReq(); - BeanUtils.copyProperties(machineNode,tagReq); + BeanUtils.copyProperties(machineNode, tagReq); DirNodeInfo machineDirNodeInfo = buildDirNodeInfo( machineNode.getUuid(), phaseUuid, - NodeTypeEnum.MACHINE.getValue(), machineNode.getNodeName(),tagReq + NodeTypeEnum.MACHINE.getValue(), machineNode.getNodeName(), tagReq ); machineCreateDirItem.setParentDirNodeInfo(machineDirNodeInfo); @@ -1409,10 +1607,10 @@ public class NodeServiceImpl extends ServiceImpl()); @@ -1423,7 +1621,7 @@ public class NodeServiceImpl extends ServiceImpl dirNodeInfoList = new ArrayList<>(); for (SpdmProjectNodeEditReq node : nodeList) { TagReq tagReq = new TagReq(); - BeanUtils.copyProperties(node,tagReq); - dirNodeInfoList.add(buildDirNodeInfo(node.getUuid(), parentUuid, nodeType, node.getNodeName(),tagReq)); + BeanUtils.copyProperties(node, tagReq); + dirNodeInfoList.add(buildDirNodeInfo(node.getUuid(), parentUuid, nodeType, node.getNodeName(), tagReq)); } return dirNodeInfoList; } @@ -1484,6 +1682,7 @@ public class NodeServiceImpl extends ServiceImpl addNodeList) { @@ -1523,7 +1722,7 @@ public class NodeServiceImpl extends ServiceImpl userPermissions = new HashMap<>(); userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); updatePermissionReq.setUserPermissions(userPermissions); - log.info("新增项目阶段时,更新用户权限的参数为:{}",updatePermissionReq); + log.info("新增项目阶段时,更新用户权限的参数为:{}", updatePermissionReq); SdmResponse updatePermissionResponse = dataClientFeignClient.updatePermission(updatePermissionReq); - log.info("新增项目阶段时,更新用户权限的返回值为:{}",updatePermissionResponse); + log.info("新增项目阶段时,更新用户权限的返回值为:{}", updatePermissionResponse); } /** @@ -1602,7 +1801,7 @@ public class NodeServiceImpl extends ServiceImpl workspaceNode.getNodeCode().contains("-M")).findFirst().orElse(null); - log.info("specialWorkspaceNode为:{}",specialWorkspaceNode); + log.info("specialWorkspaceNode为:{}", specialWorkspaceNode); if (specialWorkspaceNode != null) { sortWorkspaceNodeList.add(specialWorkspaceNode); - moveTargetToFirst(sortWorkspaceNodeList,specialWorkspaceNode.getUuid()); + moveTargetToFirst(sortWorkspaceNodeList, specialWorkspaceNode.getUuid()); } return sortWorkspaceNodeList; } @@ -1961,10 +2160,10 @@ public class NodeServiceImpl extends ServiceImpl dirtyProjectNodeList = projectNodePoList.stream().filter(projectNode -> projectNode.getUuid().equals(projectNode.getParentId())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(dirtyProjectNodeList)) { - log.error("以下节点id:{},的uuid和parentId相同,需要处理",dirtyProjectNodeList.stream().map(ProjectNodePo::getUuid).collect(Collectors.joining(","))); + log.error("以下节点id:{},的uuid和parentId相同,需要处理", dirtyProjectNodeList.stream().map(ProjectNodePo::getUuid).collect(Collectors.joining(","))); return SdmResponse.failed("节点:" + dirtyProjectNodeList.stream().map(ProjectNodePo::getNodeName).collect(Collectors.joining(",")) + "的数据有误,需要处理"); } - log.info("getChildrenNodeList为:{}",projectNodePoList); + log.info("getChildrenNodeList为:{}", projectNodePoList); List returnProjectNodeList = projectNodePoList.stream().filter(projectNode -> nodeType.equals(projectNode.getNodeType())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(returnProjectNodeList)) { // 利元亨的工位排序 @@ -1984,7 +2183,7 @@ public class NodeServiceImpl extends ServiceImpl()); } @@ -2553,17 +2752,24 @@ public class NodeServiceImpl extends ServiceImpl updateList = new ArrayList<>(); - /** 待新增的任务扩展属性列表 */ + /** + * 待新增的任务扩展属性列表 + */ private final List insertList = new ArrayList<>(); /** * 添加操作到对应列表 + * * @param taskExtraReq 任务扩展属性请求 - * @param isUpdate true=更新, false=新增(值为空时跳过) + * @param isUpdate true=更新, false=新增(值为空时跳过) */ public void addOperation(SpdmNodeExtraReq taskExtraReq, boolean isUpdate) { if (isUpdate) { @@ -2785,11 +2991,11 @@ public class NodeServiceImpl extends ServiceImpl> getNodeTaskList(List uuids) { - if(CollectionUtils.isEmpty(uuids)){ + if (CollectionUtils.isEmpty(uuids)) { return SdmResponse.success(); } List simulationTasks = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, uuids).list(); - if(CollectionUtils.isEmpty(simulationTasks)){ + if (CollectionUtils.isEmpty(simulationTasks)) { return SdmResponse.success(); } List allNodeByProjectIdAndTypeRespList = new ArrayList<>(); @@ -2807,11 +3013,11 @@ public class NodeServiceImpl extends ServiceImpl> getTaskRunList(List uuids) { - if(ObjectUtils.isEmpty(uuids)){ + if (ObjectUtils.isEmpty(uuids)) { return SdmResponse.success(); } List simulationRunList = simulationRunService.lambdaQuery().in(SimulationRun::getTaskId, uuids).list(); - if(CollectionUtils.isEmpty(simulationRunList)){ + if (CollectionUtils.isEmpty(simulationRunList)) { return SdmResponse.success(); } List allNodeByProjectIdAndTypeRespList = new ArrayList<>(); @@ -2927,7 +3133,7 @@ public class NodeServiceImpl extends ServiceImpl userGroupTaskCompleteStatistics = this.baseMapper.getUserGroupTaskCompleteStatistics(req,Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); + List userGroupTaskCompleteStatistics = this.baseMapper.getUserGroupTaskCompleteStatistics(req, Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); // 按用户分组统计任务状态 Map userStatisticsMap = new HashMap<>(); @@ -2983,7 +3189,7 @@ public class NodeServiceImpl extends ServiceImpl(); } - List userGroupTaskCompleteStatistics = this.baseMapper.getAllUserTaskCompleteStatistics(req,Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); + List userGroupTaskCompleteStatistics = this.baseMapper.getAllUserTaskCompleteStatistics(req, Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); // 按用户分组统计任务状态 Map userStatisticsMap = new HashMap<>(); @@ -3031,7 +3237,7 @@ public class NodeServiceImpl extends ServiceImpl userGroupDifficultyStatistics = this.baseMapper.getUserGroupDifficultyStatistics(req,Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); + List userGroupDifficultyStatistics = this.baseMapper.getUserGroupDifficultyStatistics(req, Arrays.asList(MemberTypeEnum.EXECUTOR.getCode())); // 按用户分组统计任务状态 Map userStatisticsMap = new HashMap<>(); @@ -3248,7 +3454,7 @@ public class NodeServiceImpl extends ServiceImpl performanceList = this.baseMapper.getPerformanceCompleteStatisticsByDiscipline(req); // 按学科(discipline)分组统计指标完成状态 Set allExeStatus = new HashSet<>(); @@ -3323,7 +3529,7 @@ public class NodeServiceImpl extends ServiceImpl tagMap = req.getTagMap().stream().collect(Collectors.groupingBy( TaskNodeTag::getKey, Collectors.collectingAndThen( @@ -3331,11 +3537,11 @@ public class NodeServiceImpl extends ServiceImpl tagList.get(0).getValue() ) )); - log.info("tagMap为:{}",tagMap); + log.info("tagMap为:{}", tagMap); List result; try { result = addNodeForData(req.getAddNodeList(), tagMap); - }catch (Exception e) { + } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return SdmResponse.failed(e.getMessage()); } @@ -3379,11 +3585,11 @@ public class NodeServiceImpl extends ServiceImpl nodeList = addNodeList.stream().filter(node -> StringUtils.isNotBlank(node.getPid())).toList(); if (CollectionUtils.isNotEmpty(nodeList)) { List pidList = nodeList.stream().map(SpdmProjectNodeEditReq::getPid).distinct().toList(); - log.info("pidList为:{}",pidList); + log.info("pidList为:{}", pidList); List parentNodeList = this.lambdaQuery().in(SimulationNode::getUuid, pidList).list(); - log.info("parentNodeList为:{}",parentNodeList); + log.info("parentNodeList为:{}", parentNodeList); if (CollectionUtils.isEmpty(parentNodeList)) { - log.error("根据pidList:{},未查询到节点信息",pidList); + log.error("根据pidList:{},未查询到节点信息", pidList); return null; } Map nodeMap = parentNodeList.stream().collect(Collectors.groupingBy( @@ -3396,7 +3602,7 @@ public class NodeServiceImpl extends ServiceImpl extras = addNode.getExtras(); if (CollectionUtils.isEmpty(extras)) { continue; @@ -3435,13 +3641,13 @@ public class NodeServiceImpl extends ServiceImpl result; try { result = handleAddTaskForData(req.getAddTaskList()); - }catch (Exception e) { + } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return SdmResponse.failed(e.getMessage()); } @@ -3513,11 +3718,11 @@ public class NodeServiceImpl extends ServiceImpl pidList = addTaskList.stream().map(TaskNode::getPid).distinct().toList(); - log.info("pidList为:{}",pidList); + log.info("pidList为:{}", pidList); List parentNodeList = this.lambdaQuery().in(SimulationNode::getUuid, pidList).list(); - log.info("parentNodeList为:{}",parentNodeList); + log.info("parentNodeList为:{}", parentNodeList); if (CollectionUtils.isEmpty(parentNodeList)) { - log.error("根据pidList:{},未查询到节点信息",pidList); + log.error("根据pidList:{},未查询到节点信息", pidList); return null; } Map nodeMap = parentNodeList.stream().collect(Collectors.groupingBy( @@ -3530,7 +3735,7 @@ public class NodeServiceImpl extends ServiceImpl extras = addTask.getExtras(); if (CollectionUtils.isEmpty(extras)) { continue; @@ -3592,14 +3797,14 @@ public class NodeServiceImpl extends ServiceImpl> querySimulationNodeByUuids(List uuids) { - if(CollectionUtils.isEmpty(uuids)){ + if (CollectionUtils.isEmpty(uuids)) { return SdmResponse.failed("参数为空"); } - if(uuids.size()>queryCounts){ - return SdmResponse.failed("单次批量查询不允许超过"+queryCounts); + if (uuids.size() > queryCounts) { + return SdmResponse.failed("单次批量查询不允许超过" + queryCounts); } List simulationNodeResps = mapper.querySimulationNodeByUuids(uuids); return SdmResponse.success(simulationNodeResps); @@ -3658,15 +3862,15 @@ public class NodeServiceImpl extends ServiceImpl exportExcelFormats = projectExportExcelFormat.getExcelHeaders(); SdmResponse taskRespond = list(req); - if(taskRespond.isSuccess()) { - JSONObject dataObj = (JSONObject) taskRespond.getData(); + if (taskRespond.isSuccess()) { + JSONObject dataObj = (JSONObject) taskRespond.getData(); List taskVoList = (List) dataObj.get("data"); if (CollectionUtils.isEmpty(taskVoList)) { return SdmResponse.success(); @@ -3678,7 +3882,7 @@ public class NodeServiceImpl extends ServiceImpl> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(creatorIdList).build()); List userList = cidUserResp.getData(); if (CollectionUtils.isNotEmpty(userList)) { - userMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUserId,CIDUserResp::getNickname)); + userMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, CIDUserResp::getNickname)); } } List exportNodeVoList = new ArrayList<>(); @@ -3690,14 +3894,14 @@ public class NodeServiceImpl extends ServiceImpl nodeExtraListByNodeIdList = nodeMapper.getNodeExtraListByNodeIdList(Collections.singletonList(node.getUuid())); SpdmNodeDetailForDataVo spdmNodeDetailForDataVo = new SpdmNodeDetailForDataVo(); - BeanUtils.copyProperties(node,spdmNodeDetailForDataVo); + BeanUtils.copyProperties(node, spdmNodeDetailForDataVo); spdmNodeDetailForDataVo.setId(node.getId()); spdmNodeDetailForDataVo.setExtraList(nodeExtraListByNodeIdList); return SdmResponse.success(spdmNodeDetailForDataVo); @@ -3745,23 +3949,23 @@ public class NodeServiceImpl extends ServiceImpl NodeTypeEnum.PHASE.getValue().equals(node.getNodeType())).findFirst().orElse(null); - log.info("phaseNode为:{}",phaseNode); + log.info("phaseNode为:{}", phaseNode); if (ObjectUtils.isNotEmpty(phaseNode)) { String phaseNodeName = phaseNode.getNodeName(); - log.info("节点中的阶段为:{}",phaseNodeName); + log.info("节点中的阶段为:{}", phaseNodeName); if (StringUtils.isNotBlank(phaseNodeName)) { todoInfoList = todoInfoList.stream().filter(todoInfo -> phaseNodeName.equals(todoInfo.getProjectStage())).toList(); log.info("过滤阶段后待同步的待办数量:{}", todoInfoList.size()); @@ -3890,7 +4094,7 @@ public class NodeServiceImpl extends ServiceImpl workspaceNodeMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(workspaceNodeList)) { workspaceNodeMap = workspaceNodeList.stream().filter(workspaceNode -> StringUtils.isNotBlank(workspaceNode.getReferenceId())) - .collect(Collectors.toMap(SpdmProjectNodeEditReq::getUuid,SpdmProjectNodeEditReq::getReferenceId)); + .collect(Collectors.toMap(SpdmProjectNodeEditReq::getUuid, SpdmProjectNodeEditReq::getReferenceId)); } // 5. 处理待办事项,构建创建需求所需数据 @@ -3906,7 +4110,7 @@ public class NodeServiceImpl extends ServiceImpl resultFileIdMap = todoInfoList.stream().filter(todoInfo -> StringUtils.isNotBlank(todoInfo.getResultFileId())) - .collect(Collectors.toMap(LyricVTodoEmulationInfoDM::getTodoId,LyricVTodoEmulationInfoDM::getResultFileId,(oldValue, newValue) -> oldValue)); + Map resultFileIdMap = todoInfoList.stream().filter(todoInfo -> StringUtils.isNotBlank(todoInfo.getResultFileId())) + .collect(Collectors.toMap(LyricVTodoEmulationInfoDM::getTodoId, LyricVTodoEmulationInfoDM::getResultFileId, (oldValue, newValue) -> oldValue)); // 构建一个resultFileId到filePath的映射 - Map filePathMap = new HashMap<>(); + Map filePathMap = new HashMap<>(); // 构建一个filePath到fileName的映射 - Map fileNameMap = new HashMap<>(); + Map fileNameMap = new HashMap<>(); // 查询filePath List resultFileIdStrList = todoInfoList.stream().map(LyricVTodoEmulationInfoDM::getResultFileId).filter(StringUtils::isNotBlank) .collect(Collectors.toList()); @@ -4020,26 +4224,25 @@ public class NodeServiceImpl extends ServiceImpl attachmentConfigToDMList = lyricVAttachmentConfigService.lambdaQuery().in(LyricVAttachmentConfigToDM::getId, resultFileIdList) .list(); if (CollectionUtils.isNotEmpty(attachmentConfigToDMList)) { - filePathMap = attachmentConfigToDMList.stream().collect(Collectors.toMap(LyricVAttachmentConfigToDM::getId,LyricVAttachmentConfigToDM::getFilePath,(oldValue, newValue) -> oldValue)); + filePathMap = attachmentConfigToDMList.stream().collect(Collectors.toMap(LyricVAttachmentConfigToDM::getId, LyricVAttachmentConfigToDM::getFilePath, (oldValue, newValue) -> oldValue)); fileNameMap = attachmentConfigToDMList.stream().filter(attachment -> StringUtils.isNotBlank(attachment.getFilePath())) - .collect(Collectors.toMap(LyricVAttachmentConfigToDM::getFilePath,LyricVAttachmentConfigToDM::getName,(oldValue, newValue) -> oldValue)); + .collect(Collectors.toMap(LyricVAttachmentConfigToDM::getFilePath, LyricVAttachmentConfigToDM::getName, (oldValue, newValue) -> oldValue)); } } } - // 筛选出所有工位节点 for (LyricVTodoEmulationInfoDM todoItem : todoInfoList) { try { String demandUuid = RandomUtil.generateString(32); // 1. 构建基础需求信息 - SpdmAddDemandReq demandAddReq = buildDemandAddReq(todoItem, demandUuid, projectNodeMap, currentTimeStr,workspaceNodeMap,usernameToUserIdMap,resultFileIdMap,filePathMap); + SpdmAddDemandReq demandAddReq = buildDemandAddReq(todoItem, demandUuid, projectNodeMap, currentTimeStr, workspaceNodeMap, usernameToUserIdMap, resultFileIdMap, filePathMap); // 2. 构建成员信息和权限信息 List memberList = buildDemandMemberList( - todoItem, demandUuid, currentUserId, currentTimeStr, permissionReqList,usernameToUserIdMap); + todoItem, demandUuid, currentUserId, currentTimeStr, permissionReqList, usernameToUserIdMap); // 3. 构建文件夹节点信息 TagReq tagReq = new TagReq(); @@ -4051,11 +4254,11 @@ public class NodeServiceImpl extends ServiceImpl workspaceNodeMap, Map usernameToUserIdMap, - Map resultFileIdMap, - Map filePathMap) { + Map resultFileIdMap, + Map filePathMap) { SpdmAddDemandReq demandAddReq = new SpdmAddDemandReq(); // 基础属性 @@ -4092,9 +4295,9 @@ public class NodeServiceImpl extends ServiceImpl permissionReqList, String demandUuid, - Long userId,byte filePermissionEnumValue) { + Long userId, byte filePermissionEnumValue) { if (userId != 0L) { UpdatePermissionReq permissionReq = new UpdatePermissionReq(); @@ -4284,7 +4488,6 @@ public class NodeServiceImpl extends ServiceImpl usernameToUserIdMap, - Map resultFileIdMap, - Map filePathMap, - Map fileNameMap) { + Map resultFileIdMap, + Map filePathMap, + Map fileNameMap) { CompletableFuture.runAsync(() -> { try { ThreadLocalContext.setTenantId(tenantId); @@ -4360,11 +4562,7 @@ public class NodeServiceImpl extends ServiceImpl permissionReqList,List memberList) { + private void updateDemandPermissionsAsync(List permissionReqList, List memberList) { if (CollectionUtils.isEmpty(permissionReqList)) { log.info("无权限需要更新"); return; @@ -4624,6 +4822,7 @@ public class NodeServiceImpl extends ServiceImpl runList = simulationRunService.lambdaQuery().eq(SimulationRun::getTaskId, taskId).list(); @@ -4670,57 +4869,57 @@ public class NodeServiceImpl extends ServiceImpl> getRunListByNodeId(SpdmQueryRunListReq req) { List nodeIdList = req.getNodeIdList(); - if (CollectionUtils.isEmpty(nodeIdList)|| ObjectUtils.isEmpty(req.getNodeType())) { + if (CollectionUtils.isEmpty(nodeIdList) || ObjectUtils.isEmpty(req.getNodeType())) { return SdmResponse.failed("nodeIdList或者nodeType不能为空"); } Map TagMap = tagMapService.getTagMapName(); - if ( ObjectUtils.isEmpty(TagMap)) { + if (ObjectUtils.isEmpty(TagMap)) { log.error("字典信息查询失败"); return SdmResponse.failed("字典信息查询失败"); } - String queryTag =TagMap.get(req.getNodeType()); + String queryTag = TagMap.get(req.getNodeType()); // 1. 根据nodeId和tag,查询所有task LambdaQueryChainWrapper simulationTaskWrapper = simulationTaskService.lambdaQuery(); switch (queryTag) { - case "tag1" : - simulationTaskWrapper.in(SimulationTask::getTag1,nodeIdList); + case "tag1": + simulationTaskWrapper.in(SimulationTask::getTag1, nodeIdList); break; - case "tag2" : - simulationTaskWrapper.in(SimulationTask::getTag2,nodeIdList); + case "tag2": + simulationTaskWrapper.in(SimulationTask::getTag2, nodeIdList); break; - case "tag3" : - simulationTaskWrapper.in(SimulationTask::getTag3,nodeIdList); + case "tag3": + simulationTaskWrapper.in(SimulationTask::getTag3, nodeIdList); break; - case "tag4" : - simulationTaskWrapper.in(SimulationTask::getTag4,nodeIdList); + case "tag4": + simulationTaskWrapper.in(SimulationTask::getTag4, nodeIdList); break; - case "tag5" : - simulationTaskWrapper.in(SimulationTask::getTag5,nodeIdList); + case "tag5": + simulationTaskWrapper.in(SimulationTask::getTag5, nodeIdList); break; - case "tag6" : - simulationTaskWrapper.in(SimulationTask::getTag6,nodeIdList); + case "tag6": + simulationTaskWrapper.in(SimulationTask::getTag6, nodeIdList); break; - case "tag7" : - simulationTaskWrapper.in(SimulationTask::getTag7,nodeIdList); + case "tag7": + simulationTaskWrapper.in(SimulationTask::getTag7, nodeIdList); break; - case "tag8" : - simulationTaskWrapper.in(SimulationTask::getTag8,nodeIdList); + case "tag8": + simulationTaskWrapper.in(SimulationTask::getTag8, nodeIdList); break; - case "tag9" : - simulationTaskWrapper.in(SimulationTask::getTag9,nodeIdList); + case "tag9": + simulationTaskWrapper.in(SimulationTask::getTag9, nodeIdList); break; - case "tag10" : - simulationTaskWrapper.in(SimulationTask::getTag10,nodeIdList); + case "tag10": + simulationTaskWrapper.in(SimulationTask::getTag10, nodeIdList); break; default: break; @@ -4730,7 +4929,7 @@ public class NodeServiceImpl extends ServiceImpl taskIdList = tasklist.stream().map(SimulationTask::getUuid).toList(); - List runList = simulationRunService.lambdaQuery().in(SimulationRun::getTaskId,taskIdList).list(); + List runList = simulationRunService.lambdaQuery().in(SimulationRun::getTaskId, taskIdList).list(); if (CollectionUtils.isEmpty(runList)) { return SdmResponse.success(emptyList()); } @@ -4741,7 +4940,7 @@ public class NodeServiceImpl extends ServiceImpl> getRunListByRunIdList(SpdmQueryRunInfoListReq req) { List list = simulationRunService.lambdaQuery().in(SimulationRun::getUuid, req.getRunIdList()).list(); - if(CollectionUtils.isEmpty(list)) { + if (CollectionUtils.isEmpty(list)) { return SdmResponse.success(emptyList()); } List simulationRunResps = list.stream().map(simulationRun -> { @@ -4757,7 +4956,7 @@ public class NodeServiceImpl extends ServiceImpl newTaskList) { + // 1. 任务列表为空直接返回 + if (CollectionUtils.isEmpty(newTaskList)) { + return; + } + + // 2. 提取有效demandId + List demandIdList = newTaskList.stream() + .map(TaskNodePo::getDemandId) + .filter(StringUtils::isNotBlank) + .distinct() + .toList(); + + log.info("relateDemandType 查询需求ID列表:{}", demandIdList); + if (CollectionUtils.isEmpty(demandIdList)) { + return; + } + + // 3. 查询需求信息 + List demandList = demandMapper.getDemandListById(demandIdList); + if (CollectionUtils.isEmpty(demandList)) { + log.info("relateDemandType 根据ID未查询到对应需求信息"); + return; + } + + // 4. 转成 Map:uuid -> demandType + Map demandDemandTypeMap = demandList.stream() + .filter(demand -> StringUtils.isNotBlank(demand.getDemandType())) + .collect(Collectors.toMap( + SpdmDemandVo::getUuid, + SpdmDemandVo::getDemandType, + (oldVal, newVal) -> oldVal + )); + + // 5. 批量设置 demandType + for (TaskNodePo taskNodePo : newTaskList) { + String demandId = taskNodePo.getDemandId(); + if (StringUtils.isNotBlank(demandId)) { + taskNodePo.setDemandType(demandDemandTypeMap.get(demandId)); + } + } + + } + @Override public SdmResponse getTaskTree(ProjectTreeTagReq req) { List idMapList = req.getIdMap(); @@ -560,6 +608,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { if (CollectionUtils.isNotEmpty(taskTreeTaskList)) { log.info("查询到的任务为:{}", taskTreeTaskList.stream().map(TaskNodePo::getId).toList()); taskTreeTaskList.forEach(task -> task.setNodeType("task")); + relateDemandType(taskTreeTaskList); taskTreePerformanceList = mapper.getPerformanceListByNodeIdList(taskTreeTaskList.stream().map(TaskNodePo::getUuid).toList()); if (CollectionUtils.isNotEmpty(taskTreePerformanceList)) { log.info("查询到的指标为:{}", taskTreePerformanceList.stream().map(PerformanceNodePo::getId).toList()); diff --git a/project/src/main/resources/mapper/SimulationNodeMapper.xml b/project/src/main/resources/mapper/SimulationNodeMapper.xml index 85b84b3d..2c7ea75f 100644 --- a/project/src/main/resources/mapper/SimulationNodeMapper.xml +++ b/project/src/main/resources/mapper/SimulationNodeMapper.xml @@ -975,6 +975,14 @@ and sn.nodeName like #{searchKey3} + + or sn.uuid in + ( + + #{projectId} + + ) + order by IFNULL(pin.pinnedType, 0) desc, pin.pinnedTime desc, sn.create_time desc limit #{pos},#{limit} @@ -1017,6 +1025,14 @@ and sn.nodeName like #{searchKey3} + + or sn.uuid in + ( + + #{projectId} + + ) +