| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private final MwCollectRecordService mwCollectRecordService; |
| | | private final ISysDictDataService sysDictDataService; |
| | | private final MwDisposalRecordService mwDisposalRecordService; |
| | | private final MwWarningRecordService mwWarningRecordService; |
| | | private final MwTransitCarCollectPointService mwTransitCarCollectPointService; |
| | | |
| | | /** |
| | | * 机构分布-获取机构列表 |
| | |
| | | * @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; |
| | | } |
| | |
| | | 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()); |
| | | } |
| | | /** |
| | | * 各类型医废收集总量 |
| | | * |
| | |
| | | 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); |
| | | } |
| | | } |