package com.supervision.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.model.*; import com.supervision.service.*; import com.supervision.vo.ask.DiagnosisPrimaryVO; import com.supervision.vo.manage.MedicalRecPageResVO; import com.supervision.vo.result.DiagnoseProcessReqVo; import com.supervision.vo.result.DiagnoseProcessResVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Slf4j public class DiagnoseHallServiceImpl implements DiagnoseHallService { private final ProcessService processService; private final MedicalRecService medicalRecService; private final DiagnosisPrimaryService diagnosisPrimaryService; private final AskPatientAnswerService askPatientAnswerService; private final CommonDicService commonDicService; private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService; @Override public IPage queryDiagnoseProcessPageList(Integer pageNum, Integer pageSize, DiagnoseProcessReqVo diagnoseProcessReqVo) { Assert.notEmpty(diagnoseProcessReqVo.getUserId(),"用户id不允许为空"); // 1.查询诊断列表 diagnoseProcessReqVo.setDeleteFlag(0); Page diagnoseProcessResVoPage = processService.queryUserDiagnoseProcessPageList(new Page<>(pageNum, pageSize), diagnoseProcessReqVo); if (diagnoseProcessResVoPage.getSize()==0){ return diagnoseProcessResVoPage; } List records = diagnoseProcessResVoPage.getRecords(); // 2.根据processIds查询诊断疾病名 List processIds = records.stream().map(DiagnoseProcessResVo::getProcessId).distinct().collect(Collectors.toList()); List diagnosisPrimaryVOS = diagnosisPrimaryService.queryAskPrimaryListByProcessIds(processIds); Map> diagnosisPrimaryVOsMap = diagnosisPrimaryVOS.stream().collect(Collectors.groupingBy(DiagnosisPrimary::getProcessId)); // 3.把疾病名填充到诊断列表中 List medicalRecIds = records.stream().map(DiagnoseProcessResVo::getMedicalRecId).filter(Objects::nonNull).collect(Collectors.toList()); Map askPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_silent"); Map dynamicAskPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_dynamic"); diagnoseProcessResVoPage.getRecords().forEach(vo->{ List list = diagnosisPrimaryVOsMap.getOrDefault(vo.getProcessId(),new ArrayList<>()); vo.setPrimaryDiseaseNameList(list.stream().map(DiagnosisPrimaryVO::getPrimaryDiseaseName).distinct().collect(Collectors.toList())); vo.setPatientSilentVideo(askPatientAnswerMap.getOrDefault(vo.getMedicalRecId(),new AskPatientAnswer()).getAnswerResourceId()); vo.setPatientDummyVideo(dynamicAskPatientAnswerMap.getOrDefault(vo.getMedicalRecId(),new AskPatientAnswer()).getAnswerResourceId()); }); return diagnoseProcessResVoPage; } @Override public IPage queryMedicalRecPageList(Integer pageNum, Integer pageSize) { IPage medicalRecPageResVOIPage = medicalRecService.queryMedicalRecManagePage(null, null, null, pageNum, pageSize); if (CollUtil.isEmpty(medicalRecPageResVOIPage.getRecords())){ return medicalRecPageResVOIPage; } List medicalRecIds = medicalRecPageResVOIPage.getRecords().stream().map(MedicalRecPageResVO::getMedicalId).collect(Collectors.toList()); Map askPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_silent"); medicalRecPageResVOIPage.getRecords().forEach(vo->{ vo.setPatientSilentVideo(askPatientAnswerMap.getOrDefault(vo.getMedicalId(),new AskPatientAnswer()).getAnswerResourceId()); }); return medicalRecPageResVOIPage; } private Map queryAskPatientSystemVideoAnswer(List medicalRecIds,String code){ Assert.notEmpty(code,"code不允许为空"); if (CollUtil.isEmpty(medicalRecIds)){ return new HashMap<>(); } CommonDic one = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, code).one(); Assert.notNull(one,"字典项目未配置"); AskTemplateQuestionLibrary questionLibrary = askTemplateQuestionLibraryService.lambdaQuery() .eq(AskTemplateQuestionLibrary::getDictId, one.getId()).eq(AskTemplateQuestionLibrary::getDictId, one.getId()).one(); Assert.notNull(questionLibrary,code+"对应的问题库未配置"); List askPatientAnswerList = askPatientAnswerService.lambdaQuery() .in(AskPatientAnswer::getMedicalId, medicalRecIds) .eq(AskPatientAnswer::getLibraryQuestionId, questionLibrary.getId()).list(); if (CollUtil.isEmpty(askPatientAnswerList)){ return new HashMap<>(); } return askPatientAnswerList.stream().collect(Collectors.toMap(AskPatientAnswer::getMedicalId, o -> o)); } }