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()); } } 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); } 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(); 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; } 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); } 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; } 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>