From 0852acae13603be95eaaa0b501f3441508ff3fe5 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 14 四月 2025 09:52:12 +0800
Subject: [PATCH] 大屏统计修改

---
 medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml                         |   29 ++++++++------
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java                  |    8 ++++
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java       |    6 +++
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java                      |   14 +++---
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java |    4 +-
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java                  |    6 +-
 medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java                                |   50 +++++++++++++++++++++++++
 7 files changed, 92 insertions(+), 25 deletions(-)

diff --git a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
index 92a68db..81f2f89 100644
--- a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
+++ b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
@@ -415,4 +415,54 @@
         return Date.from(firstDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
     }
 
+    /**
+     * 获取最近N天所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @param days 天数
+     * @return 最近N天所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfLastNDays(String format, int days) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        
+        // 获取N天前的日期
+        LocalDate startDate = now.minusDays(days - 1);
+        
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+        
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+        
+        // 从N天前到今天循环
+        LocalDate currentDate = startDate;
+        while (!currentDate.isAfter(now)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+        
+        return dates;
+    }
+    
+    /**
+     * 获取N天前的0点时间,并返回 Date 类型
+     *
+     * @param days 天数
+     * @return N天前的0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfLastNDaysAtMidnight(int days) {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+        
+        // 获取N天前的日期
+        LocalDate nDaysAgo = now.minusDays(days - 1);
+        
+        // 将该天与0点时间合并
+        LocalDateTime startDayAtMidnight = nDaysAgo.atTime(LocalTime.MIDNIGHT);
+        
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(startDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
index a1efa0c..265573e 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
@@ -88,4 +88,12 @@
 
     DisposalRecordStaticsVO getDisposalData(@Param("query") MwDisposalRecordQuery query,
             @Param("treeCode") String treeCode);
+
+    /**
+     * 根据接收记录id查询处置记录数据
+     *
+     * @param id
+     * @return
+     */
+    MwDisposalRecordVO getDisposalDataById(Long id);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
index d4c1a32..405659c 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
@@ -160,7 +160,7 @@
     /**
      * 各类型医废收集总量
      *
-     * @param type
+     * @param type 1-按周统计(最近7天),2-按月统计(最近30天)
      * @return
      */
     public TotalCollectWeightByTypeVO totalCollectWeightByType(Integer type) {
@@ -169,13 +169,13 @@
         Date startTime = DateUtils.getNowDate();
         Date endTime = DateUtils.getNowDate();
         if (type.equals(1)) {
-            //获取最本周的日期
-            vo.setDateList(DateUtils.getAllDatesOfCurrentWeek("MM-dd"));
-            startTime = DateUtils.getFirstDayOfCurrentWeekAtMidnight();
+            //按周统计,统计最近7天的数据
+            vo.setDateList(DateUtils.getAllDatesOfLastNDays("MM-dd", 7));
+            startTime = DateUtils.getFirstDayOfLastNDaysAtMidnight(7);
         } else {
-            //最近一个月的日期
-            vo.setDateList(DateUtils.getAllDatesOfCurrentMonth("MM-dd"));
-            startTime = DateUtils.getFirstDayOfCurrentMonthAtMidnight();
+            //按月统计,统计最近30天的数据
+            vo.setDateList(DateUtils.getAllDatesOfLastNDays("MM-dd", 30));
+            startTime = DateUtils.getFirstDayOfLastNDaysAtMidnight(30);
         }
         //查询医废类型
         List<SysDictDataVO> medicalWasteTypeList = sysDictDataService.medicalWasteTypeList();
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
index f1d2f46..73a5847 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java
@@ -48,9 +48,9 @@
             boxStatisticsVO.setTotal(boxList.size());
             boxStatisticsVO.setBrokenCount(boxList.stream().filter(box -> BoxStatusEnum.BROKEN.getCode().equals(box.getStatus())).count());
             boxStatisticsVO.setLostCount(boxList.stream().filter(box -> BoxStatusEnum.LOST.getCode().equals(box.getStatus())).count());
-            boxStatisticsVO.setDisposeCount(boxList.stream().filter(box -> BoxProcessEnum.DISPOSAL.getCode().equals(box.getStatus())).count());
-            boxStatisticsVO.setHospitalUsingCount(boxList.stream().filter(box -> BoxProcessEnum.HOSPITAL_USING.getCode().equals(box.getStatus())).count());
-            boxStatisticsVO.setTransitingCount(boxList.stream().filter(box -> BoxProcessEnum.TRANSITING.getCode().equals(box.getStatus())).count());
+            boxStatisticsVO.setDisposeCount(boxList.stream().filter(box -> BoxProcessEnum.DISPOSAL.getCode().equals(box.getLink())).count());
+            boxStatisticsVO.setHospitalUsingCount(boxList.stream().filter(box -> BoxProcessEnum.HOSPITAL_USING.getCode().equals(box.getLink())).count());
+            boxStatisticsVO.setTransitingCount(boxList.stream().filter(box -> BoxProcessEnum.TRANSITING.getCode().equals(box.getLink())).count());
         }
         return boxStatisticsVO;
     }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
index 5ebbd61..d2ad543 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
@@ -71,6 +71,12 @@
             return PageDTO.empty(0L, 0L);
         }
         Page<MwDisposalRecordVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
+        page.getRecords().forEach(item -> {
+            Long id = item.getId();
+            MwDisposalRecordVO vo = baseMapper.getDisposalDataById(id);
+            item.setTotalHandledQuantity(vo.getTotalHandledQuantity());
+            item.setTotalHandledWeight(vo.getTotalHandledWeight());
+        });
         return PageDTO.of(page);
     }
 
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
index e4f44e0..55e7046 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
@@ -371,10 +371,10 @@
         String finalTitle = title;
         medicalWasteTypeList.forEach(item -> {
             headTitles.add(Lists.newArrayList(finalTitle, item.getDictLabel(), "数量"));
-            headTitles.add(Lists.newArrayList(finalTitle, item.getDictLabel(), "重量(kg)"));
+            headTitles.add(Lists.newArrayList(finalTitle, item.getDictLabel(), "总重量(kg)"));
         });
         headTitles.add(Lists.newArrayList(title, "小计", "数量"));
-        headTitles.add(Lists.newArrayList(title, "小计", "重量(kg)"));
+        headTitles.add(Lists.newArrayList(title, "小计", "总重量(kg)"));
         return headTitles;
     }
 
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
index d29252b..b5a25b2 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
@@ -35,14 +35,12 @@
         ID, DEPARTMENT_ID, DISPOSAL_UNIT_NAME, RECEIVE_QUANTITY, RECEIVE_TIME, RECEIVE_WEIGHT, RECEIVER_ID, UNLOAD_QUANTITY, UNLOAD_WEIGHT, TOTAL_HANDLED_QUANTITY, DISPOSAL_FLAG, TOTAL_HANDLED_WEIGHT, DISPOSAL_TIME, DISPOSAL_USER_ID
     </sql>
     <select id="getStaticsData" resultType="com.sinata.system.domain.vo.DisposalRecordStaticsVO">
-        SELECT COALESCE(SUM(MDR.RECEIVE_QUANTITY),0) AS receiveQuantity,
-        COALESCE(SUM(MDR.RECEIVE_WEIGHT),0) AS receiveWeight,
-        COALESCE(SUM(MDR.RECEIVE_QUANTITY),0) AS unloadQuantity,
-        COALESCE(SUM(MDR.RECEIVE_WEIGHT),0) AS unloadWeight
+        SELECT COALESCE(SUM(MDR.RECEIVE_QUANTITY), 0) AS receiveQuantity,
+        COALESCE(SUM(MDR.RECEIVE_WEIGHT), 0) AS receiveWeight,
+        COALESCE(SUM(MDR.RECEIVE_QUANTITY), 0) AS unloadQuantity,
+        COALESCE(SUM(MDR.RECEIVE_WEIGHT), 0) AS unloadWeight
         FROM MW_DISPOSAL_RECORD MDR
         LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
-        LEFT JOIN MW_DISPOSAL_HANDLE_RECORD_ITEM MDHRI ON MDHRI.DISPOSAL_RECORD_ID = MDR.ID
-        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHRI.DISPOSAL_HANDLE_RECORD_ID
         <where>
             MDR.DEL_FLAG = 0
             <if test="treeCode != null and treeCode !=''">
@@ -70,13 +68,9 @@
         MDR.CREATE_BY,
         MDR.CREATE_TIME,
         MDR.UPDATE_BY,
-        MDR.UPDATE_TIME,
-        COALESCE(SUM(MCR.WEIGHT),0) AS totalHandledWeight,
-        COALESCE(COUNT(DISTINCT MCR.BOX_NUMBER),0)AS totalHandledQuantity
+        MDR.UPDATE_TIME
         FROM MW_DISPOSAL_RECORD MDR
         LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
-        LEFT JOIN MW_DISPOSAL_HANDLE_RECORD_ITEM MDHRI ON MDHRI.DISPOSAL_RECORD_ID = MDR.ID
-        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.ID = MDHRI.COLLECT_RECORD_ID
         <where>
             MDR.DEL_FLAG = 0
             <if test="treeCode != null and treeCode !=''">
@@ -86,7 +80,6 @@
                 AND MDR.RECEIVE_TIME BETWEEN #{query.receiveTimeStart} AND #{query.receiveTimeEnd}
             </if>
         </where>
-        GROUP BY MDR.ID
         ORDER BY MDR.RECEIVE_TIME DESC
     </select>
     <select id="pageDetail" resultType="com.sinata.system.domain.vo.MwDisposalRecordItemVO">
@@ -185,7 +178,7 @@
       resultType="com.sinata.system.domain.vo.DisposalRecordStaticsVO">
         SELECT
         COALESCE(SUM(MCR.WEIGHT),0) AS totalHandledWeight,
-        COALESCE(COUNT(DISTINCT MCR.BOX_NUMBER),0) AS totalHandledQuantity
+        COALESCE(COUNT(MCR.BOX_NUMBER),0) AS totalHandledQuantity
         FROM MW_DISPOSAL_HANDLE_RECORD_ITEM MDHRI
         LEFT JOIN MW_DISPOSAL_RECORD MDR ON MDR.ID = MDHRI.DISPOSAL_RECORD_ID
         LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.ID = MDHRI.COLLECT_RECORD_ID
@@ -200,5 +193,15 @@
             </if>
         </where>
     </select>
+    <select id="getDisposalDataById" resultType="com.sinata.system.domain.vo.MwDisposalRecordVO"
+            parameterType="java.lang.Long">
+        SELECT COALESCE(SUM(MCR.WEIGHT), 0)                AS totalHandledWeight,
+               COALESCE(COUNT(DISTINCT MCR.BOX_NUMBER), 0) AS totalHandledQuantity
+        FROM MW_DISPOSAL_HANDLE_RECORD MDHR
+                 LEFT JOIN MW_DISPOSAL_HANDLE_RECORD_ITEM MDHRI ON MDHR.ID = MDHRI.DISPOSAL_HANDLE_RECORD_ID
+                 LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDHRI.COLLECT_RECORD_ID = MDRI.COLLECT_RECORD_ID
+                 LEFT JOIN MW_COLLECT_RECORD MCR ON MDHRI.COLLECT_RECORD_ID = MCR.ID
+        WHERE MDRI.DISPOSAL_RECORD_ID = #{id}
+    </select>
 
 </mapper>

--
Gitblit v1.7.1