From 0e152f77327194edcb266b774c4d17768774b74b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <8153694@qq.com>
Date: Thu, 10 Aug 2023 10:58:50 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=91=98=E5=AD=A6?=
 =?UTF-8?q?=E4=B9=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../module/project/model/vo/ProjectVo.java    |  5 +
 .../study/service/StudyStatService.java       |  7 ++
 .../service/impl/StudyStatServiceImpl.java    | 91 +++++++++++++++++--
 .../module/study/web/StudyStatController.java | 24 +++++
 .../mortals/httpclient/http-client.env.json   |  4 +
 5 files changed, 124 insertions(+), 7 deletions(-)

diff --git a/study-manager/src/main/java/com/mortals/xhx/module/project/model/vo/ProjectVo.java b/study-manager/src/main/java/com/mortals/xhx/module/project/model/vo/ProjectVo.java
index 9b9dd11..0b512c8 100644
--- a/study-manager/src/main/java/com/mortals/xhx/module/project/model/vo/ProjectVo.java
+++ b/study-manager/src/main/java/com/mortals/xhx/module/project/model/vo/ProjectVo.java
@@ -33,4 +33,9 @@ public class ProjectVo extends BaseEntityLong {
      */
     private String studyPersonRadio;
 
+    /**
+     * 瀛︿範浜烘暟鏁伴噺
+     */
+    private Integer studyPersonCount;
+
 }
\ No newline at end of file
diff --git a/study-manager/src/main/java/com/mortals/xhx/module/study/service/StudyStatService.java b/study-manager/src/main/java/com/mortals/xhx/module/study/service/StudyStatService.java
index aeccefd..820bfee 100644
--- a/study-manager/src/main/java/com/mortals/xhx/module/study/service/StudyStatService.java
+++ b/study-manager/src/main/java/com/mortals/xhx/module/study/service/StudyStatService.java
@@ -1,6 +1,10 @@
 package com.mortals.xhx.module.study.service;
+import com.mortals.framework.model.Context;
 import com.mortals.framework.service.ICRUDService;
 import com.mortals.xhx.module.study.model.StudyStatEntity;
+
+import java.util.Map;
+
 /**
 * StudyStatService
 *
@@ -11,4 +15,7 @@ import com.mortals.xhx.module.study.model.StudyStatEntity;
 */
 public interface StudyStatService extends ICRUDService<StudyStatEntity,Long>{
 
+
+    void indexStat(Map<String, Object> model,Context context);
+
 }
\ No newline at end of file
diff --git a/study-manager/src/main/java/com/mortals/xhx/module/study/service/impl/StudyStatServiceImpl.java b/study-manager/src/main/java/com/mortals/xhx/module/study/service/impl/StudyStatServiceImpl.java
index 980f056..3f57c8b 100644
--- a/study-manager/src/main/java/com/mortals/xhx/module/study/service/impl/StudyStatServiceImpl.java
+++ b/study-manager/src/main/java/com/mortals/xhx/module/study/service/impl/StudyStatServiceImpl.java
@@ -1,4 +1,17 @@
 package com.mortals.xhx.module.study.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.mortals.xhx.common.code.ProjectTypeEnum;
+import com.mortals.xhx.common.code.YesNoEnum;
+import com.mortals.xhx.module.project.model.ProjectEntity;
+import com.mortals.xhx.module.project.model.ProjectQuery;
+import com.mortals.xhx.module.project.model.ProjectStudyEntity;
+import com.mortals.xhx.module.project.model.ProjectStudyQuery;
+import com.mortals.xhx.module.project.service.ProjectService;
+import com.mortals.xhx.module.project.service.ProjectStudyService;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Indexed;
 import org.springframework.stereotype.Service;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
 import com.mortals.framework.exception.AppException;
@@ -6,14 +19,78 @@ import com.mortals.framework.model.Context;
 import com.mortals.xhx.module.study.dao.StudyStatDao;
 import com.mortals.xhx.module.study.model.StudyStatEntity;
 import com.mortals.xhx.module.study.service.StudyStatService;
+import org.springframework.util.ObjectUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
-* StudyStatService
-* 瀛︿範缁熻 service瀹炵幇
-*
-* @author zxfei
-* @date 2023-03-06
-*/
+ * StudyStatService
+ * 瀛︿範缁熻 service瀹炵幇
+ *
+ * @author zxfei
+ * @date 2023-03-06
+ */
 @Service("studyStatService")
 public class StudyStatServiceImpl extends AbstractCRUDServiceImpl<StudyStatDao, StudyStatEntity, Long> implements StudyStatService {
-    
+
+    @Autowired
+    private ProjectService projectService;
+    @Autowired
+    private ProjectStudyService projectStudyService;
+
+
+    @Override
+    public void indexStat(Map<String, Object> model, Context context) {
+
+        //鏈€杩�7澶╁涔犱汉鏁拌秼鍔�
+        ProjectStudyQuery studyQuery = new ProjectStudyQuery();
+        studyQuery.setUpdateTimeStart(DateUtil.offsetDay(new Date(), -7).toString());
+        studyQuery.setUpdateTimeEnd(DateUtil.today());
+        studyQuery.setStudyStatus(YesNoEnum.YES.getValue());
+
+        List<ProjectStudyEntity> projectStudyEntities = projectStudyService.find(studyQuery, context);
+        //鎸夊ぉ鍒嗙粍鏁伴噺
+        Map<String, List<ProjectStudyEntity>> collect = projectStudyEntities.stream().collect(Collectors.groupingBy(x -> {
+            if (!ObjectUtils.isEmpty(x.getUpdateTime())) {
+                return DateUtil.formatDate(x.getUpdateTime());
+            } else {
+                return "";
+            }
+        }));
+
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 7; i > 0; i--) {
+            String beforeDay = DateUtil.offsetDay(new Date(), -i).toString();
+            if (collect.containsKey(beforeDay)) {
+                map.put(beforeDay, collect.getOrDefault(beforeDay, new ArrayList<>()).size());
+            } else {
+                map.put(beforeDay, 0);
+            }
+        }
+        model.put("dayTrend", map);
+
+
+        //棣栭〉缁熻銆�
+        //缁熻瀛︿簺绫诲瀷鍗犳瘮
+        List<ProjectEntity> projectEntities = projectService.find(new ProjectQuery());
+        Map<String, Long> studyTypeStat = projectEntities.stream().collect(Collectors.groupingBy(x -> ProjectTypeEnum.getByValue(x.getProjectType()).getDesc(), Collectors.counting()));
+        model.put("studyTypeStat", studyTypeStat);
+
+        //瀛︿範閲忓墠
+        for (ProjectEntity projectEntity : projectEntities) {
+            ProjectStudyQuery projectStudyQuery = new ProjectStudyQuery();
+            projectStudyQuery.setStudyStatus(YesNoEnum.YES.getValue());
+            projectStudyQuery.setProjectId(projectEntity.getId());
+            int count = projectStudyService.count(projectStudyQuery, context);
+            projectEntity.setStudyPersonCount(count);
+        }
+
+
+        List<ProjectEntity> leaderList = projectEntities.stream()
+                .sorted(Comparator.comparing(ProjectEntity::getStudyPersonCount, Comparator.reverseOrder()))
+                .limit(5).collect(Collectors.toList());
+        model.put("leaderList", leaderList);
+
+    }
 }
\ No newline at end of file
diff --git a/study-manager/src/main/java/com/mortals/xhx/module/study/web/StudyStatController.java b/study-manager/src/main/java/com/mortals/xhx/module/study/web/StudyStatController.java
index d2451ef..c6ded0a 100644
--- a/study-manager/src/main/java/com/mortals/xhx/module/study/web/StudyStatController.java
+++ b/study-manager/src/main/java/com/mortals/xhx/module/study/web/StudyStatController.java
@@ -1,4 +1,5 @@
 package com.mortals.xhx.module.study.web;
+import com.mortals.framework.annotation.UnAuth;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,4 +47,27 @@ public class StudyStatController extends BaseCRUDJsonBodyMappingController<Study
     }
 
 
+    /**
+     * 棣栭〉缁熻
+     */
+    @PostMapping(value = "indexStat")
+    @UnAuth
+    public String indexStat() {
+        JSONObject jsonObject = new JSONObject();
+        Map<String, Object> model = new HashMap<>();
+        jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
+        jsonObject.put(KEY_RESULT_MSG, "");
+        try {
+            this.service.indexStat(model,getContext());
+            jsonObject.put(KEY_RESULT_DATA, model);
+            recordSysLog(request, "棣栭〉缁熻 銆愭垚鍔熴€�");
+        } catch (Exception e) {
+            log.error("寮傚父", e);
+            jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
+            jsonObject.put(KEY_RESULT_MSG, super.convertException(e));
+        }
+        return jsonObject.toJSONString();
+    }
+
+
 }
\ No newline at end of file
diff --git a/study-manager/src/test/java/com/mortals/httpclient/http-client.env.json b/study-manager/src/test/java/com/mortals/httpclient/http-client.env.json
index 1469fce..1b7cfa2 100644
--- a/study-manager/src/test/java/com/mortals/httpclient/http-client.env.json
+++ b/study-manager/src/test/java/com/mortals/httpclient/http-client.env.json
@@ -14,5 +14,9 @@
   "portal": {
     "baseUrl": "http://192.168.0.98:11072/zwfw",
     "baseLogin": "http://192.168.0.98:11078/base"
+  },
+
+  "prod": {
+    "baseUrl": "http://125.64.74.247:11089/study"
   }
 }
\ No newline at end of file
-- 
2.24.3