luodangjia
2025-01-07 0a8119461bea9b913819d302b8820f1dc2cf420c
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);
    }
}