From 5c9cd9bc96923f909c20748ff33f94cea17400da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <8153694@qq.com>
Date: Mon, 24 Jun 2024 17:03:15 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=92=E5=8F=B7=E4=B8=8E?=
 =?UTF-8?q?=E8=AF=84=E4=BB=B7=E7=BB=9F=E8=AE=A1=E6=8A=A5=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../impl/PjEvaluateStatServiceImpl.java       |  94 ++++++++++++++++
 .../pj/web/PjEvaluateStatController.java      | 103 ++++++++++++++++--
 2 files changed, 187 insertions(+), 10 deletions(-)

diff --git a/bill-manager/src/main/java/com/mortals/xhx/module/pj/service/impl/PjEvaluateStatServiceImpl.java b/bill-manager/src/main/java/com/mortals/xhx/module/pj/service/impl/PjEvaluateStatServiceImpl.java
index 23200d7..7f61797 100644
--- a/bill-manager/src/main/java/com/mortals/xhx/module/pj/service/impl/PjEvaluateStatServiceImpl.java
+++ b/bill-manager/src/main/java/com/mortals/xhx/module/pj/service/impl/PjEvaluateStatServiceImpl.java
@@ -60,12 +60,18 @@ public class PjEvaluateStatServiceImpl extends AbstractCRUDServiceImpl<PjEvaluat
 
         updateSiteSectionNamePjCount(currentDate, entity, pjEvaluateEntities);
 
+        updateSiteHallPjCount(currentDate, entity, pjEvaluateEntities);
+
         updateSiteWindowPjCount(currentDate, entity, pjEvaluateEntities);
 
+        updateSiteOptionPjCount(currentDate, entity, pjEvaluateEntities);
+
         return Rest.ok();
     }
 
     private void updateSitePjCount(PjEvaluateStatEntity entity, List<PjEvaluateEntity> pjEvaluateEntities) {
+        if (ObjectUtils.isEmpty(entity.getSiteId())) return;
+        if (0L >= entity.getSiteId()) return;
         PjEvaluateStatEntity pjEvaluateStatEntity = this.selectOne(new PjEvaluateStatQuery()
                 .siteId(entity.getSiteId())
                 .year(entity.getYear())
@@ -102,6 +108,7 @@ public class PjEvaluateStatServiceImpl extends AbstractCRUDServiceImpl<PjEvaluat
         Map<String, Long> collect = pjEvaluateEntities.stream().collect(Collectors.groupingBy(x -> x.getSectionName(), Collectors.counting()));
         collect.entrySet().stream().forEach(item -> {
             String sectionName = item.getKey();
+            if (ObjectUtils.isEmpty(sectionName)) return;
             Long value = item.getValue();
             log.info("鏇存柊绔欑偣璇勪环缁熻鏁版嵁锛岀珯鐐瑰悕绉帮細{}锛屾棩鏈燂細{}锛岄儴闂細{}锛岃瘎浠锋暟閲忥細{}", entity.getSiteName(), currentDate, entity.getSectionName(), pjEvaluateEntities.size());
             PjEvaluateStatEntity pjEvaluateStatEntity = this.selectOne(new PjEvaluateStatQuery()
@@ -138,11 +145,56 @@ public class PjEvaluateStatServiceImpl extends AbstractCRUDServiceImpl<PjEvaluat
     }
 
 
+    private void updateSiteHallPjCount(String currentDate, PjEvaluateStatEntity entity, List<PjEvaluateEntity> pjEvaluateEntities) {
+
+        Map<String, Long> collect = pjEvaluateEntities.stream().collect(Collectors.groupingBy(x -> x.getHallName(), Collectors.counting()));
+        collect.entrySet().stream().forEach(item -> {
+            String hallName = item.getKey();
+
+            if (ObjectUtils.isEmpty(hallName)) return;
+
+            Long value = item.getValue();
+            log.info("鏇存柊绔欑偣璇勪环缁熻鏁版嵁锛岀珯鐐瑰悕绉帮細{}锛屾棩鏈燂細{}锛岄儴闂細{}锛岃瘎浠锋暟閲忥細{}", entity.getSiteName(), currentDate, entity.getSectionName(), pjEvaluateEntities.size());
+            PjEvaluateStatEntity pjEvaluateStatEntity = this.selectOne(new PjEvaluateStatQuery()
+                    .siteId(entity.getSiteId())
+                    .hallName(hallName)
+                    .year(entity.getYear())
+                    .month(entity.getMonth())
+                    .day(entity.getDay()));
+            if (ObjectUtils.isEmpty(pjEvaluateStatEntity)) {
+                //缁熻褰撳墠绔欑偣鏂板鎵€鏈夎瘎浠锋暟閲�
+                pjEvaluateStatEntity = new PjEvaluateStatEntity();
+                pjEvaluateStatEntity.initAttrValue();
+                pjEvaluateStatEntity.setSiteId(entity.getSiteId());
+                pjEvaluateStatEntity.setSiteCode(entity.getSiteCode());
+                pjEvaluateStatEntity.setSiteName(entity.getSiteName());
+                pjEvaluateStatEntity.setHallName(hallName);
+                pjEvaluateStatEntity.setPjCount(value.intValue());
+                pjEvaluateStatEntity.setYear(entity.getYear());
+                pjEvaluateStatEntity.setMonth(entity.getMonth());
+                pjEvaluateStatEntity.setDay(entity.getDay());
+                pjEvaluateStatEntity.setCreateTime(new Date());
+                pjEvaluateStatEntity.setCreateUserId(1L);
+                this.save(pjEvaluateStatEntity);
+            } else {
+                pjEvaluateStatEntity.setPjCount(value.intValue());
+                pjEvaluateStatEntity.setYear(entity.getYear());
+                pjEvaluateStatEntity.setMonth(entity.getMonth());
+                pjEvaluateStatEntity.setDay(entity.getDay());
+                pjEvaluateStatEntity.setUpdateTime(new Date());
+                pjEvaluateStatEntity.setUpdateUserId(1L);
+                this.update(pjEvaluateStatEntity);
+            }
+        });
+    }
+
+
     private void updateSiteWindowPjCount(String currentDate, PjEvaluateStatEntity entity, List<PjEvaluateEntity> pjEvaluateEntities) {
 
         Map<String, Long> collect = pjEvaluateEntities.stream().collect(Collectors.groupingBy(x -> x.getWindowFromnum(), Collectors.counting()));
         collect.entrySet().stream().forEach(item -> {
             String windowFromnum = item.getKey();
+            if (ObjectUtils.isEmpty(windowFromnum)) return;
             Long value = item.getValue();
             log.info("鏇存柊绔欑偣璇勪环缁熻鏁版嵁锛岀珯鐐瑰悕绉帮細{}锛屾棩鏈燂細{}锛岀獥鍙o細{}锛岃瘎浠锋暟閲忥細{}", entity.getSiteName(), currentDate, entity.getWindowFromnum(), pjEvaluateEntities.size());
             PjEvaluateStatEntity pjEvaluateStatEntity = this.selectOne(new PjEvaluateStatQuery()
@@ -177,4 +229,46 @@ public class PjEvaluateStatServiceImpl extends AbstractCRUDServiceImpl<PjEvaluat
             }
         });
     }
+
+
+    private void updateSiteOptionPjCount(String currentDate, PjEvaluateStatEntity entity, List<PjEvaluateEntity> pjEvaluateEntities) {
+
+        Map<String, Long> collect = pjEvaluateEntities.stream().collect(Collectors.groupingBy(x -> x.getPjOption(), Collectors.counting()));
+        collect.entrySet().stream().forEach(item -> {
+            String pjOption = item.getKey();
+            if (ObjectUtils.isEmpty(pjOption)) return;
+            Long value = item.getValue();
+            log.info("鏇存柊绔欑偣璇勪环缁熻鏁版嵁锛岀珯鐐瑰悕绉帮細{}锛屾棩鏈燂細{}锛岀獥鍙o細{}锛岃瘎浠锋暟閲忥細{}", entity.getSiteName(), currentDate, entity.getWindowFromnum(), pjEvaluateEntities.size());
+            PjEvaluateStatEntity pjEvaluateStatEntity = this.selectOne(new PjEvaluateStatQuery()
+                    .siteId(entity.getSiteId())
+                    .pjOption(pjOption)
+                    .year(entity.getYear())
+                    .month(entity.getMonth())
+                    .day(entity.getDay()));
+            if (ObjectUtils.isEmpty(pjEvaluateStatEntity)) {
+                //缁熻褰撳墠绔欑偣鏂板鎵€鏈夎瘎浠锋暟閲�
+                pjEvaluateStatEntity = new PjEvaluateStatEntity();
+                pjEvaluateStatEntity.initAttrValue();
+                pjEvaluateStatEntity.setSiteId(entity.getSiteId());
+                pjEvaluateStatEntity.setSiteCode(entity.getSiteCode());
+                pjEvaluateStatEntity.setSiteName(entity.getSiteName());
+                pjEvaluateStatEntity.setPjOption(pjOption);
+                pjEvaluateStatEntity.setPjCount(value.intValue());
+                pjEvaluateStatEntity.setYear(entity.getYear());
+                pjEvaluateStatEntity.setMonth(entity.getMonth());
+                pjEvaluateStatEntity.setDay(entity.getDay());
+                pjEvaluateStatEntity.setCreateTime(new Date());
+                pjEvaluateStatEntity.setCreateUserId(1L);
+                this.save(pjEvaluateStatEntity);
+            } else {
+                pjEvaluateStatEntity.setPjCount(value.intValue());
+                pjEvaluateStatEntity.setYear(entity.getYear());
+                pjEvaluateStatEntity.setMonth(entity.getMonth());
+                pjEvaluateStatEntity.setDay(entity.getDay());
+                pjEvaluateStatEntity.setUpdateTime(new Date());
+                pjEvaluateStatEntity.setUpdateUserId(1L);
+                this.update(pjEvaluateStatEntity);
+            }
+        });
+    }
 }
\ No newline at end of file
diff --git a/bill-manager/src/main/java/com/mortals/xhx/module/pj/web/PjEvaluateStatController.java b/bill-manager/src/main/java/com/mortals/xhx/module/pj/web/PjEvaluateStatController.java
index c65da09..5abaf25 100644
--- a/bill-manager/src/main/java/com/mortals/xhx/module/pj/web/PjEvaluateStatController.java
+++ b/bill-manager/src/main/java/com/mortals/xhx/module/pj/web/PjEvaluateStatController.java
@@ -1,51 +1,134 @@
 package com.mortals.xhx.module.pj.web;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.mortals.framework.annotation.UnAuth;
+import com.mortals.framework.common.Rest;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.common.pdu.RespData;
+import com.mortals.xhx.common.pdu.site.SitePdu;
+import com.mortals.xhx.feign.site.ISiteFeign;
+import com.mortals.xhx.module.pj.model.PjEvaluateEntity;
+import com.mortals.xhx.module.pj.model.PjEvaluateQuery;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StopWatch;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.*;
 import com.mortals.framework.model.Context;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.module.pj.model.PjEvaluateStatEntity;
 import com.mortals.xhx.module.pj.service.PjEvaluateStatService;
 import org.apache.commons.lang3.ArrayUtils;
 import com.mortals.framework.util.StringUtils;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+
 import com.alibaba.fastjson.JSONObject;
+
 import java.util.Arrays;
+
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+
 import static com.mortals.framework.ap.SysConstains.*;
+
 import com.mortals.xhx.common.code.*;
+
 /**
-*
-* 璇勪环姹囨€荤粺璁�
-*
-* @author zxfei
-* @date 2024-06-24
-*/
+ * 璇勪环姹囨€荤粺璁�
+ *
+ * @author zxfei
+ * @date 2024-06-24
+ */
 @RestController
 @RequestMapping("pj/evaluate/stat")
-public class PjEvaluateStatController extends BaseCRUDJsonBodyMappingController<PjEvaluateStatService,PjEvaluateStatEntity,Long> {
+@Slf4j
+public class PjEvaluateStatController extends BaseCRUDJsonBodyMappingController<PjEvaluateStatService, PjEvaluateStatEntity, Long> {
 
     @Autowired
     private ParamService paramService;
 
-    public PjEvaluateStatController(){
-        super.setModuleDesc( "璇勪环姹囨€荤粺璁�");
+    @Autowired
+    private ISiteFeign siteFeign;
+
+    public PjEvaluateStatController() {
+        super.setModuleDesc("璇勪环姹囨€荤粺璁�");
     }
 
     @Override
     protected void init(Map<String, Object> model, Context context) {
-                this.addDict(model, "pjOption", PjOptionEnum.getEnumMap());
+        this.addDict(model, "pjOption", PjOptionEnum.getEnumMap());
         super.init(model, context);
     }
 
 
+    @PostMapping(value = "/pjstat")
+    @UnAuth
+    public Rest<String> addAttendanceRecordCustom(@RequestBody PjEvaluateQuery pjEvaluateQuery) {
+        Rest<String> ret = new Rest();
+        Map<String, Object> model = new HashMap();
+        Context context = this.getContext();
+        String busiDesc = "鏌ヨ" + this.getModuleDesc();
+        int code = 1;
+        try {
+            //澶╂暟鍖洪棿鍒嗘璁$畻
+            DateTime attendStart = DateUtil.parseDate(pjEvaluateQuery.getPjTimeStart());
+            DateTime attendEnd = DateUtil.parseDate(pjEvaluateQuery.getPjTimeEnd());
+            Long compare = DateUtil.between(attendEnd, attendStart, DateUnit.DAY);
+            StopWatch stopWatch = new StopWatch("stopwatch");
+            log.info("璁$畻澶╂暟鍖洪棿锛歿}", compare);
+            for (int i = 0; i <= compare.intValue(); i++) {
+                DateTime curDate = DateUtil.offsetDay(attendStart, i);
+                log.info("璁板綍鏃ユ湡锛歿}", curDate.toDateStr());
+                stopWatch.start("鎵ц鏈湴鏂规硶");
+                SitePdu sitePdu = new SitePdu();
+                sitePdu.setSize(-1);
+                Rest<RespData<List<SitePdu>>> resp = siteFeign.list(sitePdu);
+                if (resp.getCode() == 1) {
+                    List<SitePdu> sitePduList = resp.getData().getData();
+                    sitePduList.stream().forEach(site -> {
+                        PjEvaluateStatEntity sitestatEntity = new PjEvaluateStatEntity();
+                        sitestatEntity.initAttrValue();
+                        sitestatEntity.setSiteId(site.getId());
+                        sitestatEntity.setSiteName(site.getSiteName());
+                        sitestatEntity.setSiteCode(site.getSiteCode());
+
+                        sitestatEntity.setYear(curDate.year());
+                        sitestatEntity.setMonth(curDate.month() + 1);
+                        sitestatEntity.setDay(curDate.dayOfMonth());
+                        //璁剧疆骞存湀鏃�
+                        this.service.updateSitePjStat(sitestatEntity, context);
+                    });
+                }
+
+                stopWatch.stop();
+                log.info("鏃ユ湡锛歿} 瀹屾垚,鑰楁椂锛歿}ms", curDate.toDateStr(), stopWatch.getLastTaskTimeMillis());
+            }
+            model.put("message_info", busiDesc + "鎴愬姛");
+            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+        } catch (Exception e) {
+            code = -1;
+            this.doException(this.request, busiDesc, model, e);
+            model.put("message_info", e.getMessage());
+        }
+
+        this.init(model, context);
+        ret.setCode(code);
+        ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
+        return ret;
+
+    }
+
+
 }
\ No newline at end of file
-- 
2.24.3