|
@@ -0,0 +1,174 @@
|
|
|
|
+package com.qunzhixinxi.hnqz.admin.manager;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskType;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Collections;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 统计控制器
|
|
|
|
+ *
|
|
|
|
+ * @author jimmy
|
|
|
|
+ * @version 1.0.0
|
|
|
|
+ * @date 2024/05/26 15:22
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+@Service
|
|
|
|
+@AllArgsConstructor
|
|
|
|
+public class SysStatisticManager {
|
|
|
|
+
|
|
|
|
+ private final WmScorePackageService packageService;
|
|
|
|
+ private final WmTaskService taskService;
|
|
|
|
+ private final WmTaskTypeService taskTypeService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取积分包统计
|
|
|
|
+ *
|
|
|
|
+ * @param operator 操作人
|
|
|
|
+ * @return 包统计信息
|
|
|
|
+ */
|
|
|
|
+ public Map<String, Object> getPkgStat(HnqzUser operator) {
|
|
|
|
+ Map<String, Object> res = new HashMap<>(3);
|
|
|
|
+ Map<String, Long> total = new HashMap<>(2);
|
|
|
|
+ Map<String, Long> finish = new HashMap<>(2);
|
|
|
|
+ Map<String, Long> doing = new HashMap<>(2);
|
|
|
|
+
|
|
|
|
+ // 查询全部的积分包
|
|
|
|
+ List<WmScorePackage> packages = packageService.list(Wrappers.<WmScorePackage>lambdaQuery().eq(WmScorePackage::getSendPackageDeptId, operator.getDeptId()));
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isNotEmpty(packages)) {
|
|
|
|
+ // 统计全部的信息
|
|
|
|
+ total.put("count", (long) packages.size());
|
|
|
|
+ total.put("sum", packages.stream().mapToLong(WmScorePackage::getScore).sum());
|
|
|
|
+
|
|
|
|
+ // 统计已完成
|
|
|
|
+ Map<String, List<WmScorePackage>> collect = packages.stream().collect(Collectors.groupingBy(WmScorePackage::getPackageFinishStatus));
|
|
|
|
+
|
|
|
|
+ // 获取未完成的
|
|
|
|
+ List<WmScorePackage> doingPkgs = collect.get("0");
|
|
|
|
+ if (CollUtil.isNotEmpty(doingPkgs)) {
|
|
|
|
+ doing.put("count", (long) doingPkgs.size());
|
|
|
|
+ doing.put("sum", doingPkgs.stream().mapToLong(WmScorePackage::getScore).sum());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取已完成的
|
|
|
|
+ List<WmScorePackage> finishPkgs = collect.get("1");
|
|
|
|
+ if (CollUtil.isNotEmpty(finishPkgs)) {
|
|
|
|
+ finish.put("count", (long) finishPkgs.size());
|
|
|
|
+ finish.put("sum", finishPkgs.stream().mapToLong(WmScorePackage::getScore).sum());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ total.put("count", 0L);
|
|
|
|
+ total.put("sum", 0L);
|
|
|
|
+ doing.put("count", 0L);
|
|
|
|
+ doing.put("sum", 0L);
|
|
|
|
+ finish.put("count", 0L);
|
|
|
|
+ finish.put("sum", 0L);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ res.put("total", total);
|
|
|
|
+ res.put("finish", finish);
|
|
|
|
+ res.put("doing", doing);
|
|
|
|
+
|
|
|
|
+ return res;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取任务的统计
|
|
|
|
+ *
|
|
|
|
+ * @param operator 操作人
|
|
|
|
+ * @return 任务统计
|
|
|
|
+ */
|
|
|
|
+ public Map<String, Object> getTaskStat(HnqzUser operator) {
|
|
|
|
+
|
|
|
|
+ // 查询全部的积分包
|
|
|
|
+ List<WmScorePackage> packages = packageService.list(Wrappers.<WmScorePackage>lambdaQuery().eq(WmScorePackage::getSendPackageDeptId, operator.getDeptId()));
|
|
|
|
+
|
|
|
|
+ // 过滤出有下级包的包id
|
|
|
|
+ Set<String> pkgIds = packages.stream().filter(pkg -> StrUtil.isNotBlank(pkg.getRelationScoreId())).map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isNotEmpty(pkgIds)) {
|
|
|
|
+ List<WmScorePackage> pkgs = packageService.listByIds(pkgIds);
|
|
|
|
+ Set<String> collect = pkgs.stream().filter(pkg -> StrUtil.isNotBlank(pkg.getRelationScoreId())).map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isNotEmpty(collect)) {
|
|
|
|
+
|
|
|
|
+ List<WmScorePackage> pkgs1 = packageService.listByIds(collect);
|
|
|
|
+ Set<String> collect1 = pkgs1.stream().filter(pkg -> StrUtil.isNotBlank(pkg.getRelationScoreId())).map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+ if (CollUtil.isNotEmpty(collect1)) {
|
|
|
|
+ List<WmScorePackage> pkgs2 = packageService.listByIds(collect1);
|
|
|
|
+ pkgIds = pkgs2.stream().filter(pkg -> StrUtil.isNotBlank(pkg.getRelationScoreId())).map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ pkgIds = pkgs1.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ pkgIds = pkgs.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ pkgIds = packages.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Map<String, List<WmTask>> taskTypeAndTaskMap;
|
|
|
|
+ if (CollUtil.isNotEmpty(pkgIds)) {
|
|
|
|
+ List<WmTask> tasks = taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getScorePackageId, pkgIds));
|
|
|
|
+
|
|
|
|
+ taskTypeAndTaskMap = tasks.stream().collect(Collectors.groupingBy(WmTask::getTaskTypeId));
|
|
|
|
+ } else {
|
|
|
|
+ taskTypeAndTaskMap = Collections.emptyMap();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ List<WmTaskType> taskTypes = taskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
|
+ .eq(WmTaskType::getDelFlag, CommonConstants.STATUS_NORMAL)
|
|
|
|
+ .lt(WmTaskType::getId, 1000));
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> taskTypeStatList = new ArrayList<>(taskTypes.size());
|
|
|
|
+
|
|
|
|
+ long total = 0;
|
|
|
|
+ for (WmTaskType taskType : taskTypes) {
|
|
|
|
+
|
|
|
|
+ Map<String, Object> taskTypeAndSumMap = new HashMap<>(2);
|
|
|
|
+ List<WmTask> wmTasks = taskTypeAndTaskMap.get(taskType.getId());
|
|
|
|
+
|
|
|
|
+ long sum = CollUtil.isEmpty(wmTasks) ? 0L : wmTasks.stream().mapToLong(WmTask::getScore).sum();
|
|
|
|
+ taskTypeAndSumMap.put("taskTypeName", taskType.getTaskTypeName());
|
|
|
|
+ taskTypeAndSumMap.put("sum", sum);
|
|
|
|
+ total += sum;
|
|
|
|
+ taskTypeStatList.add(taskTypeAndSumMap);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Map<String, Object> res = new HashMap<>(2);
|
|
|
|
+ res.put("details", taskTypeStatList);
|
|
|
|
+ res.put("total", total);
|
|
|
|
+
|
|
|
|
+ return res;
|
|
|
|
+ }
|
|
|
|
+}
|