From 9c717849bee3d6cc25f29ad69a93a507e3de7d13 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 27 十二月 2024 18:22:37 +0800
Subject: [PATCH] 统计分析报表接口

---
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 92 insertions(+), 9 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..2fa4733 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
@@ -25,6 +25,7 @@
 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;
@@ -57,6 +58,7 @@
     private final MwWarningRecordService mwWarningRecordService;
     private final HttpServletResponse response;
     private final MwDisposalRecordService mwDisposalRecordService;
+    private final MwDisposalHandleRecordService mwDisposalHandleRecordService;
 
     /**
      * 机构分布-获取机构列表
@@ -333,9 +335,9 @@
     public DepartmentReportVO disposalReport(DisposalReportQuery query) {
         DepartmentReportVO vo = new DepartmentReportVO();
         //已接收
-        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:
@@ -445,15 +447,19 @@
         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();
         //医废产生量
@@ -480,16 +486,93 @@
         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);
                 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