1、仿真任务达成统计

This commit is contained in:
2025-12-16 09:56:36 +08:00
parent c3f88dab2b
commit bc780226c1
5 changed files with 114 additions and 52 deletions

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -71,4 +71,6 @@ public interface ITaskService {
SdmResponse newExportTaskTree(TaskTreeExportExcelFormat taskTreeExportExcelFormat, HttpServletResponse httpservletResponse);
SdmResponse getTaskAchieveStatistics(TaskCompleteStatisticsReq req);
}

View File

@@ -2248,4 +2248,90 @@ public class TaskServiceImpl implements ITaskService {
return response;
}
@Override
public SdmResponse getTaskAchieveStatistics(TaskCompleteStatisticsReq req) {
// 所有任务达成状态
Set<String> allAchieveStatus = new HashSet<>();
List<SpdmTaskVo> 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<String> 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<SpdmNodeVo> 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<String, String> nodeMap = nodeList.stream().collect(Collectors.toMap(SpdmNodeVo::getUuid, SpdmNodeVo::getNodeName));
List<CommonGetAchieveFromTaskVo> 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<String, CommonStatisticsVo> taskStatisticsMap = new HashMap<>();
// 统计每个tag的各种状态任务数量
for (CommonGetAchieveFromTaskVo item : commonAchieveStatisticsFromTask) {
String name = item.getNodeName();
CommonStatisticsVo stat = taskStatisticsMap.getOrDefault(name, new CommonStatisticsVo());
stat.setName(name);
Map<String, Integer> 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<CommonStatisticsVo> taskResult = new ArrayList<>(taskStatisticsMap.values());
JSONObject resultResponse = new JSONObject();
resultResponse.put("allAchieveStatus", allAchieveStatus);
resultResponse.put("result", taskResult);
return SdmResponse.success(resultResponse);
}
}

View File

@@ -343,52 +343,6 @@
)
</select>
<select id="getTaskListByTag" resultType="com.sdm.project.model.vo.SpdmTaskVo">
select * from simulation_task task
<where>
task.exe_status is not null
<if test="req.tag1 != null and req.tag1 !='' ">
and task.tag1 like CONCAT('%',#{req.tag1},'%')
</if>
<if test="req.tag2 != null and req.tag2 !='' ">
and task.tag2 like CONCAT('%',#{req.tag2},'%')
</if>
<if test="req.tag3 != null and req.tag3 !='' ">
and task.tag3 like CONCAT('%',#{req.tag3},'%')
</if>
<if test="req.tag4 != null and req.tag4 !='' ">
and task.tag4 like CONCAT('%',#{req.tag4},'%')
</if>
<if test="req.tag5 != null and req.tag5 !='' ">
and task.tag5 like CONCAT('%',#{req.tag5},'%')
</if>
<if test="req.tag6 != null and req.tag6 !='' ">
and task.tag6 like CONCAT('%',#{req.tag6},'%')
</if>
<if test="req.tag7 != null and req.tag7 !='' ">
and task.tag7 like CONCAT('%',#{req.tag7},'%')
</if>
<if test="req.tag8 != null and req.tag8 !='' ">
and task.tag8 like CONCAT('%',#{req.tag8},'%')
</if>
<if test="req.tag9 != null and req.tag9 !='' ">
and task.tag9 like CONCAT('%',#{req.tag9},'%')
</if>
<if test="req.tag10 != null and req.tag10 !='' ">
and task.tag10 like CONCAT('%',#{req.tag10},'%')
</if>
</where>
</select>
<select id="getTaskListByName" resultType="com.sdm.project.model.vo.SpdmTaskVo">
select * from simulation_task where task_name in
(
<foreach collection='taskNameList' item='taskName' index='index' separator=','>
#{taskName}
</foreach>
)
</select>
<select id="getTaskListByDemandId" resultType="com.sdm.project.model.vo.SpdmTaskVo">
select * from simulation_task where demand_id = #{demandId}
</select>