mitao
2025-04-14 0852acae13603be95eaaa0b501f3441508ff3fe5
大屏统计修改
7个文件已修改
117 ■■■■ 已修改文件
medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwBoxServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>