diff --git a/common/src/main/java/com/sdm/common/entity/enums/MessageTemplateEnum.java b/common/src/main/java/com/sdm/common/entity/enums/MessageTemplateEnum.java new file mode 100644 index 00000000..7b3e1a7b --- /dev/null +++ b/common/src/main/java/com/sdm/common/entity/enums/MessageTemplateEnum.java @@ -0,0 +1,36 @@ +package com.sdm.common.entity.enums; + +/** + * 消息通知模板枚举 + */ +public enum MessageTemplateEnum { + + TASK_ISSUE("任务通知", "收到一条下发的新任务:%s,请前去[任务管理-我执行的]进行处理"), + HPC_START("作业通知", "作业已发起"), + HPC_END("作业通知", "作业已结束") + ; + + private final String title; + private final String content; + + MessageTemplateEnum(String title, String content) { + this.title = title; + this.content = content; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + /** + * 获取模板内容(含参数替换) + */ + public String getContent(String taskName) { + return String.format(content, taskName); + } + +} diff --git a/common/src/main/java/com/sdm/common/entity/req/capability/FlowNodeDto.java b/common/src/main/java/com/sdm/common/entity/req/capability/FlowNodeDto.java index 36b5393e..58986c01 100644 --- a/common/src/main/java/com/sdm/common/entity/req/capability/FlowNodeDto.java +++ b/common/src/main/java/com/sdm/common/entity/req/capability/FlowNodeDto.java @@ -1,6 +1,7 @@ package com.sdm.common.entity.req.capability; import com.fasterxml.jackson.annotation.JsonFormat; +import com.sdm.common.entity.flowable.dto.NodeDetailInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -59,4 +60,7 @@ public class FlowNodeDto { private LocalDateTime updateTime; private List flowNodeDtoList; + + @Schema(description = "节点详细信息 来自flowable") + private NodeDetailInfo nodeDetailInfo; } \ No newline at end of file diff --git a/common/src/main/java/com/sdm/common/feign/impl/flowable/FlowableClientFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/flowable/FlowableClientFeignClientImpl.java index 0d5b2ed4..7ff83f0f 100644 --- a/common/src/main/java/com/sdm/common/feign/impl/flowable/FlowableClientFeignClientImpl.java +++ b/common/src/main/java/com/sdm/common/feign/impl/flowable/FlowableClientFeignClientImpl.java @@ -50,10 +50,10 @@ public class FlowableClientFeignClientImpl implements IFlowableFeignClient { } @Override - public SdmResponse saveParamsByDefinitionId(String processDefinitionId, String nodeId, Map params) { + public SdmResponse saveParamsByDefinitionId(String processDefinitionId, String nodeId, String runId, Map params) { SdmResponse response; try { - response = flowableFeignClient.saveParamsByDefinitionId(processDefinitionId, nodeId, params); + response = flowableFeignClient.saveParamsByDefinitionId(processDefinitionId, nodeId, runId, params); log.info("保存节点参数:"+ response); return response; } catch (Exception e) { @@ -76,10 +76,10 @@ public class FlowableClientFeignClientImpl implements IFlowableFeignClient { } @Override - public SdmResponse getProcessAndNodeDetailByInstanceId(String processDefinitionId,String processInstanceId) { + public SdmResponse getProcessAndNodeDetailByInstanceId(String processDefinitionId,String processInstanceId,String runId) { SdmResponse response; try { - response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(processDefinitionId,processInstanceId); + response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(processDefinitionId,processInstanceId,runId); log.info("查询流程状态以及节点状态:"+ response); return response; } catch (Exception e) { diff --git a/common/src/main/java/com/sdm/common/feign/impl/system/MessageFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/system/MessageFeignClientImpl.java new file mode 100644 index 00000000..429deed1 --- /dev/null +++ b/common/src/main/java/com/sdm/common/feign/impl/system/MessageFeignClientImpl.java @@ -0,0 +1,36 @@ +package com.sdm.common.feign.impl.system; + +import com.alibaba.fastjson2.JSONObject; +import com.sdm.common.common.SdmResponse; +import com.sdm.common.entity.req.system.SendMsgReq; +import com.sdm.common.feign.inter.system.IMessageFeignClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Optional; + + +@Slf4j +@Component +public class MessageFeignClientImpl implements IMessageFeignClient { + + @Autowired + private IMessageFeignClient messageFeignClient; + + @Override + public SdmResponse sendMessage(SendMsgReq req) { + SdmResponse response=null ; + try { + response = messageFeignClient.sendMessage(req); + if(response==null || !response.isSuccess()){ + log.error("sendMessage failed response:{}", JSONObject.toJSONString(Optional.ofNullable(response))); + return SdmResponse.failed("发送消息通知失败"); + } + } catch (Exception e) { + log.error("sendMessage error response:{}", JSONObject.toJSONString(Optional.ofNullable(response))); + return SdmResponse.failed("发送消息通知异常"); + } + return response; + } +} diff --git a/common/src/main/java/com/sdm/common/feign/inter/flowable/IFlowableFeignClient.java b/common/src/main/java/com/sdm/common/feign/inter/flowable/IFlowableFeignClient.java index b7a45861..8b7e8cdd 100644 --- a/common/src/main/java/com/sdm/common/feign/inter/flowable/IFlowableFeignClient.java +++ b/common/src/main/java/com/sdm/common/feign/inter/flowable/IFlowableFeignClient.java @@ -26,11 +26,11 @@ public interface IFlowableFeignClient { SdmResponse deploy(@RequestBody ProcessDefinitionDTO processDTO); @PostMapping("/process/saveParamsByDefinitionId") - SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId, @RequestBody Map params); + SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId, @RequestParam String runId,@RequestBody Map params); @PostMapping("/process/updateNodeParamProcessInstanceId") SdmResponse updateNodeParamProcessInstanceId(@RequestParam String processDefinitionId, @RequestParam String processInstanceId); @GetMapping("/process/getProcessAndNodeDetailByInstanceId") - SdmResponse getProcessAndNodeDetailByInstanceId(@RequestParam String processDefinitionId,@RequestParam(required = false) String processInstanceId); + SdmResponse getProcessAndNodeDetailByInstanceId(@RequestParam String processDefinitionId,@RequestParam(required = false) String processInstanceId,@RequestParam String runId); } diff --git a/flowable/src/main/java/com/sdm/flowable/controller/ProcessController.java b/flowable/src/main/java/com/sdm/flowable/controller/ProcessController.java index be25043b..d96af839 100644 --- a/flowable/src/main/java/com/sdm/flowable/controller/ProcessController.java +++ b/flowable/src/main/java/com/sdm/flowable/controller/ProcessController.java @@ -90,9 +90,9 @@ public class ProcessController implements IFlowableFeignClient { // 保存节点用户输入参数(先基于流程定义ID,等流程启动后,保存流程实例ID,作为参数模板) @PostMapping("/saveParamsByDefinitionId") - public SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId, + public SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId, @RequestParam String runId, @RequestBody Map params) { - processNodeParamService.saveParamByProcessDefinitionId(processDefinitionId, nodeId, params); + processNodeParamService.saveParamByProcessDefinitionId(processDefinitionId, nodeId, runId, params); return SdmResponse.success(); } @@ -133,8 +133,8 @@ public class ProcessController implements IFlowableFeignClient { * 如果还传了processInstanceId,再封装流程状态和节点状态 */ @GetMapping("/getProcessAndNodeDetailByInstanceId") - public SdmResponse getProcessAndNodeDetailByInstanceId(@RequestParam String processDefinitionId,@RequestParam(required = false) String processInstanceId) { - return processService.getProcessAndNodeDetailByInstanceId(processDefinitionId,processInstanceId); + public SdmResponse getProcessAndNodeDetailByInstanceId(@RequestParam String processDefinitionId,@RequestParam(required = false) String processInstanceId,@RequestParam String runId) { + return processService.getProcessAndNodeDetailByInstanceId(processDefinitionId,processInstanceId,runId); } diff --git a/flowable/src/main/java/com/sdm/flowable/delegate/UniversalDelegate.java b/flowable/src/main/java/com/sdm/flowable/delegate/UniversalDelegate.java index 7f46750c..9342a13b 100644 --- a/flowable/src/main/java/com/sdm/flowable/delegate/UniversalDelegate.java +++ b/flowable/src/main/java/com/sdm/flowable/delegate/UniversalDelegate.java @@ -51,7 +51,7 @@ public class UniversalDelegate implements JavaDelegate { log.info("开始执行节点, 流程实例ID: {}, 节点ID: {}, 节点名称: {}", procInstId, nodeId, nodeName); // 2. 读取输入参数 - Map params = processNodeParamService.getParam(processDefinitionId, nodeId); + Map params = processNodeParamService.getParam(processDefinitionId, nodeId, null); log.info("节点执行参数, 流程实例ID: {}, 节点ID: {}, 参数: {}", procInstId, nodeId, params); diff --git a/flowable/src/main/java/com/sdm/flowable/entity/ProcessNodeParam.java b/flowable/src/main/java/com/sdm/flowable/entity/ProcessNodeParam.java index 4c25d3f7..8d4d177b 100644 --- a/flowable/src/main/java/com/sdm/flowable/entity/ProcessNodeParam.java +++ b/flowable/src/main/java/com/sdm/flowable/entity/ProcessNodeParam.java @@ -44,6 +44,10 @@ public class ProcessNodeParam implements Serializable { @TableField("nodeId") private String nodeId; + @ApiModelProperty(value = "流程绑定的算例uuid") + @TableField("runId") + private String runId; + @ApiModelProperty(value = "输入参数JSON") @TableField("paramJson") private String paramJson; diff --git a/flowable/src/main/java/com/sdm/flowable/process/ProcessService.java b/flowable/src/main/java/com/sdm/flowable/process/ProcessService.java index bbf5ebf9..4bbf1fd4 100644 --- a/flowable/src/main/java/com/sdm/flowable/process/ProcessService.java +++ b/flowable/src/main/java/com/sdm/flowable/process/ProcessService.java @@ -142,7 +142,7 @@ public class ProcessService { * 如果只传了processDefinitionId,根据流程定义返回流程基本信息和节点信息, * 如果还传了processInstanceId,再封装流程状态和节点状态 */ - public SdmResponse getProcessAndNodeDetailByInstanceId(String processDefinitionId, String processInstanceId) { + public SdmResponse getProcessAndNodeDetailByInstanceId(String processDefinitionId, String processInstanceId, String runId) { ProcessInstanceDetailResponse response = new ProcessInstanceDetailResponse(); // 构建基础流程信息 @@ -154,7 +154,7 @@ public class ProcessService { List nodes = orderedNodes.stream() .map(this::buildNodeDetailInfoFromFlowNode) // 直接构建NodeDetailInfo .peek(detail -> { - Map params = processNodeParamService.getParam(processDefinitionId, detail.getId()); + Map params = processNodeParamService.getParam(processDefinitionId, detail.getId(), runId); detail.setUserParam(params); }) .collect(Collectors.toList()); diff --git a/flowable/src/main/java/com/sdm/flowable/service/IProcessNodeParamService.java b/flowable/src/main/java/com/sdm/flowable/service/IProcessNodeParamService.java index 20598e2c..7db1efeb 100644 --- a/flowable/src/main/java/com/sdm/flowable/service/IProcessNodeParamService.java +++ b/flowable/src/main/java/com/sdm/flowable/service/IProcessNodeParamService.java @@ -14,7 +14,7 @@ import java.util.Map; * @since 2025-11-25 */ public interface IProcessNodeParamService extends IService { - void saveParamByProcessDefinitionId(String processDefinitionId, String nodeId, Map params); + void saveParamByProcessDefinitionId(String processDefinitionId, String nodeId, String runId, Map params); void updateNodeParamProcessInstanceId(String processInstanceId, String processDefinitionId); - Map getParam(String processDefinitionId, String nodeId); + Map getParam(String processDefinitionId, String nodeId, String runId); } \ No newline at end of file diff --git a/flowable/src/main/java/com/sdm/flowable/service/impl/ProcessNodeParamServiceImpl.java b/flowable/src/main/java/com/sdm/flowable/service/impl/ProcessNodeParamServiceImpl.java index eb992c6e..4035e05a 100644 --- a/flowable/src/main/java/com/sdm/flowable/service/impl/ProcessNodeParamServiceImpl.java +++ b/flowable/src/main/java/com/sdm/flowable/service/impl/ProcessNodeParamServiceImpl.java @@ -35,10 +35,11 @@ public class ProcessNodeParamServiceImpl extends ServiceImpl params) { + public void saveParamByProcessDefinitionId(String processDefinitionId, String nodeId, String runId, Map params) { ProcessNodeParam param = new ProcessNodeParam(); param.setProcessDefinitionId(processDefinitionId); param.setNodeId(nodeId); + param.setRunId(runId); try { param.setParamJson(objectMapper.writeValueAsString(params)); } catch (JsonProcessingException e) { @@ -70,9 +71,10 @@ public class ProcessNodeParamServiceImpl extends ServiceImpl getParam(String processDefinitionId, String nodeId) { + public Map getParam(String processDefinitionId, String nodeId, String runId) { ProcessNodeParam param = this.lambdaQuery().eq(ProcessNodeParam::getProcessDefinitionId, processDefinitionId) .eq(ProcessNodeParam::getNodeId, nodeId) + .eq(ObjectUtils.isNotEmpty(runId), ProcessNodeParam::getRunId, runId) .one(); if (param == null) { 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 92c00892..d622b43a 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java @@ -139,4 +139,22 @@ public class SimulationTaskController { return simulationTaskService.editTaskForData(req); } + /** + * 按工位、学科的仿真任务达成统计 + */ + @PostMapping("/getTaskCompleteStatistics") + @Operation(summary = "按工位、学科的仿真任务达成统计", description = "按工位、学科的仿真任务达成统计") + public SdmResponse getCommonCompleteStatistics(@RequestBody @Validated TaskCompleteStatisticsReq req) { + return taskService.getCommonCompleteStatistics(req); + } + + /** + * 按工位、学科的仿真指标达成统计 + */ + @PostMapping("/getPerformanceCompleteStatistics") + @Operation(summary = "按工位、学科的仿真指标达成统计", description = "按工位、学科的仿真指标达成统计") + public SdmResponse getPerformanceCompleteStatistics(@RequestBody @Validated PerformanceCompleteStatisticsReq req) { + return taskService.getPerformanceCompleteStatistics(req); + } + } diff --git a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java index f940dd90..513ca365 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java @@ -39,4 +39,8 @@ public interface SimulationTaskMapper extends BaseMapper { SpdmTaskVo getTaskById(@Param("id") Long id); + List getTaskCompleteStatistics(@Param("req") TaskCompleteStatisticsReq req); + + List getPerformanceCompleteStatistics(@Param("req") PerformanceCompleteStatisticsReq req); + } diff --git a/project/src/main/java/com/sdm/project/model/req/PerformanceCompleteStatisticsReq.java b/project/src/main/java/com/sdm/project/model/req/PerformanceCompleteStatisticsReq.java new file mode 100644 index 00000000..ca75a5e1 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/PerformanceCompleteStatisticsReq.java @@ -0,0 +1,48 @@ +package com.sdm.project.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 指标 完成情况统计请求参数(工位、学科) + */ +@Data +@Schema(description = "按工位、学科的仿真指标达成统计") +public class PerformanceCompleteStatisticsReq { + + @Schema(description = "数据返回Tag类型: tag1、tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10") + @NotNull + private String resultTagType; + + @Schema(description = "标签1") + private String tag1; + + @Schema(description = "标签2") + private String tag2; + + @Schema(description = "标签3") + private String tag3; + + @Schema(description = "标签4") + private String tag4; + + @Schema(description = "标签5") + private String tag5; + + @Schema(description = "标签6") + private String tag6; + + @Schema(description = "标签7") + private String tag7; + + @Schema(description = "标签8") + private String tag8; + + @Schema(description = "标签9") + private String tag9; + + @Schema(description = "标签10") + private String tag10; + +} diff --git a/project/src/main/java/com/sdm/project/model/req/TaskCompleteStatisticsReq.java b/project/src/main/java/com/sdm/project/model/req/TaskCompleteStatisticsReq.java new file mode 100644 index 00000000..88491189 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/TaskCompleteStatisticsReq.java @@ -0,0 +1,48 @@ +package com.sdm.project.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 任务 完成情况统计请求参数(工位、学科) + */ +@Data +@Schema(description = "按工位、学科的仿真任务达成统计") +public class TaskCompleteStatisticsReq { + + @Schema(description = "数据返回Tag类型: tag1、tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10") + @NotNull + private String resultTagType; + + @Schema(description = "标签1") + private String tag1; + + @Schema(description = "标签2") + private String tag2; + + @Schema(description = "标签3") + private String tag3; + + @Schema(description = "标签4") + private String tag4; + + @Schema(description = "标签5") + private String tag5; + + @Schema(description = "标签6") + private String tag6; + + @Schema(description = "标签7") + private String tag7; + + @Schema(description = "标签8") + private String tag8; + + @Schema(description = "标签9") + private String tag9; + + @Schema(description = "标签10") + private String tag10; + +} 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 4deae052..4990baf5 100644 --- a/project/src/main/java/com/sdm/project/service/ITaskService.java +++ b/project/src/main/java/com/sdm/project/service/ITaskService.java @@ -55,4 +55,7 @@ public interface ITaskService { BosimSaveProjectTaskRsp syncCidTask(SyncCidTaskReq req); + SdmResponse getCommonCompleteStatistics(TaskCompleteStatisticsReq req); + + SdmResponse getPerformanceCompleteStatistics(PerformanceCompleteStatisticsReq req); } diff --git a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java index 90e4c9d4..7b0a9d18 100644 --- a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java @@ -8,13 +8,16 @@ import com.sdm.common.common.SdmResponse; import com.sdm.common.common.ThreadLocalContext; import com.sdm.common.entity.ExportExcelFormat; import com.sdm.common.entity.enums.DirTypeEnum; +import com.sdm.common.entity.enums.MessageTemplateEnum; import com.sdm.common.entity.req.data.CreateDirReq; import com.sdm.common.entity.req.data.UploadFilesReq; +import com.sdm.common.entity.req.system.SendMsgReq; import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.req.task.DemandExportExcelFormat; import com.sdm.common.entity.req.task.DemandExportExcelParam; import com.sdm.common.entity.resp.system.CIDUserResp; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; +import com.sdm.common.feign.impl.system.MessageFeignClientImpl; import com.sdm.common.feign.impl.system.SysUserFeignClientImpl; import com.sdm.common.feign.inter.data.IDataFeignClient; import com.sdm.common.service.BaseService; @@ -75,7 +78,10 @@ public class DemandServiceImpl extends BaseService implements IDemandService { private SysUserFeignClientImpl sysUserFeignClient; @Autowired - private IDataFeignClient dataFeignClient; + private DataClientFeignClientImpl dataFeignClient; + + @Autowired + private MessageFeignClientImpl messageFeignClient; @Transactional @@ -580,6 +586,8 @@ public class DemandServiceImpl extends BaseService implements IDemandService { )); for (TaskNode taskNode : taskNodeList) { createDir(taskNode.getUuid(), parentUuid, taskNode.getNodeName()); + // 发送消息通知 + sendMessage(MessageTemplateEnum.TASK_ISSUE, taskNode.getNodeName()); } } if (CollectionUtils.isNotEmpty(projectNodeExtraList)) { @@ -639,6 +647,15 @@ public class DemandServiceImpl extends BaseService implements IDemandService { return response; } + private void sendMessage(MessageTemplateEnum templateEnum, String taskName) { + SendMsgReq req = new SendMsgReq(); + req.setTitle(templateEnum.getTitle()); + req.setContent(templateEnum.getContent(taskName)); + req.setTenantId(ThreadLocalContext.getTenantId().toString()); + req.setUserId(ThreadLocalContext.getUserId().toString()); + messageFeignClient.sendMessage(req); + } + @Override public SdmResponse uploadDemandFiles(UploadFilesReq req) { return dataFeignClient.uploadFiles(req); 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 9f233980..f6ee8eda 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 @@ -1221,7 +1221,7 @@ public class SimulationRunServiceImpl extends ServiceImpl flowNodeDtoList = sdmResponse.getData(); SimulationRun simulationRun = this.lambdaQuery().eq(SimulationRun::getUuid, req.getRunId()).one(); - SdmResponse response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(simulationRun.getProcessDefinitionId(), simulationRun.getFlowInstanceId()); + SdmResponse response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(simulationRun.getProcessDefinitionId(), simulationRun.getFlowInstanceId(), simulationRun.getUuid()); if (response.getData() != null && CollectionUtils.isNotEmpty(response.getData().getNodes())) { for (FlowNodeDto flowNodeDto : flowNodeDtoList) { response.getData().getNodes().stream().filter(i -> StringUtils.equals(i.getId(), flowNodeDto.getNodeId())).findFirst().ifPresent(i -> { flowNodeDto.setNodeStatus(i.getStatus()); flowNodeDto.setUserParams(i.getUserParam()); flowNodeDto.setProcessInstanceId(simulationRun.getFlowInstanceId()); + flowNodeDto.setNodeDetailInfo(i); }); } } 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 064eacc2..d776d5e8 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 @@ -1355,4 +1355,67 @@ public class TaskServiceImpl implements ITaskService { return resp; } + @Override + public SdmResponse getCommonCompleteStatistics(TaskCompleteStatisticsReq req) { + // 所有任务执行状态 + Set allExeStatus = new HashSet<>(); + List commonCompleteStatisticsFromTask = mapper.getTaskCompleteStatistics(req); + // 按tag分组统计任务状态 + Map taskStatisticsMap = new HashMap<>(); + // 统计每个tag的各种状态任务数量 + for (CommonGetCompleteFromTaskVo item : commonCompleteStatisticsFromTask) { + String name = item.getNodeName(); + + CommonStatisticsVo stat = taskStatisticsMap.getOrDefault(name, new CommonStatisticsVo()); + stat.setName(name); + + Map statusCount = stat.getStatusCount(); + if (statusCount == null) { + statusCount = new HashMap<>(); + stat.setStatusCount(statusCount); + } + String exeStatus = item.getExeStatus(); + allExeStatus.add(exeStatus); + statusCount.put(exeStatus, statusCount.getOrDefault(exeStatus, 0) + 1); + taskStatisticsMap.put(name, stat); + } + // 转换为列表返回 + List taskResult = new ArrayList<>(taskStatisticsMap.values()); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allExeStatus", allExeStatus); + resultResponse.put("result", taskResult); + return SdmResponse.success(resultResponse); + } + + @Override + public SdmResponse getPerformanceCompleteStatistics(PerformanceCompleteStatisticsReq req) { + // 所有指标执行状态 + Set allExeStatus = new HashSet<>(); + // 处理指标完成情况统计 + List commonCompleteStatisticsFromPerformance = mapper.getPerformanceCompleteStatistics(req); + // 按tag分组统计指标状态 + Map performanceStatisticsMap = new HashMap<>(); + // 统计每个tag的各种状态指标数量 + for (CommonGetCompleteFromPerformanceVo item : commonCompleteStatisticsFromPerformance) { + String nodeName = item.getNodeName(); + CommonStatisticsVo stat = performanceStatisticsMap.getOrDefault(nodeName, new CommonStatisticsVo()); + stat.setName(nodeName); + Map statusCount = stat.getStatusCount(); + if (statusCount == null) { + statusCount = new HashMap<>(); + stat.setStatusCount(statusCount); + } + String completeStatus = item.getCompleteStatus(); + allExeStatus.add(completeStatus); + statusCount.put(completeStatus, statusCount.getOrDefault(completeStatus, 0) + 1); + performanceStatisticsMap.put(nodeName, stat); + } + // 转换为列表返回 + List performanceResult = new ArrayList<>(performanceStatisticsMap.values()); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allExeStatus", allExeStatus); + resultResponse.put("result", performanceResult); + return SdmResponse.success(resultResponse); + } + } diff --git a/project/src/main/resources/mapper/SimulationTaskMapper.xml b/project/src/main/resources/mapper/SimulationTaskMapper.xml index 44f21c24..a77be35e 100644 --- a/project/src/main/resources/mapper/SimulationTaskMapper.xml +++ b/project/src/main/resources/mapper/SimulationTaskMapper.xml @@ -185,5 +185,95 @@ select * from simulation_task where id = #{id} + + + + \ No newline at end of file