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 d9be0664..d89d975d 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java @@ -93,6 +93,11 @@ public interface SimulationNodeMapper extends BaseMapper { List getAllUserTaskCompleteStatistics(@Param("req") GetAllUserTaskCompleteStatisticsReq req,@Param("taskMemberTypeList") List taskMemberTypeList); + /** + * 根据项目uuid列表获取任务完成情况统计 + */ + List getTaskCompleteStatisticsByNodeIds(@Param("tenantId") Long tenantId, @Param("nodeIdList") List nodeIdList); + List getUserGroupDifficultyStatistics(@Param("req") GetUserGroupTaskCompleteStatisticsReq req,@Param("taskMemberTypeList") List taskMemberTypeList); List getCommonCompleteStatisticsFromTask(@Param("req") CommonGetCompleteStatisticsReq req); diff --git a/project/src/main/java/com/sdm/project/model/vo/SpdmNodeVo.java b/project/src/main/java/com/sdm/project/model/vo/SpdmNodeVo.java index b6fec043..4ee27c79 100644 --- a/project/src/main/java/com/sdm/project/model/vo/SpdmNodeVo.java +++ b/project/src/main/java/com/sdm/project/model/vo/SpdmNodeVo.java @@ -116,4 +116,19 @@ public class SpdmNodeVo extends BaseEntity { */ private Integer attentionFlag = 0; + /** + * 任务总数 + */ + private Integer taskTotalCount; + + /** + * 已完成任务数 + */ + private Integer taskCompletedCount; + + /** + * 已闭环任务数 + */ + private Integer taskClosedLoopCount; + } diff --git a/project/src/main/java/com/sdm/project/model/vo/UserGroupTaskCompleteVo.java b/project/src/main/java/com/sdm/project/model/vo/UserGroupTaskCompleteVo.java index d430afd7..acca9c06 100644 --- a/project/src/main/java/com/sdm/project/model/vo/UserGroupTaskCompleteVo.java +++ b/project/src/main/java/com/sdm/project/model/vo/UserGroupTaskCompleteVo.java @@ -8,4 +8,8 @@ public class UserGroupTaskCompleteVo { private String nickname; private Long userId; private Long groupId; + /** + * 项目uuid(task.tag1) + */ + private String nodeId; } 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 675bfdb7..af1e1ea2 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 @@ -45,6 +45,7 @@ import com.sdm.outbridge.service.lyric.*; import com.sdm.project.bo.ExportOperate; import com.sdm.project.common.MemberTypeEnum; import com.sdm.project.common.NodeMemberTypeEnum; +import com.sdm.project.common.TaskExeStatusEnum; import com.sdm.project.dao.SimulationDemandMapper; import com.sdm.project.dao.SimulationNodeMapper; import com.sdm.project.dao.SimulationProjectMapper; @@ -670,6 +671,8 @@ public class NodeServiceImpl extends ServiceImpl nodeList) { + if (CollectionUtils.isEmpty(nodeList)) { + return; + } + + // 获取所有项目的uuid + List nodeUuidList = nodeList.stream() + .map(SpdmNodeVo::getUuid) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(nodeUuidList)) { + return; + } + + // 获取任务统计数据 + Long tenantId = ThreadLocalContext.getTenantId(); + List taskCompleteList = this.baseMapper.getTaskCompleteStatisticsByNodeIds(tenantId, nodeUuidList); + + if (CollectionUtils.isEmpty(taskCompleteList)) { + return; + } + + // 按项目uuid(nodeId)分组统计 + Map totalCountMap = new HashMap<>(); + Map completedCountMap = new HashMap<>(); + Map closedLoopCountMap = new HashMap<>(); + + for (UserGroupTaskCompleteVo vo : taskCompleteList) { + String nodeId = vo.getNodeId(); + if (StringUtils.isBlank(nodeId)) { + continue; + } + String exeStatus = vo.getExeStatus(); + + // 统计总数 + totalCountMap.merge(nodeId, 1, Integer::sum); + + // 统计已完成数 + if (TaskExeStatusEnum.COMPLETED.getCode().equals(exeStatus)) { + completedCountMap.merge(nodeId, 1, Integer::sum); + } + + // 统计已闭环数 + if (TaskExeStatusEnum.CLOSED_LOOP.getCode().equals(exeStatus)) { + closedLoopCountMap.merge(nodeId, 1, Integer::sum); + } + } + + // 设置每个项目的统计信息 + for (SpdmNodeVo node : nodeList) { + String uuid = node.getUuid(); + node.setTaskTotalCount(totalCountMap.getOrDefault(uuid, 0)); + node.setTaskCompletedCount(completedCountMap.getOrDefault(uuid, 0)); + node.setTaskClosedLoopCount(closedLoopCountMap.getOrDefault(uuid, 0)); + } + } + /** * 设置EP类型项目当前阶段信息 * @param dmProjectNodeList diff --git a/project/src/main/resources/mapper/SimulationNodeMapper.xml b/project/src/main/resources/mapper/SimulationNodeMapper.xml index a65d2a45..74d12a8d 100644 --- a/project/src/main/resources/mapper/SimulationNodeMapper.xml +++ b/project/src/main/resources/mapper/SimulationNodeMapper.xml @@ -563,6 +563,27 @@ + +