From 05628d269dff7ad4f2e9d3419b05b4e7e5768797 Mon Sep 17 00:00:00 2001
From: luoyisheng <yangdongji@argo-ai.cn>
Date: 星期三, 12 二月 2025 14:19:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java |  169 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 129 insertions(+), 40 deletions(-)

diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
index 7eb9c8f..a088eab 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java
@@ -6,7 +6,6 @@
 import com.sinata.common.core.domain.entity.SysDictData;
 import com.sinata.common.utils.CollUtils;
 import com.sinata.common.utils.DateUtils;
-import com.sinata.system.domain.MedicalWasteStaticsVO;
 import com.sinata.system.domain.MwCollectRecord;
 import com.sinata.system.domain.MwWarningRecord;
 import com.sinata.system.domain.SysDepartment;
@@ -25,9 +24,11 @@
 import com.sinata.system.service.ISysDictDataService;
 import com.sinata.system.service.MwCheckoutRecordService;
 import com.sinata.system.service.MwCollectRecordService;
+import com.sinata.system.service.MwDisposalHandleRecordService;
 import com.sinata.system.service.MwDisposalRecordService;
 import com.sinata.system.service.MwWarningRecordService;
 import com.sinata.system.service.SysDepartmentService;
+import com.sinata.system.utils.ImageToBase64;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -41,6 +42,7 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -57,20 +59,9 @@
     private final MwWarningRecordService mwWarningRecordService;
     private final HttpServletResponse response;
     private final MwDisposalRecordService mwDisposalRecordService;
+    private final MwDisposalHandleRecordService mwDisposalHandleRecordService;
 
-    /**
-     * 机构分布-获取机构列表
-     *
-     * @param type 1:全部 2:医院 3:处置单位
-     * @return
-     */
-    public List<SysDepartment> departmentList(Integer type) {
-        return sysDepartmentService.lambdaQuery().eq(type != 1, SysDepartment::getOrgType, type).list();
-    }
 
-    public MedicalWasteStaticsVO medicalWaste() {
-        return null;
-    }
 
     /**
      * 医院报表
@@ -80,6 +71,10 @@
      */
     public DepartmentReportVO hospitalReport(HospitalReportQuery query) {
         DepartmentReportVO vo = new DepartmentReportVO();
+        SysDepartment department = sysDepartmentService.getById(query.getDepartmentId());
+        if (Objects.nonNull(department)) {
+            vo.setDepartmentName(department.getDepartmentName());
+        }
         List<SysDictDataVO> wasteTypeList = sysDictDataService.medicalWasteTypeList();
 
         if (CollUtils.isEmpty(wasteTypeList)) {
@@ -133,13 +128,17 @@
                 totalCount = totalCount.add(currentCount);
                 totalWeight = totalWeight.add(weight);
             }
+            itemVO.getData().add(totalCount);
+            itemVO.getData().add(totalWeight);
             //查询预警记录判断是否超时
             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<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().in(MwWarningRecord::getWarningTargetId, collectIdList).list();
-                if (CollUtils.isNotEmpty(warningRecordList)) {
-                    itemVO.setOverTimeFlag("是");
+                if (CollUtils.isNotEmpty(collectIdList)) {
+                    List<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().in(MwWarningRecord::getWarningTargetId, collectIdList).list();
+                    if (CollUtils.isNotEmpty(warningRecordList)) {
+                        itemVO.setOverTimeFlag("是");
+                    }
                 }
             }
             list.add(itemVO);
@@ -222,6 +221,9 @@
     public DepartmentReportVO transformList(TransformQuery query) {
         DepartmentReportVO vo = new DepartmentReportVO();
         SysDepartment department = sysDepartmentService.getById(query.getDepartmentId());
+        if (Objects.nonNull(department)) {
+            vo.setDepartmentName(department.getDepartmentName());
+        }
         SysDepartment region = sysDepartmentService.getDepartmentByParentId(department.getParentId());
         List<SysDepartment> hospitalList = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, region.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
         if (CollUtils.isNotEmpty(hospitalList)) {
@@ -232,6 +234,7 @@
                 if (CollUtils.isNotEmpty(wasteTypeList)) {
                     vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()));
                     vo.getLegend().add("小计");
+                    List<DepartmentReportItemVO> list = new ArrayList<>();
                     for (TransformVO transformVO : checkoutRecordVOList) {
                         BigDecimal totalCount = BigDecimal.ZERO;
                         BigDecimal totalWeight = BigDecimal.ZERO;
@@ -239,7 +242,7 @@
                         departmentReportItemVO.setName(transformVO.getHospitalName());
                         departmentReportItemVO.setData(new ArrayList<>());
                         departmentReportItemVO.setDriverName(transformVO.getDriverName());
-                        departmentReportItemVO.setHospitalSignature(transformVO.getHospitalSignature());
+                        departmentReportItemVO.setHospitalSignature(ImageToBase64.convertImageToBase64(transformVO.getHospitalSignature()));
                         departmentReportItemVO.setHandoverTime(transformVO.getCheckoutTime());
                         for (SysDictData sysDictData : wasteTypeList) {
                             BigDecimal count = BigDecimal.valueOf(transformVO.getCollectRecordList().stream().filter(item -> item.getWasteType().equals(sysDictData.getDictCode())).count());
@@ -251,7 +254,9 @@
                         }
                         departmentReportItemVO.getData().add(totalCount);
                         departmentReportItemVO.getData().add(totalWeight);
+                        list.add(departmentReportItemVO);
                     }
+                    vo.setList(list);
                 }
             }
         }
@@ -332,10 +337,14 @@
      */
     public DepartmentReportVO disposalReport(DisposalReportQuery query) {
         DepartmentReportVO vo = new DepartmentReportVO();
+        SysDepartment department = sysDepartmentService.getById(query.getDepartmentId());
+        if (Objects.nonNull(department)) {
+            vo.setDepartmentName(department.getDepartmentName());
+        }
         //已接收
-        List<MwDisposalRecordReportVO> receivedList = mwDisposalRecordService.disposalReportByType(query, 1);
+        List<MwDisposalRecordReportVO> receivedList = mwDisposalRecordService.disposalReceiveReport(query);
         //已处置
-        List<MwDisposalRecordReportVO> disposaledList = mwDisposalRecordService.disposalReportByType(query, 2);
+        List<MwDisposalRecordReportVO> disposaledList = mwDisposalHandleRecordService.disposalReport(query);
         SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS);
         switch (query.getDateType()) {
             case 1:
@@ -362,23 +371,17 @@
                 SimpleDateFormat finalSdf = sdf;
                 //接收
                 for (SysDictData sysDictData : wasteTypeList) {
-                    departmentReportItemVO.getData().add(BigDecimal.ZERO);
-                    if (CollUtils.isNotEmpty(receivedList)) {
-                        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);
-                    }
+                    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) {
-                    departmentReportItemVO.getData().add(BigDecimal.ZERO);
-                    if (CollUtils.isNotEmpty(disposaledList)) {
-                        BigDecimal totalWeight = disposaledList.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);
-                    }
+                    BigDecimal totalWeight = disposaledList.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);
                 }
                 list.add(departmentReportItemVO);
             }
@@ -445,17 +448,25 @@
         headTitles.add(Lists.newArrayList("日期"));
         wasteTypeList.forEach(item -> {
             headTitles.add(Lists.newArrayList("医疗废物接收量(kg)", item.getDictLabel()));
-            headTitles.add(Lists.newArrayList("医疗废物接收量(kg)", item.getDictLabel()));
         });
         wasteTypeList.forEach(item -> {
-            headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel()));
             headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel()));
         });
         return headTitles;
     }
 
+    /**
+     * 监管报表
+     *
+     * @param query
+     * @return
+     */
     public DepartmentReportVO regulationReport(DisposalReportQuery query) {
         DepartmentReportVO vo = new DepartmentReportVO();
+        SysDepartment department = sysDepartmentService.getById(query.getDepartmentId());
+        if (Objects.nonNull(department)) {
+            vo.setDepartmentName(department.getDepartmentName());
+        }
         //医废产生量
         List<MwCollectRecordVO> collectRecordList = mwCollectRecordService.getRegulationReportList(query);
         //医废转移量
@@ -480,16 +491,94 @@
         if (CollUtils.isNotEmpty(wasteTypeList)) {
             vo.setLegend(wasteTypeList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()));
             vo.setList(new ArrayList<>());
+            List<DepartmentReportItemVO> list = new ArrayList<>();
             for (String date : dateList) {
                 DepartmentReportItemVO departmentReportItemVO = new DepartmentReportItemVO();
                 departmentReportItemVO.setName(date);
+                departmentReportItemVO.setData(new ArrayList<>());
                 SimpleDateFormat finalSdf = sdf;
                 for (SysDictData sysDictData : wasteTypeList) {
-                    collectRecordList.stream().filter(e -> e.getWasteType().equals(sysDictData.getDictCode()) && finalSdf.format(e.getCollectTime()).equals(date)).map(MwCollectRecordVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
-                }
-            }
-        }
+                    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);
 
-        return null;
+                }
+                for (SysDictData sysDictData : wasteTypeList) {
+                    BigDecimal weight = checkoutRecordList.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) {
+                    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);
+                }
+                list.add(departmentReportItemVO);
+            }
+            vo.setList(list);
+        }
+        return vo;
+    }
+
+    public void regulationReportExport(DisposalReportQuery query) throws IOException {
+        List<List<String>> head = regulationReportHead(query.getWasteTypeCodeList());
+        System.out.println(JSONObject.toJSONString(head));
+        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
+        String fileName = URLEncoder.encode("监管报表", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        // 这里需要设置不关闭流
+        FastExcel.write(response.getOutputStream())
+                .head(head)
+                .autoCloseStream(Boolean.TRUE)
+                .sheet("监管报表")
+                .doWrite(getRegulationReportStaticsData(query));
+    }
+
+    /**
+     * 监管报表导出数据
+     *
+     * @param query
+     * @return
+     */
+    private List<List<Object>> getRegulationReportStaticsData(DisposalReportQuery query) {
+        DepartmentReportVO vo = regulationReport(query);
+        List<DepartmentReportItemVO> list = vo.getList();
+        if (CollUtils.isNotEmpty(list)) {
+            List<List<Object>> result = new ArrayList<>();
+            for (DepartmentReportItemVO departmentReportItemVO : list) {
+                List<Object> data = new ArrayList<>();
+                data.add(departmentReportItemVO.getName());
+                data.addAll(departmentReportItemVO.getData());
+                result.add(data);
+            }
+            return result;
+        }
+        return CollUtils.emptyList();
+    }
+
+    /**
+     * 监管报表表头
+     *
+     * @param wasteTypeCodeList
+     * @return
+     */
+    private List<List<String>> regulationReportHead(List<Long> wasteTypeCodeList) {
+        //查询医废类型
+        List<SysDictData> wasteTypeList = sysDictDataService.lambdaQuery().in(SysDictData::getDictCode, wasteTypeCodeList).list();
+        List<List<String>> headTitles = Lists.newArrayList();
+        headTitles.add(Lists.newArrayList("日期"));
+        wasteTypeList.forEach(item -> {
+            headTitles.add(Lists.newArrayList("医疗废物产生量(kg)", item.getDictLabel()));
+        });
+        wasteTypeList.forEach(item -> {
+            headTitles.add(Lists.newArrayList("医疗废物转移量(kg)", item.getDictLabel()));
+        });
+        wasteTypeList.forEach(item -> {
+            headTitles.add(Lists.newArrayList("医疗废物处置量(kg)", item.getDictLabel()));
+        });
+        return headTitles;
     }
 }

--
Gitblit v1.7.1