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/MwDisposalRecordService.java                |    3 
 medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml                         |   80 ++++++++-------
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java |   14 ++
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java                  |    5 
 medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java            |   13 ++
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java               |   21 ++++
 medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java          |   12 ++
 medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java       |   23 +---
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/StaticsService.java                     |  101 ++++++++++++++++++-
 medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml                   |   25 +++++
 10 files changed, 230 insertions(+), 67 deletions(-)

diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
index a5055cf..e90318f 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/StaticsController.java
@@ -134,9 +134,30 @@
         }
     }
 
+    /**
+     * 监管报表
+     *
+     * @param query
+     * @return
+     */
     @ApiOperation("监管报表")
     @PostMapping("/regulationReport")
     public R<DepartmentReportVO> regulationReport(@Valid @RequestBody DisposalReportQuery query) {
         return R.ok(staticsService.regulationReport(query));
     }
+
+    /**
+     * 监管报表导出
+     *
+     * @param query
+     */
+    @ApiOperation("监管报表导出")
+    @PostMapping("/regulationReportExport")
+    public void regulationReportExport(@Valid @RequestBody DisposalReportQuery query) {
+        try {
+            staticsService.regulationReportExport(query);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java
index aa25caf..b71c191 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalHandleRecordMapper.java
@@ -2,7 +2,12 @@
 
 import com.sinata.system.domain.MwDisposalHandleRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sinata.system.domain.query.DisposalReportQuery;
+import com.sinata.system.domain.vo.MwDisposalRecordReportVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,5 +19,11 @@
  */
 @Mapper
 public interface MwDisposalHandleRecordMapper extends BaseMapper<MwDisposalHandleRecord> {
-
+    /**
+     * 处置记录报表
+     *
+     * @param query
+     * @return
+     */
+    List<MwDisposalRecordReportVO> disposalReport(@Param("query") DisposalReportQuery query);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
index 1ebc082..ba06a71 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/mapper/MwDisposalRecordMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sinata.system.domain.query.DisposalReportQuery;
 import com.sinata.system.domain.query.MwDisposalRecordQuery;
+import com.sinata.system.domain.vo.DisposalRecordStaticsVO;
 import com.sinata.system.domain.vo.MwCollectRecordVO;
 import com.sinata.system.domain.vo.MwDisposalRecordItemVO;
 import com.sinata.system.domain.vo.MwDisposalRecordReportVO;
@@ -31,7 +32,7 @@
      * @param treeCode
      * @return
      */
-    List<MwDisposalRecordVO> getStaticsData(@Param("query") MwDisposalRecordQuery query, @Param("treeCode") String treeCode);
+    DisposalRecordStaticsVO getStaticsData(@Param("query") MwDisposalRecordQuery query, @Param("treeCode") String treeCode);
 
     /**
      * 处置显示分页列表
@@ -59,7 +60,7 @@
      * @param type
      * @return
      */
-    List<MwDisposalRecordReportVO> disposalReportByType(@Param("query") DisposalReportQuery query, @Param("type") Integer type);
+    List<MwDisposalRecordReportVO> disposalReceiveReport(@Param("query") DisposalReportQuery query);
 
     /**
      * 监管报表医疗废物处置列表
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java
index c5f86a4..3abad7c 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalHandleRecordService.java
@@ -2,6 +2,10 @@
 
 import com.sinata.system.domain.MwDisposalHandleRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sinata.system.domain.query.DisposalReportQuery;
+import com.sinata.system.domain.vo.MwDisposalRecordReportVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,11 @@
  * @since 2024-12-27
  */
 public interface MwDisposalHandleRecordService extends IService<MwDisposalHandleRecord> {
-
+    /**
+     * 处置记录报表
+     *
+     * @param query
+     * @return
+     */
+    List<MwDisposalRecordReportVO> disposalReport(DisposalReportQuery query);
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalRecordService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalRecordService.java
index 7940776..fc98875 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalRecordService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/MwDisposalRecordService.java
@@ -51,10 +51,9 @@
      * 处置报表
      *
      * @param query
-     * @param type  1:接收 2:处置
      * @return
      */
-    List<MwDisposalRecordReportVO> disposalReportByType(DisposalReportQuery query, Integer type);
+    List<MwDisposalRecordReportVO> disposalReceiveReport(DisposalReportQuery query);
 
     /**
      * 监管报表医疗废物处置列表
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;
     }
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java
index 90d3a09..ad5b72a 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalHandleRecordServiceImpl.java
@@ -1,10 +1,14 @@
 package com.sinata.system.service.impl;
 
 import com.sinata.system.domain.MwDisposalHandleRecord;
+import com.sinata.system.domain.query.DisposalReportQuery;
+import com.sinata.system.domain.vo.MwDisposalRecordReportVO;
 import com.sinata.system.mapper.MwDisposalHandleRecordMapper;
 import com.sinata.system.service.MwDisposalHandleRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +20,15 @@
  */
 @Service
 public class MwDisposalHandleRecordServiceImpl extends ServiceImpl<MwDisposalHandleRecordMapper, MwDisposalHandleRecord> implements MwDisposalHandleRecordService {
+    /**
+     * 处置记录报表
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public List<MwDisposalRecordReportVO> disposalReport(DisposalReportQuery query) {
+        return baseMapper.disposalReport(query);
+    }
 
 }
diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
index d17581e..fd72934 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwDisposalRecordServiceImpl.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sinata.common.entity.PageDTO;
-import com.sinata.common.utils.CollUtils;
 import com.sinata.common.utils.StringUtils;
 import com.sinata.system.domain.MwDisposalRecord;
 import com.sinata.system.domain.query.DisposalReportQuery;
@@ -14,13 +13,13 @@
 import com.sinata.system.domain.vo.MwDisposalRecordItemVO;
 import com.sinata.system.domain.vo.MwDisposalRecordReportVO;
 import com.sinata.system.domain.vo.MwDisposalRecordVO;
+import com.sinata.system.mapper.MwDisposalHandleRecordMapper;
 import com.sinata.system.mapper.MwDisposalRecordMapper;
 import com.sinata.system.service.MwDisposalRecordService;
 import com.sinata.system.service.SysDepartmentService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -35,6 +34,7 @@
 @RequiredArgsConstructor
 public class MwDisposalRecordServiceImpl extends ServiceImpl<MwDisposalRecordMapper, MwDisposalRecord> implements MwDisposalRecordService {
     private final SysDepartmentService sysDepartmentService;
+    private final MwDisposalHandleRecordMapper mwDisposalHandleRecordMapper;
 
     /**
      * 统计数据
@@ -45,19 +45,11 @@
     @Override
     public DisposalRecordStaticsVO statics(MwDisposalRecordQuery query) {
         String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
+        DisposalRecordStaticsVO vo = null;
         if (StringUtils.isNotBlank(treeCode)) {
-            List<MwDisposalRecordVO> disposalRecordVOList = baseMapper.getStaticsData(query, treeCode);
-            if (CollUtils.isNotEmpty(disposalRecordVOList)) {
-                DisposalRecordStaticsVO vo = new DisposalRecordStaticsVO();
-                vo.setReceiveQuantity(disposalRecordVOList.stream().map(MwDisposalRecordVO::getReceiveQuantity).reduce(0, Integer::sum));
-                vo.setReceiveWeight(disposalRecordVOList.stream().map(MwDisposalRecordVO::getReceiveWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
-                vo.setUnloadQuantity(disposalRecordVOList.stream().map(MwDisposalRecordVO::getUnloadQuantity).reduce(0, Integer::sum));
-                vo.setUnloadWeight(disposalRecordVOList.stream().map(MwDisposalRecordVO::getUnloadWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
-                vo.setTotalHandledQuantity(disposalRecordVOList.stream().map(MwDisposalRecordVO::getTotalHandledQuantity).reduce(0, Integer::sum));
-                vo.setTotalHandledWeight(disposalRecordVOList.stream().map(MwDisposalRecordVO::getTotalHandledWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
-            }
+            vo = baseMapper.getStaticsData(query, treeCode);
         }
-        return new DisposalRecordStaticsVO();
+        return vo;
     }
 
     /**
@@ -92,12 +84,11 @@
      * 处置报表
      *
      * @param query
-     * @param type
      * @return
      */
     @Override
-    public List<MwDisposalRecordReportVO> disposalReportByType(DisposalReportQuery query, Integer type) {
-        return baseMapper.disposalReportByType(query, type);
+    public List<MwDisposalRecordReportVO> disposalReceiveReport(DisposalReportQuery query) {
+        return baseMapper.disposalReceiveReport(query);
     }
 
     /**
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml
index fdfe4cd..c120c17 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalHandleRecordMapper.xml
@@ -26,5 +26,30 @@
         UPDATE_TIME,
         ID, DEPARTMENT_ID, DISPOSAL_UNIT_NAME, DISPOSAL_TIME, DISPOSAL_USER_ID, DISPOSAL_RECORD_ID
     </sql>
+    <select id="disposalReport" resultType="com.sinata.system.domain.vo.MwDisposalRecordReportVO">
+        SELECT MDHR.ID,
+        MDHR.DEPARTMENT_ID,
+        MDHR.DISPOSAL_UNIT_NAME,
+        MDHR.DISPOSAL_TIME,
+        MDHR.DISPOSAL_USER_ID,
+        MCR.WEIGHT,
+        MCR.WASTE_TYPE
+        FROM MW_DISPOSAL_HANDLE_RECORD MDHR
+        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHR.ID
+        <where>
+            <if test="query.departmentId != null">
+                AND MDHR.DEPARTMENT_ID = #{query.departmentId}
+            </if>
+            <if test="query.startTime != null and query.endTime != null">
+                AND MDHR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime}
+            </if>
+            <if test="query.wasteTypeCodeList != null and query.wasteTypeCodeList.size()>0">
+                AND MCR.WASTE_TYPE IN
+                <foreach collection="query.wasteTypeCodeList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 
 </mapper>
diff --git a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
index 3782a15..a7d53a5 100644
--- a/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
+++ b/medicalWaste-system/src/main/resources/mapper/system/MwDisposalRecordMapper.xml
@@ -34,10 +34,17 @@
         UPDATE_TIME,
         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.MwDisposalRecordVO">
-        SELECT MDR.*
+    <select id="getStaticsData" resultType="com.sinata.system.domain.vo.DisposalRecordStaticsVO">
+        SELECT SUM(MDR.RECEIVE_QUANTITY) AS receivedQuantity,
+        SUM(MDR.RECEIVE_WEIGHT) AS receivedWeight,
+        SUM(MDR.RECEIVE_QUANTITY) AS unloadQuantity,
+        SUM(MDR.RECEIVE_WEIGHT) AS unloadWeight,
+        SUM(MCR.WEIGHT) AS totalHandledWeight,
+        COUNT(DISTINCT MCR.BOX_NUMBER) AS totalHandledQuantity
         FROM MW_DISPOSAL_RECORD MDR
         LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
+        LEFT JOIN MW_DISPOSAL_HANDLE_RECORD MDHR ON MDHR.DISPOSAL_RECORD_ID = MDR.ID
+        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHR.ID
         <where>
             MDR.DEL_FLAG = 0
             <if test="treeCode != null and treeCode !=''">
@@ -49,9 +56,29 @@
         </where>
     </select>
     <select id="pageList" resultType="com.sinata.system.domain.vo.MwDisposalRecordVO">
-        SELECT MDR.*
+        SELECT MDR.ID,
+        MDR.DEPARTMENT_ID,
+        MDR.DISPOSAL_UNIT_NAME,
+        MDR.RECEIVE_QUANTITY,
+        MDR.RECEIVE_TIME,
+        MDR.RECEIVE_WEIGHT,
+        MDR.RECEIVER_ID,
+        MDR.UNLOAD_QUANTITY,
+        MDR.UNLOAD_WEIGHT,
+        MDR.DISPOSAL_FLAG,
+        MDR.DISPOSAL_TIME,
+        MDR.DISPOSAL_USER_ID,
+        MDR.DEL_FLAG,
+        MDR.CREATE_BY,
+        MDR.CREATE_TIME,
+        MDR.UPDATE_BY,
+        MDR.UPDATE_TIME,
+        SUM(MCR.WEIGHT) AS totalHandledWeight,
+        COUNT(DISTINCT MCR.BOX_NUMBER) AS totalHandledQuantity
         FROM MW_DISPOSAL_RECORD MDR
         LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDR.DEPARTMENT_ID
+        LEFT JOIN MW_DISPOSAL_HANDLE_RECORD MDHR ON MDHR.DISPOSAL_RECORD_ID = MDR.ID
+        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHR.ID
         <where>
             MDR.DEL_FLAG = 0
             <if test="treeCode != null and treeCode !=''">
@@ -61,25 +88,23 @@
                 AND MDR.RECEIVE_TIME BETWEEN #{query.receiveTimeStart} AND #{query.receiveTimeEnd}
             </if>
         </where>
-        ORDER BY MDR.DISPOSAL_TIME DESC
+        ORDER BY MDR.RECEIVE_TIME DESC
     </select>
     <select id="pageDetail" resultType="com.sinata.system.domain.vo.MwDisposalRecordItemVO">
         SELECT MCR.BOX_NUMBER,
-        COUNT(*) AS bagNum,
+        COUNT(MCR.ID) AS bagNum,
         IFNULL(SUM(MCR.WEIGHT), 0) AS weight,
-        MDR.DISPOSAL_TIME
-        FROM MW_DISPOSAL_RECORD MDR
-        LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDR.ID = MDRI.DISPOSAL_RECORD_ID
-        LEFT JOIN MW_COLLECT_RECORD MCR ON MDR.ID = MDRI.COLLECT_RECORD_ID
+        MDHR.DISPOSAL_TIME
+        FROM MW_DISPOSAL_HANDLE_RECORD MDHR
+        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHR.ID
         <where>
-            MCR.STATUS = 4
             <if test="disposalRecordId != null">
-                AND MDR.ID = #{disposalRecordId}
+                AND MDHR.DISPOSAL_RECORD_ID = #{disposalRecordId}
             </if>
         </where>
-        GROUP BY MCR.BOX_ID
+        GROUP BY MCR.BOX_NUMBER
     </select>
-    <select id="disposalReportByType" resultType="com.sinata.system.domain.vo.MwDisposalRecordReportVO">
+    <select id="disposalReceiveReport" resultType="com.sinata.system.domain.vo.MwDisposalRecordReportVO">
         SELECT MCR.ID, MDR.RECEIVE_TIME, MDR.DISPOSAL_TIME, MCR.WASTE_TYPE, MCR.WEIGHT, MCR.STATUS
         FROM MW_DISPOSAL_RECORD MDR
         LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.DISPOSAL_RECORD_ID = MDR.ID
@@ -88,24 +113,8 @@
             <if test="query.departmentId != null">
                 AND MDR.DEPARTMENT_ID = #{query.departmentId}
             </if>
-            <!-- 判断 type 为 1 或 2 的状态条件 -->
-            <choose>
-                <when test="type == 1">
-                    AND MCR.STATUS = 3
-                </when>
-                <when test="type == 2">
-                    AND MCR.STATUS = 4
-                </when>
-            </choose>
             <if test="query.startTime != null and query.endTime != null">
-                <choose>
-                    <when test="type == 1">
-                        AND MDR.RECEIVE_TIME BETWEEN #{query.startTime} AND #{query.endTime}
-                    </when>
-                    <when test="type == 2">
-                        AND MDR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime}
-                    </when>
-                </choose>
+                AND MDR.RECEIVE_TIME BETWEEN #{query.startTime} AND #{query.endTime}
             </if>
             <if test="query.wasteTypeCodeList != null and query.wasteTypeCodeList.size()>0">
                 AND MCR.WASTE_TYPE IN
@@ -119,18 +128,17 @@
         SELECT MCR.ID,
         MCR.WASTE_TYPE,
         MCR.WEIGHT,
-        MDR.DISPOSAL_TIME AS collectTime
-        FROM MW_DISPOSAL_RECORD MDR
-        LEFT JOIN MW_DISPOSAL_RECORD_ITEM MDRI ON MDRI.DISPOSAL_RECORD_ID = MDR.ID
-        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.ID = MDRI.COLLECT_RECORD_ID
-        LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MCR.DEPARTMENT_ID
+        MDHR.DISPOSAL_TIME AS collectTime
+        FROM MW_DISPOSAL_HANDLE_RECORD MDHR
+        LEFT JOIN MW_COLLECT_RECORD MCR ON MCR.DISPOSAL_HANDLE_RECORD_ID = MDHR.ID
+        LEFT JOIN SYS_DEPARTMENT SD ON SD.ID = MDHR.DEPARTMENT_ID
         <where>
             MDR.DEL_FLAG = 0
             <if test="treeCode != null and treeCode != ''">
                 AND SD.TREE_CODE LIKE CONCAT(#{treeCode}, '%')
             </if>
             <if test="query.startTime != null and query.endTime != null">
-                AND MDR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime}
+                AND MDHR.DISPOSAL_TIME BETWEEN #{query.startTime} AND #{query.endTime}
             </if>
             <if test="query.wasteTypeList != null and query.wasteTypeList.size()>0">
                 AND MCR.WASTE_TYPE IN

--
Gitblit v1.7.1