From 48de12e1635b99d593048398af45d186c8f39234 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期二, 29 七月 2025 11:10:42 +0800
Subject: [PATCH] 危化品简化版修改

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java |   99 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 85 insertions(+), 14 deletions(-)

diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
index ebdd109..790e53d 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzStatisticServiceImpl.java
@@ -19,6 +19,8 @@
 import com.gkhy.hazmat.common.utils.SecurityUtils;
 import com.gkhy.hazmat.common.utils.StringUtils;
 import com.gkhy.hazmat.system.domain.*;
+import com.gkhy.hazmat.system.domain.dto.HazmatUseStatisticDTO;
+import com.gkhy.hazmat.system.domain.vo.HzCompanyMessage;
 import com.gkhy.hazmat.system.domain.vo.HzEntryRecordVO;
 import com.gkhy.hazmat.system.domain.vo.HzHazmatUseVO;
 import com.gkhy.hazmat.system.domain.vo.HzHomeDataVO;
@@ -195,31 +197,31 @@
 
 
     @Override
-    public CommonPage useStatic(String startTime, String endTime,Long companyId) {
+    public CommonPage useStatic(HazmatUseStatisticDTO useStatisticDTO) {
         SysUser currentUser= SecurityUtils.getLoginUser().getUser();
         checkUserAllowed(currentUser);
 
         String startDate="";
         String endDate="";
-        if(StringUtils.isBlank(startTime)&&StringUtils.isBlank(endTime)){
+        if(StringUtils.isBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
             Date currentDate=new Date();
             startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(currentDate), -6)), DatePattern.NORM_DATETIME_FORMAT);
             endDate=DateUtil.format(DateUtil.endOfDay(currentDate),DatePattern.NORM_DATETIME_FORMAT);
-        } else if (StringUtils.isBlank(startTime)&&StringUtils.isNotBlank(endTime)) {
-            startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(endTime)), -6)), DatePattern.NORM_DATETIME_FORMAT);
-            endDate=endTime;
-        }else if (StringUtils.isNotBlank(startTime)&&StringUtils.isBlank(endTime)){
-            startDate=startTime;
-            endDate=DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(endTime)), 6)), DatePattern.NORM_DATETIME_FORMAT);
+        } else if (StringUtils.isBlank(useStatisticDTO.getStartTime())&&StringUtils.isNotBlank(useStatisticDTO.getEndTime())) {
+            startDate= DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), -6)), DatePattern.NORM_DATETIME_FORMAT);
+            endDate=useStatisticDTO.getEndTime();
+        }else if (StringUtils.isNotBlank(useStatisticDTO.getStartTime())&&StringUtils.isBlank(useStatisticDTO.getEndTime())){
+            startDate=useStatisticDTO.getStartTime();
+            endDate=DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetDay(DateUtil.endOfDay(new Date(useStatisticDTO.getEndTime())), 6)), DatePattern.NORM_DATETIME_FORMAT);
         }else{
-            startDate=startTime;
-            endDate=endTime;
-            if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(startTime), DateUnit.DAY)>90){
+            startDate=useStatisticDTO.getStartTime();
+            endDate=useStatisticDTO.getEndTime();
+            if(DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(useStatisticDTO.getStartTime()), DateUnit.DAY)>90){
                 throw new ApiException("只能查询90天以内数据");
             }
         }
         if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
-            IdTableNameHandler.setCurrentId(companyId);
+            IdTableNameHandler.setCurrentId(useStatisticDTO.getCompanyId());
 
         }else {
             //设置分表id
@@ -227,7 +229,10 @@
             IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
         }
         PageUtils.startPage();
-        List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(startDate, endDate,currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
+        if (!currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+            useStatisticDTO.setCompanyId(currentUser.getCompanyId());
+        }
+        List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(useStatisticDTO);
         IdTableNameHandler.removeCurrentId();
         if(!hazmatUseVOList.isEmpty()) {
             List<Long> basicIds = hazmatUseVOList.stream().map(HzHazmatUseVO::getBasicId).collect(Collectors.toList());
@@ -272,7 +277,11 @@
             //设置分表id
             IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
 //            PageUtils.startPage();
-            List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(startDate, endDate,currentUser.getCompanyId());
+            HazmatUseStatisticDTO hazmatUseStatisticDTO = new HazmatUseStatisticDTO();
+            hazmatUseStatisticDTO.setStartTime(startDate);
+            hazmatUseStatisticDTO.setEndTime(endDate);
+            hazmatUseStatisticDTO.setCompanyId(currentUser.getCompanyId());
+            List<HzHazmatUseVO> hazmatUseVOList= hazmatMapper.useCountStatic(hazmatUseStatisticDTO);
             IdTableNameHandler.removeCurrentId();
             List<HazmatBasicUseExcelData> hazmatBasicUseExcelDatas = new ArrayList<>();
             if(!hazmatUseVOList.isEmpty()) {
@@ -315,6 +324,68 @@
 
     }
 
+
+    @Override
+    public List<HzEntryRecordVO> dayUseStatistic(Long companyId) {
+        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(currentUser);
+        Date currentDate = new Date();
+
+        // 设置当天的8点作为开始时间,20点作为结束时间
+        DateTime beginOfDay = DateUtil.beginOfDay(currentDate); // 当天零点
+
+        // 从零点偏移8小时得到8点,偏移20小时得到20点
+        DateTime startTime = DateUtil.offsetHour(beginOfDay, 8); // 08:00:00
+        DateTime endTime = DateUtil.offsetHour(beginOfDay, 21); // 20:00:00
+
+        String startDate = DateUtil.format(startTime, DatePattern.NORM_DATETIME_FORMAT);
+        String endDate = DateUtil.format(endTime, DatePattern.NORM_DATETIME_FORMAT);
+
+        // 设置分表ID逻辑
+        if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())) {
+        IdTableNameHandler.setCurrentId(companyId);
+        } else {
+            IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+        }
+
+        // 生成每小时的统计列表,初始count为0
+        List<HzEntryRecordVO> hourEntryList = new ArrayList<>();
+        DateTime currentHour = startTime;
+        Integer i = hazmatMapper.countTotal(currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId());
+        while (currentHour.isBefore(endTime)) { // 从8点开始到20点前,共12个小时
+            String hour = DateUtil.format(currentHour, "HH"); // 两位小时格式,如08,09,...,19
+            HzEntryRecordVO entryRecordVO = new HzEntryRecordVO();
+            entryRecordVO.setHour(hour);
+            entryRecordVO.setCount(0);
+            entryRecordVO.setTotalCount(i);
+            hourEntryList.add(entryRecordVO);
+            currentHour = DateUtil.offsetHour(currentHour, 1); // 增加一小时
+        }
+        // 查询数据库,按小时统计使用量
+        List<HzEntryRecordVO> entryRecordVOList = hazmatMapper.useCountHourlyStatic(startDate, endDate, currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode()) ? companyId:currentUser.getCompanyId()
+        );
+        hourEntryList.get(0).setTotalCount(i);
+        IdTableNameHandler.removeCurrentId();
+        // 将查询结果合并到初始化的每小时列表中
+        if (!entryRecordVOList.isEmpty()) {
+            Map<String, HzEntryRecordVO> resMap = entryRecordVOList.stream()
+                    .collect(Collectors.toMap(HzEntryRecordVO::getHour, item -> item));
+            for (HzEntryRecordVO hourEntry : hourEntryList) {
+                HzEntryRecordVO matched = resMap.get(hourEntry.getHour());
+                if (matched != null) {
+                    hourEntry.setCount(matched.getCount());
+                }
+            }
+        }
+        return hourEntryList;
+    }
+
+    @Override
+    public List<HzCompanyMessage> companyMessage(Long type) {
+        return hazmatMapper.companyMessage(type);
+    }
+
+
     private void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
         //设置内容类型
         response.setContentType("application/vnd.vnd.ms-excel");

--
Gitblit v1.9.2