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