From ebb782414a9903cfa67f0fc4ab6ec7d5040485c8 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Thu, 12 Mar 2026 14:26:15 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=8A=82=E7=82=B9=E4=BF=A1=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sdm/common/service/TagMapService.java | 10 +++ .../controller/SimulationTaskController.java | 6 ++ .../model/req/SpdmMergeQueryNodeReq.java | 13 +++ .../model/resp/NodeMergeQueryResp.java | 17 ++++ .../com/sdm/project/service/ITaskService.java | 2 + .../project/service/impl/TaskServiceImpl.java | 87 ++++++++++++++++++- 6 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 project/src/main/java/com/sdm/project/model/req/SpdmMergeQueryNodeReq.java create mode 100644 project/src/main/java/com/sdm/project/model/resp/NodeMergeQueryResp.java diff --git a/common/src/main/java/com/sdm/common/service/TagMapService.java b/common/src/main/java/com/sdm/common/service/TagMapService.java index 5b090d23..2a1e4661 100644 --- a/common/src/main/java/com/sdm/common/service/TagMapService.java +++ b/common/src/main/java/com/sdm/common/service/TagMapService.java @@ -32,6 +32,16 @@ public class TagMapService { return tagMapList.getData().stream().collect(Collectors.toMap(DataDictionary::getDictValue, DataDictionary::getDictName)); } + public Map getTagMapValue() { + SdmResponse> tagMapList = sysConfigFeignClient.getDictionaryData(TagConstant.DICTIONARY_TAG_KEY); + if (!tagMapList.isSuccess() || ObjectUtils.isEmpty(tagMapList.getData())) { + log.error("字典信息查询失败"); + return emptyMap(); + } + // project-->tag1 phase-->tag2 + return tagMapList.getData().stream().collect(Collectors.toMap(DataDictionary::getDictName, DataDictionary::getDictValue)); + } + /** * 是否节点类型 */ diff --git a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java index bd79d447..962fb124 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java @@ -303,4 +303,10 @@ public class SimulationTaskController implements ISimulationTaskFeignClient { return taskService.importSimulationPerformance(file,columns,taskId,taskName,runId); } + @PostMapping("/mergeQueryNode") + @Operation(summary = "合并查询节点信息", description = "合并查询节点信息") + public SdmResponse mergeQueryNode(@RequestBody SpdmMergeQueryNodeReq req) { + return taskService.mergeQueryNode(req); + } + } diff --git a/project/src/main/java/com/sdm/project/model/req/SpdmMergeQueryNodeReq.java b/project/src/main/java/com/sdm/project/model/req/SpdmMergeQueryNodeReq.java new file mode 100644 index 00000000..f7f38aa6 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/SpdmMergeQueryNodeReq.java @@ -0,0 +1,13 @@ +package com.sdm.project.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class SpdmMergeQueryNodeReq { + + // 如果是任务或算例就传:task或run,其他的传tag1到tag10 + @Schema(description = "查询类型") + private String type; + +} diff --git a/project/src/main/java/com/sdm/project/model/resp/NodeMergeQueryResp.java b/project/src/main/java/com/sdm/project/model/resp/NodeMergeQueryResp.java new file mode 100644 index 00000000..124aa041 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/resp/NodeMergeQueryResp.java @@ -0,0 +1,17 @@ +package com.sdm.project.model.resp; + +import lombok.Data; + +import java.util.List; + + +@Data +public class NodeMergeQueryResp { + + // 具体的节点(任务、算例)名称 + private String name; + + // 合并后的id集合 + private List value; + +} diff --git a/project/src/main/java/com/sdm/project/service/ITaskService.java b/project/src/main/java/com/sdm/project/service/ITaskService.java index d7ae4f31..05e3dabc 100644 --- a/project/src/main/java/com/sdm/project/service/ITaskService.java +++ b/project/src/main/java/com/sdm/project/service/ITaskService.java @@ -108,4 +108,6 @@ public interface ITaskService { SdmResponse importSimulationPerformance(MultipartFile file, String columns,String taskId,String taskName,String runId); + SdmResponse mergeQueryNode(SpdmMergeQueryNodeReq req); + } diff --git a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java index 05429667..f989b883 100644 --- a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java @@ -38,6 +38,7 @@ import com.sdm.common.feign.inter.system.ISysLogFeignClient; import com.sdm.common.log.constants.ModuleConstants; import com.sdm.common.log.constants.OperateTypeConstants; import com.sdm.common.log.dto.SysLogDTO; +import com.sdm.common.service.TagMapService; import com.sdm.common.utils.RandomUtil; import com.sdm.common.utils.SystemOperate; import com.sdm.common.utils.excel.ExcelUtil; @@ -46,6 +47,7 @@ import com.sdm.outbridge.service.lyric.LyricVProjectResourcePlanDMService; import com.sdm.project.bo.ExportOperate; import com.sdm.project.common.MemberTypeEnum; import com.sdm.project.common.TaskExeStatusEnum; +import com.sdm.project.common.TaskQryTypeEnum; import com.sdm.project.dao.SimulationDemandMapper; import com.sdm.project.dao.SimulationNodeMapper; import com.sdm.project.dao.SimulationProjectMapper; @@ -161,6 +163,9 @@ public class TaskServiceImpl implements ITaskService { @Autowired private DataClientFeignClientImpl dataFeignClient; + @Autowired + private TagMapService tagMapService; + // 通过标识判断是否走查询现场视图逻辑(0不查询,1查询) @Value("${lyricFlag:1}") private int lyricFlag; @@ -174,6 +179,12 @@ public class TaskServiceImpl implements ITaskService { private static final float EPSILON = 1e-6f; + // 合并查询接口中查询任务时的参数值 + public static final String MERGE_QUERY_TASK = "task"; + + // 合并查询接口中查询算例时的参数值 + public static final String MERGE_QUERY_RUN = "run"; + /** * 预处理请求参数 @@ -778,7 +789,7 @@ public class TaskServiceImpl implements ITaskService { // 之前同步创建的需求、任务时,创建人用的工号,这里先兼容处理下 Long creator = newTaskVo.getCreator(); Long userId; - if (getDigitCount(creator) < LYRIC_JOB_NUMBER_LENGTH) { + if (creator != null && getDigitCount(creator) < LYRIC_JOB_NUMBER_LENGTH) { // 不足五位的前面补0 userId = usernameToUserIdMap.get(formatUserId(creator)); }else { @@ -4337,6 +4348,80 @@ public class TaskServiceImpl implements ITaskService { return SdmResponse.success(); } + @Override + public SdmResponse mergeQueryNode(SpdmMergeQueryNodeReq req) { + if (ObjectUtils.isEmpty(req) || StringUtils.isBlank(req.getType())) { + return SdmResponse.failed("参数不能为空"); + } + Map tagMap = tagMapService.getTagMapValue(); + if (MapUtils.isEmpty(tagMap)) { + return SdmResponse.failed("未查询到节点标签的配置"); + } + List mergeQueryRespList = new ArrayList<>(); + // 如果是任务或算例就传:task或run,其他的传tag1到tag10 + String type = req.getType(); + if (MERGE_QUERY_TASK.equals(type) || MERGE_QUERY_RUN.equals(type)) { + SpdmTaskListReq taskListReq = new SpdmTaskListReq(); + taskListReq.setType(TaskQryTypeEnum.ALL.getCode()); + taskListReq.setCurrent(1); + taskListReq.setSize(10000); + TaskNodeTag taskNodeTag = new TaskNodeTag(); + taskNodeTag.setKey(null); + taskNodeTag.setValue("tag1"); + taskListReq.setIdMap(Collections.singletonList(taskNodeTag)); + SdmResponse response = list(taskListReq); + if (!response.isSuccess()) { + return SdmResponse.success(Collections.emptyList()); + } + JSONObject dataObj = (JSONObject) response.getData(); + List taskVoList = (List) dataObj.get("data"); + if (CollectionUtils.isEmpty(taskVoList)) { + return SdmResponse.success(Collections.emptyList()); + } + if (MERGE_QUERY_TASK.equals(type)) { + // 查询任务 + Map> taskMap = taskVoList.stream().collect(Collectors.groupingBy(SpdmNewTaskVo::getTaskName)); + for (Map.Entry> taskEntry : taskMap.entrySet()) { + NodeMergeQueryResp taskMergeQueryResp = new NodeMergeQueryResp(); + taskMergeQueryResp.setName(taskEntry.getKey()); + taskMergeQueryResp.setValue(taskEntry.getValue().stream().map(SpdmNewTaskVo::getUuid).toList()); + mergeQueryRespList.add(taskMergeQueryResp); + } + }else { + // 查询算例 + SpdmAnalysisRunListReq runListReq = new SpdmAnalysisRunListReq(); + List runPoList = projectMapper.queryRunListByNodeIdList(taskVoList.stream().map(SpdmNewTaskVo::getUuid).toList(), runListReq); + if (CollectionUtils.isEmpty(runPoList)) { + return SdmResponse.success(Collections.emptyList()); + } + Map> runMap = runPoList.stream().collect(Collectors.groupingBy(TaskRunPo::getRunName)); + for (Map.Entry> runEntry : runMap.entrySet()) { + NodeMergeQueryResp runMergeQueryResp = new NodeMergeQueryResp(); + runMergeQueryResp.setName(runEntry.getKey()); + runMergeQueryResp.setValue(runEntry.getValue().stream().map(TaskRunPo::getUuid).toList()); + mergeQueryRespList.add(runMergeQueryResp); + } + } + }else { + // 除了项目以外的节点都要合并查询(阶段、机台、工位) + String nodeType = tagMap.get(type); + if (StringUtils.isBlank(nodeType)) { + return SdmResponse.failed("系统中没有当前节点类型:{}",type); + } + List nodeList = nodeService.lambdaQuery().eq(SimulationNode::getNodeType, nodeType).list(); + if (CollectionUtils.isEmpty(nodeList)) { + return SdmResponse.success(Collections.emptyList()); + } + Map> nodeMap = nodeList.stream().collect(Collectors.groupingBy(SimulationNode::getNodeName)); + for (Map.Entry> nodeEntry : nodeMap.entrySet()) { + NodeMergeQueryResp nodeMergeQueryResp = new NodeMergeQueryResp(); + nodeMergeQueryResp.setName(nodeEntry.getKey()); + nodeMergeQueryResp.setValue(nodeEntry.getValue().stream().map(SimulationNode::getUuid).toList()); + mergeQueryRespList.add(nodeMergeQueryResp); + } + } + return SdmResponse.success(mergeQueryRespList.stream().sorted(Comparator.comparing(NodeMergeQueryResp::getName)).toList()); + } public static String getMaxNonEmptyTagForTask(SimulationTask req) {