luoyisheng
2025-04-07 1ce91b7aa003c37b3ec531111ceb095165cb1038
Merge remote-tracking branch 'origin/master'
9个文件已修改
226 ■■■■■ 已修改文件
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/DepartmentReportItemVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwTransitRecordVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/ISysDictDataService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDictDataServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/MwCheckoutRecordMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/DepartmentReportItemVO.java
@@ -25,6 +25,9 @@
    @ApiModelProperty("机构人员签字")
    private String hospitalSignature;
    @ApiModelProperty("医院签名URL")
    private String hospitalSignatureUrl;
    @ApiModelProperty("运输人员签字")
    private String driverName;
medicalWaste-system/src/main/java/com/sinata/system/domain/vo/MwTransitRecordVO.java
@@ -16,6 +16,8 @@
@Data
@ApiModel("运输记录视图对象")
public class MwTransitRecordVO {
    @ApiModelProperty("唯一标识")
    private Long uniqueId;
    @ApiModelProperty("路线id")
    private Long id;
medicalWaste-system/src/main/java/com/sinata/system/service/ISysDictDataService.java
@@ -81,6 +81,13 @@
    List<SysDictDataVO> medicalWasteTypeList();
    /**
     * 医废类型列表
     *
     * @return
     */
    List<SysDictDataVO> medicalWasteTypeListByDictCode(List<Long> wasteTypeCodeList);
    /**
     * 器具类型列表
     *
     * @return
medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
@@ -3,9 +3,9 @@
import cn.idev.excel.FastExcel;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists;
import com.sinata.common.core.domain.entity.SysDictData;
import com.sinata.common.utils.CollUtils;
import com.sinata.common.utils.DateUtils;
import com.sinata.common.utils.StringUtils;
import com.sinata.system.config.AutoColumnWidthStrategy;
import com.sinata.system.domain.MwCollectRecord;
import com.sinata.system.domain.MwWarningRecord;
@@ -115,13 +115,19 @@
                BigDecimal currentCount = BigDecimal.ZERO;
                if (query.getReportType().equals(1)) {
                    weight = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
                            && finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecord::getWeight).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP);
                    long count = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date)).count();
                                    && finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecord::getWeight)
                            .reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP);
                    long count = collectRecordList.stream()
                            .filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date))
                            .count();
                    currentCount = BigDecimal.valueOf(count);
                } else {
                    weight = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
                            && finalSdf.format(e.getCheckoutTime()).equals(date)).map(MwCollectRecord::getWeight).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP);
                    long count = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCheckoutTime()).equals(date)).count();
                                    && finalSdf.format(e.getCheckoutTime()).equals(date)).map(MwCollectRecord::getWeight)
                            .reduce(BigDecimal::add).orElse(BigDecimal.ZERO).setScale(2, RoundingMode.HALF_UP);
                    long count = collectRecordList.stream()
                            .filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCheckoutTime()).equals(date))
                            .count();
                    currentCount = BigDecimal.valueOf(count);
                }
                itemVO.getData().add(currentCount);
@@ -134,7 +140,8 @@
            //查询预警记录判断是否超时
            if (query.getDateType().equals(1)) {
                itemVO.setOverTimeFlag("否");
                List<Long> collectIdList = collectRecordList.stream().filter(e -> finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecord::getId).collect(Collectors.toList());
                List<Long> collectIdList = collectRecordList.stream().filter(e -> finalSdf.format(e.getCollectTime()).equals(date))
                        .map(MwCollectRecord::getId).collect(Collectors.toList());
                if (CollUtils.isNotEmpty(collectIdList)) {
                    List<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().in(MwWarningRecord::getWarningTargetId, collectIdList).list();
                    if (CollUtils.isNotEmpty(warningRecordList)) {
@@ -284,10 +291,9 @@
        //List<SysDepartment> hospitalList = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, region.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
        List<TransformVO> checkoutRecordVOList = mwCheckoutRecordService.getCheckoutRecordList(query, region.getTreeCode());
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList())
                .orderByDesc(SysDictData::getDictCode).list();
        if (CollUtils.isNotEmpty(wasteTypeList)) {
            vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()));
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(query.getWasteTypeCodeList());
        if (CollUtils.isNotEmpty(sysDictDataVOS)) {
            vo.setLegend(sysDictDataVOS.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList()));
            vo.getLegend().add("小计");
            List<DepartmentReportItemVO> list = new ArrayList<>();
@@ -301,8 +307,9 @@
                departmentReportItemVO.setData(new ArrayList<>());
                departmentReportItemVO.setDriverName(transformVO.getDriverName());
                departmentReportItemVO.setHospitalSignature(ImageToBase64.convertImageToBase64(transformVO.getHospitalSignature()));
                departmentReportItemVO.setHospitalSignatureUrl(transformVO.getHospitalSignature());
                departmentReportItemVO.setHandoverTime(transformVO.getCheckoutTime());
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal count = BigDecimal.valueOf(transformVO.getCollectRecordList().stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode())).count());
                    BigDecimal weight = transformVO.getCollectRecordList().stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode())).map(MwMedicalWasteBoxVO::getTotalWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
                    departmentReportItemVO.getData().add(count);
@@ -322,13 +329,13 @@
                totalRow.setData(new ArrayList<>());
                // 计算各类型废物的总数量和总重量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalTypeCount = BigDecimal.ZERO;
                    BigDecimal totalTypeWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        // 获取当前废物类型在数据列表中的索引位置
                        int index = wasteTypeList.indexOf(sysDictData);
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        // 每个废物类型占两列(数量和重量)
                        int countIndex = index * 2;
                        int weightIndex = countIndex + 1;
@@ -405,7 +412,7 @@
                List<Object> data = new ArrayList<>();
                data.add(departmentReportItemVO.getName());
                data.addAll(departmentReportItemVO.getData());
                data.add(new URL(departmentReportItemVO.getHospitalSignature()));
                data.add(StringUtils.isNotBlank(departmentReportItemVO.getHospitalSignatureUrl()) ? new URL(departmentReportItemVO.getHospitalSignatureUrl()) : "");
                data.add(departmentReportItemVO.getDriverName());
                data.add(departmentReportItemVO.getHandoverTime());
                result.add(data);
@@ -423,11 +430,10 @@
     */
    private List<List<String>> transformReportHead(List<Long> wasteTypeCodeList) {
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList)
                .orderByDesc(SysDictData::getDictCode).list();
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(wasteTypeCodeList);
        List<List<String>> headTitles = Lists.newArrayList();
        headTitles.add(Lists.newArrayList("医院名称", "医院名称"));
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList(item.getDictLabel(), "数量"));
            headTitles.add(Lists.newArrayList(item.getDictLabel(), "重量(KG)"));
        });
@@ -469,10 +475,9 @@
        }
        List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType());
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList())
                .orderByDesc(SysDictData::getDictCode).list();
        if (CollUtils.isNotEmpty(wasteTypeList)) {
            List<String> legend = wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(query.getWasteTypeCodeList());
        if (CollUtils.isNotEmpty(sysDictDataVOS)) {
            List<String> legend = sysDictDataVOS.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList());
            vo.setLegend(legend);
            List<DepartmentReportItemVO> list = new ArrayList<>();
            for (String date : dateList) {
@@ -481,14 +486,14 @@
                departmentReportItemVO.setData(new ArrayList<>());
                SimpleDateFormat finalSdf = sdf;
                //接收
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalWeight = receivedList.stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode()) &&
                                    finalSdf.format(item.getReceiveTime()).equals(date)).map(MwDisposalRecordReportVO::getWeight)
                            .reduce(BigDecimal.ZERO, BigDecimal::add);
                    departmentReportItemVO.getData().add(totalWeight);
                }
                //处置
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalWeight = disposaledList.stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode()) &&
                                    finalSdf.format(item.getDisposalTime()).equals(date)).map(MwDisposalRecordReportVO::getWeight)
                            .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -504,11 +509,11 @@
                totalRow.setData(new ArrayList<>());
                // 计算各类型废物的接收总量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalReceiveWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        int index = wasteTypeList.indexOf(sysDictData);
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        if (index < item.getData().size()) {
                            totalReceiveWeight = totalReceiveWeight.add(item.getData().get(index));
                        }
@@ -518,13 +523,13 @@
                }
                // 计算各类型废物的处置总量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalDisposalWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        int index = wasteTypeList.indexOf(sysDictData);
                        // 处置量数据在接收量数据之后,所以索引需要加上wasteTypeList的大小
                        int disposalIndex = wasteTypeList.size() + index;
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        // 处置量数据在接收量数据之后,所以索引需要加上sysDictDataVOS的大小
                        int disposalIndex = sysDictDataVOS.size() + index;
                        if (disposalIndex < item.getData().size()) {
                            totalDisposalWeight = totalDisposalWeight.add(item.getData().get(disposalIndex));
                        }
@@ -596,14 +601,13 @@
     */
    private List<List<String>> disposalReportHead(List<Long> wasteTypeCodeList) {
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList)
                .orderByDesc(SysDictData::getDictCode).list();
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(wasteTypeCodeList);
        List<List<String>> headTitles = Lists.newArrayList();
        headTitles.add(Lists.newArrayList("日期"));
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList("医疗废物接收量(kg)", item.getDictLabel()));
        });
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel()));
        });
        return headTitles;
@@ -643,10 +647,9 @@
        }
        List<String> dateList = DateUtils.getDayBetween(query.getStartTime(), query.getEndTime(), query.getDateType());
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, query.getWasteTypeCodeList())
                .orderByDesc(SysDictData::getDictCode).list();
        if (CollUtils.isNotEmpty(wasteTypeList)) {
            vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()));
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(query.getWasteTypeCodeList());
        if (CollUtils.isNotEmpty(sysDictDataVOS)) {
            vo.setLegend(sysDictDataVOS.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList()));
            vo.setList(new ArrayList<>());
            List<DepartmentReportItemVO> list = new ArrayList<>();
            for (String date : dateList) {
@@ -654,18 +657,18 @@
                departmentReportItemVO.setName(date);
                departmentReportItemVO.setData(new ArrayList<>());
                SimpleDateFormat finalSdf = sdf;
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal weight = collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) &&
                            finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecordVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
                    departmentReportItemVO.getData().add(weight);
                }
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal weight = checkoutRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) &&
                            finalSdf.format(e.getCheckoutTime()).equals(date)).map(MwCollectRecordVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
                    departmentReportItemVO.getData().add(weight);
                }
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal weight = disposalRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) &&
                            finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecordVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
                    departmentReportItemVO.getData().add(weight);
@@ -680,11 +683,11 @@
                totalRow.setData(new ArrayList<>());
                // 计算各类型废物的产生总量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalGeneratedWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        int index = wasteTypeList.indexOf(sysDictData);
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        if (index < item.getData().size()) {
                            totalGeneratedWeight = totalGeneratedWeight.add(item.getData().get(index));
                        }
@@ -694,13 +697,13 @@
                }
                // 计算各类型废物的转移总量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalTransferWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        int index = wasteTypeList.indexOf(sysDictData);
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        // 转移量数据在产生量数据之后,所以索引需要加上wasteTypeList的大小
                        int transferIndex = wasteTypeList.size() + index;
                        int transferIndex = sysDictDataVOS.size() + index;
                        if (transferIndex < item.getData().size()) {
                            totalTransferWeight = totalTransferWeight.add(item.getData().get(transferIndex));
                        }
@@ -710,13 +713,13 @@
                }
                // 计算各类型废物的处置总量
                for (SysDictData sysDictData : wasteTypeList) {
                for (SysDictDataVO sysDictData : sysDictDataVOS) {
                    BigDecimal totalDisposalWeight = BigDecimal.ZERO;
                    for (DepartmentReportItemVO item : list) {
                        int index = wasteTypeList.indexOf(sysDictData);
                        int index = sysDictDataVOS.indexOf(sysDictData);
                        // 处置量数据在产生量和转移量数据之后,所以索引需要加上wasteTypeList的大小的2倍
                        int disposalIndex = wasteTypeList.size() * 2 + index;
                        int disposalIndex = sysDictDataVOS.size() * 2 + index;
                        if (disposalIndex < item.getData().size()) {
                            totalDisposalWeight = totalDisposalWeight.add(item.getData().get(disposalIndex));
                        }
@@ -782,17 +785,16 @@
     */
    private List<List<String>> regulationReportHead(List<Long> wasteTypeCodeList) {
        //查询医废类型
        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList)
                .orderByDesc(SysDictData::getDictCode).list();
        List<SysDictDataVO> sysDictDataVOS = sysDictDataService.medicalWasteTypeListByDictCode(wasteTypeCodeList);
        List<List<String>> headTitles = Lists.newArrayList();
        headTitles.add(Lists.newArrayList("日期"));
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList("医疗废物产生量(kg)", item.getDictLabel()));
        });
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList("医疗废物转移量(kg)", item.getDictLabel()));
        });
        wasteTypeList.forEach(item -> {
        sysDictDataVOS.forEach(item -> {
            headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel()));
        });
        return headTitles;
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwMicroEquipmentRecordServiceImpl.java
@@ -217,8 +217,6 @@
        vo.setLegend(wasteTypeList.stream().map(SysDictDataVO::getDictLabel).collect(Collectors.toList()));
        vo.getLegend().add("小计");
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        List<SysDictData> medicalWasteTypeList = sysDictDataService.lambdaQuery().eq(SysDictData::getDictType, "medical_waste_type").orderByDesc(SysDictData::getDictCode).list();
        List<MwMicroEquipmentStaticsVO> staticsData = baseMapper.getStaticsData(query, treeCode);
        SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS);
        switch (query.getDateType()) {
@@ -241,7 +239,7 @@
            SimpleDateFormat finalSdf = sdf;
            BigDecimal totalWeight = BigDecimal.ZERO;
            BigDecimal totalCount = BigDecimal.ZERO;
            for (SysDictData sysDictData : medicalWasteTypeList) {
            for (SysDictDataVO sysDictData : wasteTypeList) {
                BigDecimal weight = staticsData.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode())
                        && finalSdf.format(e.getUseTime()).equals(date)
                ).map(MwMicroEquipmentStaticsVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
@@ -264,13 +262,13 @@
            totalRow.setData(new ArrayList<>());
            // 计算各类型废物的重量和数量总计
            for (SysDictData sysDictData : medicalWasteTypeList) {
            for (SysDictDataVO sysDictData : wasteTypeList) {
                BigDecimal totalTypeWeight = BigDecimal.ZERO;
                BigDecimal totalTypeCount = BigDecimal.ZERO;
                for (DepartmentReportItemVO item : result) {
                    // 每种废物类型占用两列(重量和数量)
                    int index = medicalWasteTypeList.indexOf(sysDictData);
                    int index = wasteTypeList.indexOf(sysDictData);
                    int weightIndex = index * 2;
                    int countIndex = weightIndex + 1;
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDepartmentServiceImpl.java
@@ -1,5 +1,6 @@
package com.sinata.system.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,14 @@
import com.sinata.common.utils.SecurityUtils;
import com.sinata.common.utils.StringUtils;
import com.sinata.system.domain.MwApplication;
import com.sinata.system.domain.MwContract;
import com.sinata.system.domain.MwMicroEquipment;
import com.sinata.system.domain.MwProtectionEquipment;
import com.sinata.system.domain.MwProtectionRegulation;
import com.sinata.system.domain.MwProtectionTask;
import com.sinata.system.domain.MwStagingRoom;
import com.sinata.system.domain.MwTransitCar;
import com.sinata.system.domain.MwTransitRoute;
import com.sinata.system.domain.SysDepartment;
import com.sinata.system.domain.SysDepartmentInfo;
import com.sinata.system.domain.dto.DisposalUnitDTO;
@@ -26,6 +35,15 @@
import com.sinata.system.enums.DepartmentEnum;
import com.sinata.system.mapper.SysDepartmentMapper;
import com.sinata.system.service.ISysUserService;
import com.sinata.system.service.MwApplicationService;
import com.sinata.system.service.MwContractService;
import com.sinata.system.service.MwMicroEquipmentService;
import com.sinata.system.service.MwProtectionEquipmentService;
import com.sinata.system.service.MwProtectionRegulationService;
import com.sinata.system.service.MwProtectionTaskService;
import com.sinata.system.service.MwStagingRoomService;
import com.sinata.system.service.MwTransitCarService;
import com.sinata.system.service.MwTransitRouteService;
import com.sinata.system.service.SysDepartmentInfoService;
import com.sinata.system.service.SysDepartmentService;
import com.sinata.system.service.SysUserDepartmentService;
@@ -61,6 +79,16 @@
    private final RedisTemplate<Object, Object> redisTemplate;
    private final SysDepartmentInfoService sysDepartmentInfoService;
    private final ISysUserService sysUserService;
    private final MwApplicationService mwApplicationService;
    private final MwContractService mwContractService;
    private final MwMicroEquipmentService mwMicroEquipmentService;
    private final MwProtectionEquipmentService mwProtectionEquipmentService;
    private final MwProtectionTaskService mwProtectionTaskService;
    private final MwProtectionRegulationService mwProtectionRegulationService;
    private final MwStagingRoomService mwStagingRoomService;
    private final MwTransitCarService mwTransitCarService;
    private final MwTransitRouteService mwTransitRouteService;
    /**
     * 获取区域树
     * @return
@@ -629,6 +657,8 @@
        sysDepartmentInfo.setDepartmentId(department.getId());
        sysDepartmentInfo.setId(null);
        sysDepartmentInfoService.save(sysDepartmentInfo);
        //处理层级关系
        handleRelation(sysDepartment, parent, dto.getRelation());
    }
    /**
@@ -759,6 +789,26 @@
        sysDepartmentInfo.setId(null);
        sysDepartmentInfo.setDepartmentId(department.getId());
        sysDepartmentInfoService.save(sysDepartmentInfo);
        //如果修改了所属区域
        handleRelation(sysDepartment, parent, dto.getRelation());
    }
    private void handleRelation(SysDepartment sysDepartment, SysDepartment parent, String relation) {
        if (!sysDepartment.getParentId().equals(parent.getId())) {
            List<Long> relationList = Arrays.stream(relation.split(",")).map(Long::valueOf).collect(Collectors.toList());
            relationList.add(sysDepartment.getId());
            relation = JSONArray.toJSONString(relationList);
            //同步该单位所属器具的层级
            mwApplicationService.lambdaUpdate().set(MwApplication::getRelation, relation).eq(MwApplication::getDepartmentId, sysDepartment.getId()).update();
            mwContractService.lambdaUpdate().set(MwContract::getRelation, relation).eq(MwContract::getDepartmentId, sysDepartment.getId()).update();
            mwMicroEquipmentService.lambdaUpdate().set(MwMicroEquipment::getRelation, relation).eq(MwMicroEquipment::getDepartmentId, sysDepartment.getId()).update();
            mwProtectionEquipmentService.lambdaUpdate().set(MwProtectionEquipment::getRelation, relation).eq(MwProtectionEquipment::getDepartmentId, sysDepartment.getId()).update();
            mwProtectionTaskService.lambdaUpdate().set(MwProtectionTask::getRelation, relation).eq(MwProtectionTask::getDepartmentId, sysDepartment.getId()).update();
            mwProtectionRegulationService.lambdaUpdate().set(MwProtectionRegulation::getRelation, relation).eq(MwProtectionRegulation::getDepartmentId, sysDepartment.getId()).update();
            mwStagingRoomService.lambdaUpdate().set(MwStagingRoom::getRelation, relation).eq(MwStagingRoom::getDepartmentId, sysDepartment.getId()).update();
            mwTransitCarService.lambdaUpdate().set(MwTransitCar::getRelation, relation).eq(MwTransitCar::getDepartmentId, sysDepartment.getId()).update();
            mwTransitRouteService.lambdaUpdate().set(MwTransitRoute::getRelation, relation).eq(MwTransitRoute::getDepartmentId, sysDepartment.getId()).update();
        }
    }
    /**
@@ -879,6 +929,7 @@
            department.setRegion(region);
        }
        updateById(department);
        handleRelation(sysDepartment, parent, dto.getRelation());
    }
    /**
medicalWaste-system/src/main/java/com/sinata/system/service/impl/SysDictDataServiceImpl.java
@@ -133,6 +133,7 @@
        Page<SysDictData> result = this.lambdaQuery()
                .like(StringUtils.isNotBlank(query.getKeyword()), SysDictData::getDictLabel, query.getKeyword())
                .eq(StringUtils.isNotBlank(query.getDictType()), SysDictData::getDictType, query.getDictType())
                .orderByAsc(SysDictData::getDictSort)
                .orderByDesc(SysDictData::getDictCode)
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        List<String> dictTypeList = result.getRecords().stream().map(SysDictData::getDictType).distinct().collect(Collectors.toList());
@@ -167,12 +168,20 @@
    @Override
    public List<SysDictDataVO> medicalWasteTypeList() {
        return getSysDictDataVOListByType("medical_waste_type");
        return getSysDictDataVOListByType("medical_waste_type", null);
    }
    @Override
    public List<SysDictDataVO> medicalWasteTypeListByDictCode(List<Long> wasteTypeCodeList) {
        return getSysDictDataVOListByType("medical_waste_type", wasteTypeCodeList);
    }
    @Nullable
    private List<SysDictDataVO> getSysDictDataVOListByType(String dictType) {
        List<SysDictData> medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType).orderByDesc(SysDictData::getDictCode).list();
    private List<SysDictDataVO> getSysDictDataVOListByType(String dictType, List<Long> dictCodeList) {
        List<SysDictData> medicalWasteTypeList = lambdaQuery().eq(SysDictData::getDictType, dictType)
                .in(CollUtils.isNotEmpty(dictCodeList), SysDictData::getDictCode, dictCodeList)
                .orderByAsc(SysDictData::getDictSort)
                .orderByDesc(SysDictData::getDictCode).list();
        return BeanUtils.copyToList(medicalWasteTypeList, SysDictDataVO.class);
    }
@@ -183,7 +192,7 @@
     */
    @Override
    public List<SysDictDataVO> equipmentTypeList() {
        return getSysDictDataVOListByType("protection_equipment_type");
        return getSysDictDataVOListByType("protection_equipment_type", null);
    }
    /**
@@ -193,7 +202,7 @@
     */
    @Override
    public List<SysDictDataVO> regulationsTypeList() {
        return getSysDictDataVOListByType("protection_regulation_type");
        return getSysDictDataVOListByType("protection_regulation_type", null);
    }
    /**
@@ -203,16 +212,16 @@
     */
    @Override
    public List<SysDictDataVO> workTypeList() {
        return getSysDictDataVOListByType("protective_work_type");
        return getSysDictDataVOListByType("protective_work_type", null);
    }
    @Override
    public List<SysDictDataVO> institutionLevelList() {
        return getSysDictDataVOListByType("institution_level");
        return getSysDictDataVOListByType("institution_level", null);
    }
    @Override
    public List<SysDictDataVO> institutionTypeList() {
        return getSysDictDataVOListByType("institution_type");
        return getSysDictDataVOListByType("institution_type", null);
    }
}
medicalWaste-system/src/main/resources/mapper/system/MwCheckoutRecordMapper.xml
@@ -114,6 +114,7 @@
    </select>
    <select id="transitPageList" resultType="com.sinata.system.domain.vo.MwTransitRecordVO">
        SELECT
        MCR2.ID AS UNIQUE_ID,
        MTR.ID,
        MCR.CAR_ID,
        MAX(SD.DEPARTMENT_NAME) AS DEPARTMENT_NAME,
@@ -158,6 +159,9 @@
            <if test="query.status != null and (query.status == 3 or query.status == 4)">
                AND MCR.STATUS IN (3,4)
            </if>
            <if test="query.status != null">
                AND MCR.STATUS =#{query.status}
            </if>
            <if test="query.startTimeStart != null and query.startTimeEnd != null">
                AND MCR.BOX_TIME BETWEEN #{query.startTimeStart} AND #{query.startTimeEnd}
            </if>
@@ -174,6 +178,7 @@
    </select>
    <select id="transitDetail" resultType="com.sinata.system.domain.vo.MwTransitRecordVO">
        SELECT
        MCR2.ID AS UNIQUE_ID,
        MTR.ID,
        MCR.CAR_ID,
        MAX(SD.DEPARTMENT_NAME) AS DEPARTMENT_NAME,
medicalWaste-system/src/main/resources/mapper/system/MwCollectRecordMapper.xml
@@ -472,16 +472,19 @@
    </select>
    <select id="getTagInfo" resultType="com.sinata.system.domain.vo.DepartmentTagInfoVO"
            parameterType="java.lang.Long">
        SELECT SD.ID,SD.DEPARTMENT_NAME,COALESCE(SUM(MCR.WEIGHT), 0) AS currentStorageWeight,
        SELECT SD.ID,
        SD.DEPARTMENT_NAME,
        COALESCE(SUM(MCR.WEIGHT), 0) AS currentStorageWeight,
        COUNT(MCR.ID) AS currentStorageBagNum,
        COALESCE(SUM(IF(TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE), MCR.WEIGHT, 0)), 0) AS
        todayHandleWeight,
        COALESCE(COUNT(IF(TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE), MCR.ID, NULL)), 0) AS
        todayHandleBagNum FROM MW_COLLECT_RECORD MCR LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID
        COALESCE(SUM(IF(TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE), MCR.WEIGHT, 0)), 0) AS todayHandleWeight,
        COALESCE(COUNT(IF(TRUNC(MCR.COLLECT_TIME) = TRUNC(SYSDATE), MCR.ID, NULL)), 0) AS todayHandleBagNum
        FROM SYS_DEPARTMENT SD
        LEFT JOIN MW_COLLECT_RECORD MCR
        ON SD.ID = MCR.DEPARTMENT_ID AND MCR.DEL_FLAG = 0
        <where>
            MCR.DEL_FLAG = 0 AND MCR.DEPARTMENT_ID = #{id}
            SD.ID = #{id}
        </where>
        GROUP BY MCR.DEPARTMENT_ID
        GROUP BY SD.ID
    </select>
</mapper>