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.查询诊断列表 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 = queryAskPatientSilentVideoAnswer(medicalRecIds); 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()); }); 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 = queryAskPatientSilentVideoAnswer(medicalRecIds); medicalRecPageResVOIPage.getRecords().forEach(vo->{ vo.setPatientSilentVideo(askPatientAnswerMap.getOrDefault(vo.getMedicalId(),new AskPatientAnswer()).getAnswerResourceId()); }); return medicalRecPageResVOIPage; } /** * 疾病静默视频信息 * @param medicalRecIds * @return */ Map queryAskPatientSilentVideoAnswer(List medicalRecIds){ if (CollUtil.isEmpty(medicalRecIds)){ return new HashMap<>(); } CommonDic one = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, "system_silent").one(); Assert.notNull(one,"字典项目未配置"); AskTemplateQuestionLibrary silentInfo = askTemplateQuestionLibraryService.lambdaQuery() .eq(AskTemplateQuestionLibrary::getDictId, one.getId()).eq(AskTemplateQuestionLibrary::getDictId, one.getId()).one(); Assert.notNull(silentInfo,"静默视频未配置"); List askPatientAnswerList = askPatientAnswerService.lambdaQuery() .in(AskPatientAnswer::getMedicalId, medicalRecIds) .eq(AskPatientAnswer::getLibraryQuestionId, silentInfo.getId()).list(); if (CollUtil.isEmpty(askPatientAnswerList)){ return new HashMap<>(); } return askPatientAnswerList.stream().collect(Collectors.toMap(AskPatientAnswer::getMedicalId, o -> o)); } }