You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
virtual-patient/virtual-patient-web/src/main/java/com/supervision/service/impl/DiagnoseHallServiceImpl.java

117 lines
6.0 KiB
Java

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.MedicalRecPageReqVO;
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<DiagnoseProcessResVo> queryDiagnoseProcessPageList(Integer pageNum, Integer pageSize,
DiagnoseProcessReqVo diagnoseProcessReqVo) {
Assert.notEmpty(diagnoseProcessReqVo.getUserId(),"用户id不允许为空");
// 1.查询诊断列表
diagnoseProcessReqVo.setDeleteFlag(0);
Page<DiagnoseProcessResVo> diagnoseProcessResVoPage = processService.queryUserDiagnoseProcessPageList(new Page<>(pageNum, pageSize), diagnoseProcessReqVo);
if (diagnoseProcessResVoPage.getSize()==0){
return diagnoseProcessResVoPage;
}
List<DiagnoseProcessResVo> records = diagnoseProcessResVoPage.getRecords();
// 2.根据processIds查询诊断疾病名
List<String> processIds = records.stream().map(DiagnoseProcessResVo::getProcessId).distinct().collect(Collectors.toList());
List<DiagnosisPrimaryVO> diagnosisPrimaryVOS = diagnosisPrimaryService.queryAskPrimaryListByProcessIds(processIds);
Map<String, List<DiagnosisPrimaryVO>> diagnosisPrimaryVOsMap = diagnosisPrimaryVOS.stream().collect(Collectors.groupingBy(DiagnosisPrimary::getProcessId));
// 3.把疾病名填充到诊断列表中
List<String> medicalRecIds = records.stream().map(DiagnoseProcessResVo::getMedicalRecId).filter(Objects::nonNull).collect(Collectors.toList());
11 months ago
Map<String, AskPatientAnswer> askPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_silent");
Map<String, AskPatientAnswer> dynamicAskPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_dynamic");
diagnoseProcessResVoPage.getRecords().forEach(vo->{
List<DiagnosisPrimaryVO> 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<MedicalRecPageResVO> queryMedicalRecPageList(Integer pageNum, Integer pageSize) {
MedicalRecPageReqVO medicalRecPageReqVO = new MedicalRecPageReqVO();
medicalRecPageReqVO.setStatus(1);// 设置为已发布的数据
IPage<MedicalRecPageResVO> medicalRecPageResVOIPage = medicalRecService.queryMedicalRecManagePage(medicalRecPageReqVO, pageNum, pageSize);
if (CollUtil.isEmpty(medicalRecPageResVOIPage.getRecords())){
return medicalRecPageResVOIPage;
}
List<String> medicalRecIds = medicalRecPageResVOIPage.getRecords().stream().map(MedicalRecPageResVO::getMedicalId).collect(Collectors.toList());
11 months ago
Map<String, AskPatientAnswer> askPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_silent");
Map<String, AskPatientAnswer> dynamicAskPatientAnswerMap = queryAskPatientSystemVideoAnswer(medicalRecIds,"system_dynamic");
medicalRecPageResVOIPage.getRecords().forEach(vo->{
vo.setPatientSilentVideo(askPatientAnswerMap.getOrDefault(vo.getMedicalId(),new AskPatientAnswer()).getAnswerResourceId());
vo.setPatientDummyVideo(dynamicAskPatientAnswerMap.getOrDefault(vo.getMedicalId(),new AskPatientAnswer()).getAnswerResourceId());
});
return medicalRecPageResVOIPage;
}
11 months ago
private Map<String,AskPatientAnswer> queryAskPatientSystemVideoAnswer(List<String> medicalRecIds,String code){
11 months ago
Assert.notEmpty(code,"code不允许为空");
if (CollUtil.isEmpty(medicalRecIds)){
return new HashMap<>();
}
11 months ago
CommonDic one = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, code).one();
Assert.notNull(one,"字典项目未配置");
11 months ago
AskTemplateQuestionLibrary questionLibrary = askTemplateQuestionLibraryService.lambdaQuery()
.eq(AskTemplateQuestionLibrary::getDictId, one.getId()).eq(AskTemplateQuestionLibrary::getDictId, one.getId()).one();
11 months ago
Assert.notNull(questionLibrary,code+"对应的问题库未配置");
List<AskPatientAnswer> askPatientAnswerList = askPatientAnswerService.lambdaQuery()
.in(AskPatientAnswer::getMedicalId, medicalRecIds)
11 months ago
.eq(AskPatientAnswer::getLibraryQuestionId, questionLibrary.getId()).list();
if (CollUtil.isEmpty(askPatientAnswerList)){
return new HashMap<>();
}
return askPatientAnswerList.stream().collect(Collectors.toMap(AskPatientAnswer::getMedicalId, o -> o));
}
}