From 0a8119461bea9b913819d302b8820f1dc2cf420c Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期二, 07 一月 2025 17:07:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java |  171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 167 insertions(+), 4 deletions(-)

diff --git a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
index 8e57d4b..f4878b3 100644
--- a/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
+++ b/medicalWaste-system/src/main/java/com/sinata/system/service/biz/ScreenService.java
@@ -7,16 +7,25 @@
 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;
+import com.sinata.system.domain.vo.CarDistributionVO;
 import com.sinata.system.domain.vo.DepartmentTagInfoVO;
+import com.sinata.system.domain.vo.MedicalInstitutionCollectListVO;
+import com.sinata.system.domain.vo.MedicalWasteCollectVO;
+import com.sinata.system.domain.vo.MwWarningRecordStaticsVO;
+import com.sinata.system.domain.vo.MwWarningRecordVO;
 import com.sinata.system.domain.vo.ScreenDepartmentVO;
 import com.sinata.system.domain.vo.SysDictDataVO;
 import com.sinata.system.domain.vo.TodayMedicalWastePieVO;
 import com.sinata.system.domain.vo.TotalCollectWeightByTypeVO;
 import com.sinata.system.enums.DepartmentEnum;
+import com.sinata.system.enums.WarningTypeEnum;
 import com.sinata.system.service.ISysDictDataService;
 import com.sinata.system.service.MwCollectRecordService;
 import com.sinata.system.service.MwDisposalRecordService;
+import com.sinata.system.service.MwTransitCarCollectPointService;
+import com.sinata.system.service.MwWarningRecordService;
 import com.sinata.system.service.SysDepartmentService;
 import lombok.RequiredArgsConstructor;
 import org.jetbrains.annotations.NotNull;
@@ -25,6 +34,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +52,8 @@
     private final MwCollectRecordService mwCollectRecordService;
     private final ISysDictDataService sysDictDataService;
     private final MwDisposalRecordService mwDisposalRecordService;
+    private final MwWarningRecordService mwWarningRecordService;
+    private final MwTransitCarCollectPointService mwTransitCarCollectPointService;
 
     /**
      * 机构分布-获取机构列表
@@ -103,11 +115,8 @@
      * @return
      */
     public List<TodayMedicalWastePieVO> todayMedicalWastePie() {
-        SysDepartment nanNingDepartment = getNanNingDepartment();
-        //查询南宁市下面的医疗机构
-        List<SysDepartment> list = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, nanNingDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
-        List<Long> departmentIdList = list.stream().map(SysDepartment::getId).collect(Collectors.toList());
         List<TodayMedicalWastePieVO> todayMedicalWastePieVOList = new ArrayList<>();
+        List<Long> departmentIdList = getNanNingMedicalInsitutionIdList();
         if (CollUtils.isEmpty(departmentIdList)) {
             return todayMedicalWastePieVOList;
         }
@@ -133,6 +142,16 @@
         return todayMedicalWastePieVOList;
     }
 
+    /**
+     * 南宁市医疗单位id列表
+     *
+     * @return
+     */
+    public List<Long> getNanNingMedicalInsitutionIdList() {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        List<SysDepartment> list = sysDepartmentService.lambdaQuery().likeRight(SysDepartment::getTreeCode, nanNingDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.MEDICAL_INSTITUTION.getCode()).list();
+        return list.stream().map(SysDepartment::getId).collect(Collectors.toList());
+    }
     /**
      * 各类型医废收集总量
      *
@@ -183,5 +202,149 @@
         return vo;
     }
 
+    /**
+     * 医疗机构收集情况
+     *
+     * @return
+     */
+    public List<MedicalInstitutionCollectListVO> medicalInstitutionCollectList() {
+        // 获取南宁市医疗机构ID列表
+        List<Long> nanNingMedicalInstitutionIdList = getNanNingMedicalInsitutionIdList();
+        if (CollUtils.isEmpty(nanNingMedicalInstitutionIdList)) {
+            return CollUtils.emptyList();
+        }
 
+        // 查询收集记录
+        List<MwCollectRecord> collectRecordList = mwCollectRecordService.lambdaQuery()
+                .in(MwCollectRecord::getDepartmentId, nanNingMedicalInstitutionIdList)
+                .list();
+        if (CollUtils.isEmpty(collectRecordList)) {
+            return CollUtils.emptyList();
+        }
+
+        // 查询医废类型
+        List<SysDictDataVO> medicalWasteTypeList = sysDictDataService.medicalWasteTypeList();
+
+        // 根据医院分组
+        Map<String, List<MwCollectRecord>> recordGroupByDepartment = collectRecordList.stream()
+                .collect(Collectors.groupingBy(MwCollectRecord::getHospitalName));
+
+        // 构建结果列表
+        return recordGroupByDepartment.entrySet().stream()
+                .map(entry -> buildMedicalInstitutionCollectVO(entry.getKey(), entry.getValue(), medicalWasteTypeList))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 构建医疗机构收集情况视图对象
+     *
+     * @param hospitalName
+     * @param records
+     * @param medicalWasteTypeList
+     * @return
+     */
+    private MedicalInstitutionCollectListVO buildMedicalInstitutionCollectVO(String hospitalName, List<MwCollectRecord> records, List<SysDictDataVO> medicalWasteTypeList) {
+        // 医院基础信息
+        MedicalInstitutionCollectListVO vo = new MedicalInstitutionCollectListVO();
+        vo.setHospitalName(hospitalName);
+
+        // 根据医废类型分组
+        Map<Long, List<MwCollectRecord>> collectRecordGroupByWasteType = records.stream()
+                .collect(Collectors.groupingBy(MwCollectRecord::getWasteType));
+
+        // 构建医废类型统计信息
+        List<MedicalWasteCollectVO> medicalWasteList = medicalWasteTypeList.stream()
+                .map(sysDictDataVO -> buildMedicalWasteCollectVO(sysDictDataVO, collectRecordGroupByWasteType))
+                .collect(Collectors.toList());
+        vo.setMedicalWasteList(medicalWasteList);
+
+        return vo;
+    }
+
+    /**
+     * 封装医废类型统计信息
+     *
+     * @param sysDictDataVO
+     * @param collectRecordGroupByWasteType
+     * @return
+     */
+    private MedicalWasteCollectVO buildMedicalWasteCollectVO(SysDictDataVO sysDictDataVO, Map<Long, List<MwCollectRecord>> collectRecordGroupByWasteType) {
+        MedicalWasteCollectVO medicalWasteCollectVO = new MedicalWasteCollectVO();
+        medicalWasteCollectVO.setWasteTypeStr(sysDictDataVO.getDictLabel());
+
+        // 获取当前类型的医废记录
+        List<MwCollectRecord> mwCollectRecords = collectRecordGroupByWasteType.get(sysDictDataVO.getDictCode());
+        if (CollUtils.isNotEmpty(mwCollectRecords)) {
+            medicalWasteCollectVO.setBagNum(mwCollectRecords.size());
+            medicalWasteCollectVO.setWeight(mwCollectRecords.stream()
+                    .map(MwCollectRecord::getWeight)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add));
+        } else {
+            medicalWasteCollectVO.setBagNum(0);
+            medicalWasteCollectVO.setWeight(BigDecimal.ZERO);
+        }
+        return medicalWasteCollectVO;
+    }
+
+    /**
+     * 预警记录统计
+     *
+     * @return
+     */
+    public List<MwWarningRecordStaticsVO> warningRecordStaticsList() {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        List<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().eq(MwWarningRecord::getDepartmentId, nanNingDepartment.getId()).list();
+        if (CollUtils.isEmpty(warningRecordList)) {
+            return CollUtils.emptyList();
+        }
+        return Arrays.stream(WarningTypeEnum.values()).map(item -> buildWarningRecordStaticsVO(item, warningRecordList)).collect(Collectors.toList());
+    }
+
+    /**
+     * 构建预警记录统计视图对象
+     *
+     * @param item
+     * @param warningRecordList
+     * @return
+     */
+    private MwWarningRecordStaticsVO buildWarningRecordStaticsVO(WarningTypeEnum item, List<MwWarningRecord> warningRecordList) {
+        MwWarningRecordStaticsVO vo = new MwWarningRecordStaticsVO();
+        vo.setType(item.getCode());
+        vo.setTypeName(item.getDesc());
+        vo.setCount(warningRecordList.stream().filter(record -> record.getType().equals(item.getCode())).count());
+        return vo;
+    }
+
+    /**
+     * 根据预警类型查询预警详情
+     *
+     * @param type
+     * @return
+     */
+    public List<MwWarningRecordVO> queryWarningRecordDetailByType(Integer type) {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        List<MwWarningRecord> warningRecordList = mwWarningRecordService.lambdaQuery().eq(MwWarningRecord::getDepartmentId, nanNingDepartment.getId()).eq(MwWarningRecord::getType, type).list();
+        return BeanUtils.copyToList(warningRecordList, MwWarningRecordVO.class);
+    }
+
+    /**
+     * 车辆分布
+     *
+     * @return
+     */
+    public List<CarDistributionVO> queryCarDistribution() {
+        SysDepartment nanNingDepartment = getNanNingDepartment();
+        //查询车辆分布列表
+        return mwTransitCarCollectPointService.queryCarListByTreeCode(nanNingDepartment.getTreeCode());
+    }
+
+    /**
+     * 车辆分布详情
+     *
+     * @param id
+     * @return
+     */
+    public CarDistributionVO queryCarDistributionDetail(Long id) {
+        return mwTransitCarCollectPointService.queryCarDistributionDetail(id);
+    }
 }

--
Gitblit v1.7.1