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 acae1164..215ac8c7 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java @@ -152,21 +152,21 @@ public class SimulationTaskController { } /** - * 按工位、学科的仿真任务达成统计 + * 按工位、学科的仿真任务完成统计 */ - @SysLog("按工位、学科的仿真任务达成统计") + @SysLog("按工位、学科的仿真任务完成统计") @PostMapping("/getTaskCompleteStatistics") - @Operation(summary = "按工位、学科的仿真任务达成统计", description = "按工位、学科的仿真任务达成统计") + @Operation(summary = "按工位、学科的仿真任务完成统计", description = "按工位、学科的仿真任务完成统计") public SdmResponse getTaskCompleteStatistics(@RequestBody @Validated TaskCompleteStatisticsReq req) { return taskService.getTaskCompleteStatistics(req); } /** - * 按工位、学科的仿真指标达成统计 + * 按工位、学科的仿真指标完成统计 */ - @SysLog("按工位、学科的仿真指标达成统计") + @SysLog("按工位、学科的仿真指标完成统计") @PostMapping("/getPerformanceCompleteStatistics") - @Operation(summary = "按工位、学科的仿真指标达成统计", description = "按工位、学科的仿真指标达成统计") + @Operation(summary = "按工位、学科的仿真指标完成统计", description = "按工位、学科的仿真指标完成统计") public SdmResponse getPerformanceCompleteStatistics(@RequestBody @Validated PerformanceCompleteStatisticsReq req) { return taskService.getPerformanceCompleteStatistics(req); } @@ -204,4 +204,14 @@ public class SimulationTaskController { return taskService.getTaskListByDemandId(req); } + /** + * 仿真任务达成统计 + */ + @SysLog("仿真任务达成统计") + @PostMapping("/getTaskAchieveStatistics") + @Operation(summary = "仿真任务达成统计", description = "仿真任务达成统计") + public SdmResponse getTaskAchieveStatistics(@RequestBody @Validated TaskCompleteStatisticsReq req) { + return taskService.getTaskAchieveStatistics(req); + } + } diff --git a/project/src/main/java/com/sdm/project/model/vo/CommonGetAchieveFromTaskVo.java b/project/src/main/java/com/sdm/project/model/vo/CommonGetAchieveFromTaskVo.java new file mode 100644 index 00000000..87cb4b28 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/vo/CommonGetAchieveFromTaskVo.java @@ -0,0 +1,10 @@ +package com.sdm.project.model.vo; + +import lombok.Data; + +@Data +public class CommonGetAchieveFromTaskVo { + private String tag; + private String nodeName; + private String achieveStatus; +} 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 181f7673..d7c21e31 100644 --- a/project/src/main/java/com/sdm/project/service/ITaskService.java +++ b/project/src/main/java/com/sdm/project/service/ITaskService.java @@ -71,4 +71,6 @@ public interface ITaskService { SdmResponse newExportTaskTree(TaskTreeExportExcelFormat taskTreeExportExcelFormat, HttpServletResponse httpservletResponse); + SdmResponse getTaskAchieveStatistics(TaskCompleteStatisticsReq 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 3d4ffe54..e7a93585 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 @@ -2248,4 +2248,90 @@ public class TaskServiceImpl implements ITaskService { return response; } + @Override + public SdmResponse getTaskAchieveStatistics(TaskCompleteStatisticsReq req) { + // 所有任务达成状态 + Set allAchieveStatus = new HashSet<>(); + List taskList = mapper.getTaskListByTag(req); + if (CollectionUtils.isEmpty(taskList)) { + log.error("根据参数:{},未查询到任务", req); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allAchieveStatus", allAchieveStatus); + resultResponse.put("result", new ArrayList<>()); + return SdmResponse.success(resultResponse); + } + String resultTagType = req.getResultTagType(); + List nodeIdList = new ArrayList<>(); + for (SpdmTaskVo taskVo : taskList) { + try { + String tagProperty = getTagProperty(taskVo, resultTagType); + if (StringUtils.isNotBlank(tagProperty)) { + nodeIdList.addAll(Arrays.stream(tagProperty.split(",")).toList()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + if (CollectionUtils.isEmpty(nodeIdList)) { + log.error("根据任务:{},未查询到{}标签中的节点id", taskList, resultTagType); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allAchieveStatus", allAchieveStatus); + resultResponse.put("result", new ArrayList<>()); + return SdmResponse.success(resultResponse); + } + nodeIdList = nodeIdList.stream().distinct().toList(); + List nodeList = nodeMapper.getNodeListByIds(nodeIdList); + if (CollectionUtils.isEmpty(nodeList)) { + log.error("根据节点id:{},未查询节点", nodeIdList); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allAchieveStatus", allAchieveStatus); + resultResponse.put("result", new ArrayList<>()); + return SdmResponse.success(resultResponse); + } + Map nodeMap = nodeList.stream().collect(Collectors.toMap(SpdmNodeVo::getUuid, SpdmNodeVo::getNodeName)); + List commonAchieveStatisticsFromTask = new ArrayList<>(); + String resultTagId; + String[] resultTagIdArr; + for (SpdmTaskVo taskVo : taskList) { + try { + resultTagId = getTagProperty(taskVo, resultTagType); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (StringUtils.isBlank(resultTagId)) { + log.error("id:{}任务的:{}标签不存在", taskVo.getId(), resultTagType); + continue; + } + resultTagIdArr = resultTagId.split(","); + CommonGetAchieveFromTaskVo commonGetAchieveFromTaskVo = new CommonGetAchieveFromTaskVo(); + commonGetAchieveFromTaskVo.setTag(resultTagId); + commonGetAchieveFromTaskVo.setNodeName(nodeMap.get(resultTagIdArr[resultTagIdArr.length - 1])); + commonGetAchieveFromTaskVo.setAchieveStatus(taskVo.getAchieveStatus()); + commonAchieveStatisticsFromTask.add(commonGetAchieveFromTaskVo); + } + // 按tag分组统计任务状态 + Map taskStatisticsMap = new HashMap<>(); + // 统计每个tag的各种状态任务数量 + for (CommonGetAchieveFromTaskVo item : commonAchieveStatisticsFromTask) { + 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 achieveStatus = item.getAchieveStatus(); + allAchieveStatus.add(achieveStatus); + statusCount.put(achieveStatus, statusCount.getOrDefault(achieveStatus, 0) + 1); + taskStatisticsMap.put(name, stat); + } + // 转换为列表返回 + List taskResult = new ArrayList<>(taskStatisticsMap.values()); + JSONObject resultResponse = new JSONObject(); + resultResponse.put("allAchieveStatus", allAchieveStatus); + resultResponse.put("result", taskResult); + return SdmResponse.success(resultResponse); + } + } diff --git a/project/src/main/resources/mapper/SimulationTaskMapper.xml b/project/src/main/resources/mapper/SimulationTaskMapper.xml index a300f328..d6544a2e 100644 --- a/project/src/main/resources/mapper/SimulationTaskMapper.xml +++ b/project/src/main/resources/mapper/SimulationTaskMapper.xml @@ -343,52 +343,6 @@ ) - - - -