|
@@ -55,11 +55,13 @@ import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* 统计控制器
|
|
@@ -544,6 +546,13 @@ public class SysStatisticManager {
|
|
|
List<Integer> deptIds = cont.stream().mapToInt(p -> Integer.parseInt(p.getDeptId())).distinct().boxed().sorted().collect(Collectors.toList());
|
|
|
Map<Integer, String> dId2NameMap = deptService.list(Wrappers.<SysDept>lambdaQuery().in(SysDept::getDeptId, deptIds)).stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getName));
|
|
|
|
|
|
+ // 批量查询任务
|
|
|
+ List<WmTask> tasks = taskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getTaskStatus, UpmsState.TaskState.PASSED)
|
|
|
+ .in(WmTask::getScorePackageId, cont.stream().map(WmScorePackage::getId).collect(Collectors.toSet())));
|
|
|
+ // 根据执行包ID分组
|
|
|
+ Map<String, List<WmTask>> pkg2TaskListMap = tasks.stream().collect(Collectors.groupingBy(WmTask::getScorePackageId));
|
|
|
+
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
|
List<TreeNode<Integer>> treeNodes = cont.stream().map(pkg -> {
|
|
|
TreeNode<Integer> node = new TreeNode<>();
|
|
@@ -573,13 +582,13 @@ public class SysStatisticManager {
|
|
|
extra.put("createTime", pkg.getCreateTime());
|
|
|
|
|
|
// 完成分值
|
|
|
- List<WmTask> tasks = taskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
- .eq(WmTask::getTaskStatus, UpmsState.TaskState.PASSED)
|
|
|
- .eq(WmTask::getScorePackageId, pkg.getId()));
|
|
|
-
|
|
|
long sum = 0;
|
|
|
- if (CollUtil.isNotEmpty(tasks)) {
|
|
|
- sum = tasks.stream().mapToLong(WmTask::getScore).sum();
|
|
|
+
|
|
|
+ // 根据任意层级的pkgId获取任务列表
|
|
|
+ List<WmTask> thisPkgTasks = this.getTasksByPkgId(pkg.getId(), cont, pkg2TaskListMap);
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(thisPkgTasks)) {
|
|
|
+ sum = thisPkgTasks.stream().mapToLong(WmTask::getScore).sum();
|
|
|
}
|
|
|
extra.put("completedScore", sum);
|
|
|
|
|
@@ -614,6 +623,42 @@ public class SysStatisticManager {
|
|
|
return page1;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据任意层级的pkgId获取任务列表
|
|
|
+ *
|
|
|
+ * @param pkgId 上级执行包ID
|
|
|
+ * @param pkgs 执行包集合
|
|
|
+ * @param pkg2TaskListMap 根据执行包ID分组的任务map
|
|
|
+ * @return {@link Set }<{@link String }> 任务列表
|
|
|
+ */
|
|
|
+ private List<WmTask> getTasksByPkgId(String pkgId, List<WmScorePackage> pkgs, Map<String, List<WmTask>> pkg2TaskListMap) {
|
|
|
+ // 当前包ID对应的个人包ID
|
|
|
+ Set<String> taskPkgIds = new HashSet<>();
|
|
|
+ taskPkgIds.add(pkgId);
|
|
|
+
|
|
|
+ // 获取当前执行包ID的所有子包ID
|
|
|
+ Set<String> subPkgIds = Set.of(pkgId);
|
|
|
+ while (true) {
|
|
|
+ Set<String> finalSubPkgIds = subPkgIds;
|
|
|
+ subPkgIds = pkgs.stream()
|
|
|
+ .filter(pkg -> finalSubPkgIds.contains(pkg.getRelationScoreId()))
|
|
|
+ .map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
+ if (CollUtil.isEmpty(subPkgIds)) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ taskPkgIds.addAll(subPkgIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据子执行包ID获取任务
|
|
|
+ List<WmTask> tasks = new ArrayList<>();
|
|
|
+ for (String taskPkgId : taskPkgIds) {
|
|
|
+ tasks.addAll(pkg2TaskListMap.getOrDefault(taskPkgId, new ArrayList<>()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return tasks;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 统计服务商数据
|
|
|
* <p>
|