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