diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java index e9a1e95b..78b4abad 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java @@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.manage.pojo.vo.*; import com.supervision.manage.service.MedicalRecManageService; import com.supervision.model.Disease; -import com.supervision.vo.manage.DiseaseAncillaryResVo; -import com.supervision.vo.manage.DiseasePhysicalResVo; -import com.supervision.vo.manage.DiseaseTreatmentPlanResVo; -import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.model.MedicalRec; +import com.supervision.vo.manage.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -147,21 +145,7 @@ public class MedicalRecManageController { @Operation(summary = "导入病例信息") @PostMapping("/uploadMedical") - public UploadDiseaseResVo uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception { - return medicalRecManageService.uploadMedical(multipartFile); + public void uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception { + medicalRecManageService.uploadMedical(multipartFile); } - - - - @Operation(summary = "生成数字人") - @PostMapping("/generateDigitalHuman") - public UploadDiseaseResVo uploadDisease() throws Exception { -// 数字人状态才可以生成数字人 - // 1.判断病例是否存在 - // 2.判断是否已经创建数字人 - // 3.创建数字人 :数字人创建返回 sid 绑定sid和病例id - // 4.查询数字人生成状态 - return null; - } - } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalAnswerVideoResVo.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalAnswerVideoResVo.java index b4e6fcb1..caed1ee7 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalAnswerVideoResVo.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalAnswerVideoResVo.java @@ -1,6 +1,7 @@ package com.supervision.manage.pojo.vo; +import com.supervision.vo.manage.MedicalRecQaVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java index 2bbbd87e..5aba43f8 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java @@ -1,6 +1,7 @@ package com.supervision.manage.pojo.vo; import com.supervision.model.MedicalRec; +import com.supervision.vo.manage.MedicalRecQaVO; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java index 809bbb0e..6f1d3db4 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java @@ -17,8 +17,10 @@ public interface AskTemplateQuestionLibraryManageService extends IService code); + void saveSimilarityQuestion(List code, String medicalRecId); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java index 3e2ac6bf..bd02110d 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java @@ -3,10 +3,8 @@ package com.supervision.manage.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.manage.pojo.vo.*; import com.supervision.model.Disease; -import com.supervision.vo.manage.DiseaseAncillaryResVo; -import com.supervision.vo.manage.DiseasePhysicalResVo; -import com.supervision.vo.manage.DiseaseTreatmentPlanResVo; -import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.model.MedicalRec; +import com.supervision.vo.manage.*; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; @@ -48,9 +46,22 @@ public interface MedicalRecManageService { Boolean updateMedicalStatus(String medicalRecId, Integer status); + + /** + * 下载模板 + * @param response + * @throws Exception + */ void downloadMedicalTemplate(HttpServletResponse response) throws Exception; - UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception; + + /** + * 流程自動化 上傳病歷模板導入 + * @param multipartFile + * @throws Exception + */ + void uploadMedical(MultipartFile multipartFile) throws Exception; + } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java index d517d2c1..8f81e08b 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java @@ -4,21 +4,16 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.dto.ClinicalInterviewDTO; -import com.supervision.dto.QaKnowledgeDTO; import com.supervision.manage.service.AskTemplateQuestionLibraryManageService; import com.supervision.manage.service.QaKnowledgeManageService; import com.supervision.mapper.AskTemplateQuestionLibraryMapper; import com.supervision.model.AskTemplateQuestionLibrary; import com.supervision.model.AskTemplateQuestionSimilarity; -import com.supervision.model.ConfigAncillaryItem; -import com.supervision.model.ConfigPhysicalTool; import com.supervision.service.*; import com.supervision.util.RedisSequenceUtil; -import com.supervision.vo.manage.AskQuestionLibraryReqVo; -import com.supervision.vo.manage.AskQuestionLibraryResVo; +import com.supervision.vo.manage.MedicalRecQaVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -27,7 +22,6 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Objects; /** @@ -49,8 +43,10 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl clinicalInterviewDTOS) { + public void saveSimilarityQuestion(List clinicalInterviewDTOS, String medicalRecId) { + + List medicalRecQaVOList = new ArrayList<>(); + // 1.判定条件集合是否存在 ArrayList consultationList = new ArrayList(); for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) { @@ -85,15 +85,26 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl askTemplateQuestionSimilarities = askTemplateQuestionSimilarityService.queryAskTemplateQuestionSimilarityByLibraryId(libraryId); + medicalRecQaVO.setQuestionList(askTemplateQuestionSimilarities); + AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestionByNameZhAndSimilarityQuestion(consultationII, questionIntentRecognition); if (null == askTemplateQuestionSimilarity) { AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity(); @@ -115,12 +126,16 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl CollUtil.isEmpty(dto.getErrorCodeEnums())) .forEach(dto -> { - String questionLibraryId = askQuestionLibraryManageService.saveQuestionLibrary(dto.toAskTemplateQuestionLibrary(),false); + String questionLibraryId = askQuestionLibraryManageService.saveQuestionLibrary(dto.toAskTemplateQuestionLibrary(), false); dto.setLibraryQuestionId(questionLibraryId); }); - log.info("generationMedicalAnswerVideo : 扩充知识库耗时:{} s" , timer.intervalSecond()); + log.info("generationMedicalAnswerVideo : 扩充知识库耗时:{} s", timer.intervalSecond()); timer.restart(); qaKnowledgeManageService.refreshQaKnowledge(); - log.info("generationMedicalAnswerVideo : 刷新知识库耗时:{} s" , timer.intervalSecond()); + log.info("generationMedicalAnswerVideo : 刷新知识库耗时:{} s", timer.intervalSecond()); timer.restart(); // 生成错误信息excel File file = writeExcel(medicalRecAnswerExcelDTOS); - log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时:{} s" , timer.intervalSecond()); + log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时:{} s", timer.intervalSecond()); FileResource fileResource; try { @@ -101,12 +101,13 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { FileUtil.del(file); } - return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS,fileResource.getId()); + return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS, fileResource.getId()); } /** * 数据合法性校验,填充必要的数据,为进一步处理准备 - * @param medicalId 病历id + * + * @param medicalId 病历id * @param medicalRecAnswerExcelDTOS 数据列表 */ private void medicalRecAnswerExcelDoAction(String medicalId, List medicalRecAnswerExcelDTOS) { @@ -123,28 +124,28 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { // 查询类目字段 List questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list(); - medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction( - questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList,questionMap)); + medicalRecAnswerExcelDTOS.forEach(dto -> dto.doAction( + questionLibraryList, askPatientAnswerList, materialLibraryList, questionTypeDicList, questionMap)); } - public void updateAskPatientAnswer(List medicalRecAnswerExcelDTOS,String medicalId){ + public void updateAskPatientAnswer(List medicalRecAnswerExcelDTOS, String medicalId) { - if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){ + if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)) { return; } for (MedicalRecAnswerExcelDTO dto : medicalRecAnswerExcelDTOS) { - if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())){ + if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())) { // 校验不通过,不进行入库处理 continue; } String askPatientAnswerId = dto.getAskPatientAnswerId(); - if (StrUtil.isNotEmpty(askPatientAnswerId)){ + if (StrUtil.isNotEmpty(askPatientAnswerId)) { //更新操作 AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); - askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId,askPatientAnswerId) - .set(AskPatientAnswer::getAnswerResourceId,askPatientAnswer.getAnswerResourceId()) + askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId, askPatientAnswerId) + .set(AskPatientAnswer::getAnswerResourceId, askPatientAnswer.getAnswerResourceId()) .update(); - }else { + } else { //新增操作 AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); askPatientAnswer.setMedicalId(medicalId); @@ -155,11 +156,12 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { /** * 组装返回消息 + * * @param medicalRecAnswerExcelDTOS 数据 - * @param fileId 文件id + * @param fileId 文件id * @return MedicalAnswerVideoResVo */ - private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List medicalRecAnswerExcelDTOS,String fileId) { + private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List medicalRecAnswerExcelDTOS, String fileId) { MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo(); @@ -193,8 +195,8 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { File templateFile = FileUtil.writeFromStream( resourceLoader.getResource(MEDICAL_ANSWER_TEMPLATE_ERROR_EXCEL_PATH).getInputStream(), - FileUtil.createTempFile("导入详情",".xlsx",true), true); - try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){ + FileUtil.createTempFile("导入详情", ".xlsx", true), true); + try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)) { writer.setHeaderAlias(MedicalRecAnswerExcelDTO.WRITE_HEADER_ALIAS); writer.setOnlyAlias(true); writer.write(errorList, true); @@ -206,9 +208,10 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { /** * 校验行头 + * * @param reader */ - private void assertTitle(ExcelReader reader){ + private void assertTitle(ExcelReader reader) { List titleList = reader.readRow(0); Assert.isTrue(CollUtil.isNotEmpty(titleList), "表头格式有误,请重新导入"); for (int i = 0; i < MedicalRecAnswerExcelDTO.READ_ANSWER_VIDEO_TITLE.size(); i++) { diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionSimilarityMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionSimilarityMapper.java index 28a820d7..12728109 100644 --- a/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionSimilarityMapper.java +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionSimilarityMapper.java @@ -3,6 +3,8 @@ package com.supervision.mapper; import com.supervision.model.AskTemplateQuestionSimilarity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** * @author Administrator * @description 针对表【vp_ask_template_question_similarity(相似问问题库)】的数据库操作Mapper @@ -19,6 +21,13 @@ public interface AskTemplateQuestionSimilarityMapper extends BaseMapper queryAskTemplateQuestionSimilarityByLibraryId(String libraryId); } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionSimilarityService.java b/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionSimilarityService.java index d34d31f8..763b4841 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionSimilarityService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/AskTemplateQuestionSimilarityService.java @@ -41,4 +41,11 @@ public interface AskTemplateQuestionSimilarityService extends IService queryAskTemplateQuestionSimilarityByLibraryId(String libraryId); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java b/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java index 39d91d16..d1c2a8aa 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java @@ -5,6 +5,9 @@ import com.supervision.model.MedicalRec; import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.vo.manage.MedicalRecPageReqVO; import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.vo.manage.MedicalRecQaVO; + +import java.util.List; /** * @author flevance @@ -15,6 +18,7 @@ public interface MedicalRecService extends IService { /** * 分页查询病历管理列表 + * * @param medicalRecPageReqVO * @param pageNum * @param pageSize @@ -24,10 +28,20 @@ public interface MedicalRecService extends IService { /** * 生成一个病历编码,是最大的病历编码+1 - * @param code 医院名称缩写 + * + * @param code 医院名称缩写 * @param gender 性别 M 男 F 女 * @param id 记录ID */ - void updateMedicalRecNo(String code,String gender,String id); + void updateMedicalRecNo(String code, String gender, String id); + + + /** + * 保存问询问题 + * + * @param qaList 病历问题列表 + * @param medicalRecId 病历id + */ + void saveAskPatientAnswerListByMedicalRec(List qaList, String medicalRecId); } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionSimilarityServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionSimilarityServiceImpl.java index ea971c50..541c7cc5 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionSimilarityServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/AskTemplateQuestionSimilarityServiceImpl.java @@ -62,6 +62,17 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl queryAskTemplateQuestionSimilarityByLibraryId(String libraryId) { + return this.baseMapper.queryAskTemplateQuestionSimilarityByLibraryId(libraryId); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseServiceImpl.java index 58993854..374729c6 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseServiceImpl.java @@ -9,6 +9,7 @@ import com.supervision.dto.UploadDiseaseDTO; import com.supervision.model.Disease; import com.supervision.service.DiseaseService; import com.supervision.mapper.DiseaseMapper; +import com.supervision.util.RedisSequenceUtil; import com.supervision.util.StringChartUtil; import com.supervision.util.UserUtil; import com.supervision.vo.manage.DiseaseReqVo; @@ -99,16 +100,18 @@ public class DiseaseServiceImpl extends ServiceImpl String mainSymptom = uploadDiseaseDTO.getMainSymptom(); int diseaseType = StringChartUtil.countChar(categoryCode, '/') > 0 ? 1 : 0; Disease disease = new Disease(); - disease.setCode(categoryCode); disease.setDiseaseName(diseaseClassificationName); disease.setDiseaseNameAlias(commonName); disease.setStatus(0); disease.setDiseaseType(diseaseType); if (diseaseType == 1) { + disease.setCode(RedisSequenceUtil.getComplexDiseaseNo()); List codeIdList = Arrays.stream(categoryCode.split("/")).toList(); List listByDiseaseCode = queryDiseaseListByDiseaseCode(codeIdList); Assert.isTrue(listByDiseaseCode.size() != codeIdList.size(), "请检查复合疾病中的单一疾病是否存在"); disease.setContainDiseaseIds(listByDiseaseCode); + }else { + disease.setCode(categoryCode); } disease.setSymptom(mainSymptom); disease.setCreateUserId(UserUtil.getUser().getId()); diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java index cd129e69..1aad0412 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java @@ -1,27 +1,56 @@ package com.supervision.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.exception.BusinessException; +import com.supervision.model.AskPatientAnswer; +import com.supervision.model.AskTemplateQuestionLibrary; +import com.supervision.model.CommonDic; import com.supervision.model.MedicalRec; -import com.supervision.service.MedicalRecService; +import com.supervision.service.*; import com.supervision.mapper.MedicalRecMapper; import com.supervision.vo.manage.MedicalRecPageReqVO; import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.vo.manage.MedicalRecQaVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + /** -* @author flevance -* @description 针对表【vp_medical_rec(病历表)】的数据库操作Service实现 -* @createDate 2023-11-03 11:25:43 -*/ + * @author flevance + * @description 针对表【vp_medical_rec(病历表)】的数据库操作Service实现 + * @createDate 2023-11-03 11:25:43 + */ @Service public class MedicalRecServiceImpl extends ServiceImpl - implements MedicalRecService{ + implements MedicalRecService { + + + @Autowired + private CommonDicService commonDicService; + @Autowired + private AskTemplateQuestionLibraryService askTemplateQuestionLibraryService; + + @Autowired + private AskPatientAnswerService askPatientAnswerService; + + @Autowired + private AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService; /** * 病历管理-列表查询 + * * @param medicalRecPageReqVO * @param pageNum * @param pageSize @@ -29,19 +58,114 @@ public class MedicalRecServiceImpl extends ServiceImpl queryMedicalRecManagePage(MedicalRecPageReqVO medicalRecPageReqVO, Integer pageNum, Integer pageSize) { - return this.baseMapper.queryMedicalRecManagePage(medicalRecPageReqVO, new Page<>(pageNum,pageSize)); + return this.baseMapper.queryMedicalRecManagePage(medicalRecPageReqVO, new Page<>(pageNum, pageSize)); } /** * 生成一个病历编码,是最大的病历编码+1 - * @param code 医院名称缩写 + * + * @param code 医院名称缩写 * @param gender 性别 M 男 F 女 - * @param id 记录ID + * @param id 记录ID */ @Override - public void updateMedicalRecNo(String code,String gender,String id) { + public void updateMedicalRecNo(String code, String gender, String id) { this.baseMapper.updateMedicalRecNo(code, gender, id); } + + + /** + * 保存问询问题 + * + * @param qaList 病历问题列表 + * @param medicalRecId 病历id + * answerType 0系统默认问题,1病历问询问题 + */ + @Override + public void saveAskPatientAnswerListByMedicalRec(List qaList, String medicalRecId) { + List medicalRecQaVOS = queryMedicalDefaultAnswer(null); + saveAskPatientAnswer(qaList, medicalRecId, 1); + saveAskPatientAnswer(medicalRecQaVOS, medicalRecId, 0); + } + + + private void saveAskPatientAnswer(List qaList, String medicalRecId, Integer answerType) { + if (CollUtil.isEmpty(qaList)) { + return; + } + + for (MedicalRecQaVO medicalRecQaVO : qaList) { + if (StrUtil.isBlank(medicalRecQaVO.getLibraryQuestionId())) { + throw new BusinessException("问题ID不能为空"); + } + AskPatientAnswer askPatientAnswer = new AskPatientAnswer(); + askPatientAnswer.setLibraryQuestionId(medicalRecQaVO.getLibraryQuestionId()); + askPatientAnswer.setAnswer(medicalRecQaVO.getMedicalRecAnswer()); + askPatientAnswer.setMedicalId(medicalRecId); + askPatientAnswer.setAnswerType(answerType); + askPatientAnswer.setQuestion(CollUtil.getFirst(medicalRecQaVO.getQuestionList())); + askPatientAnswer.insert(); + } + } + + + public List queryMedicalDefaultAnswer(String medicalRecId) { + + CommonDic systemDic = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, "system").one(); + Assert.notNull(systemDic, "未找到系统问题"); + List childCommonDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT") + .eq(CommonDic::getParentId, systemDic.getId()).list(); + Assert.notNull(childCommonDicList, "未找到系统问题下的子问题"); + Map childCommonDicMap = childCommonDicList.stream().collect(Collectors.toMap(CommonDic::getId, Function.identity())); + final Map> libraryMapQuestion = new HashMap<>(); + // 从疾病问题记录中查询数据 + if (StrUtil.isNotEmpty(medicalRecId)) { + List askPatientAnswerList = askPatientAnswerService.lambdaQuery() + .eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getAnswerType, 0).list(); + + final Map libraryMap = new HashMap<>(); + + if (CollUtil.isNotEmpty(askPatientAnswerList)) { + // 查询问题库信息 + List questionIds = askPatientAnswerList.stream() + .map(AskPatientAnswer::getLibraryQuestionId).filter(Objects::nonNull).collect(Collectors.toList()); + Map> libraryMapQuestionTmp = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryIds(questionIds); + libraryMapQuestion.putAll(libraryMapQuestionTmp); + Map libraryMapTemp = askTemplateQuestionLibraryService.listByIds(questionIds) + .stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity())); + libraryMap.putAll(libraryMapTemp); + } + return askPatientAnswerList.stream().map(e -> { + MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO(); + medicalRecQaVO.setId(e.getId()); + medicalRecQaVO.setLibraryQuestionId(e.getLibraryQuestionId()); + medicalRecQaVO.setMedicalRecAnswer(e.getAnswer()); + // 组装问题列表 和 字典数据 + AskTemplateQuestionLibrary askTemplateQuestionLibrary = libraryMap.get(e.getLibraryQuestionId()); + if (Objects.nonNull(askTemplateQuestionLibrary)) { + medicalRecQaVO.setQuestionList(libraryMapQuestion.get(e.getLibraryQuestionId())); + Long dictId = askTemplateQuestionLibrary.getDictId(); + if (Objects.nonNull(dictId)) { + medicalRecQaVO.setDictId(dictId); + medicalRecQaVO.setDictNamePath(childCommonDicMap.getOrDefault(dictId, new CommonDic()).getNameZhPath()); + } + } + return medicalRecQaVO; + }).collect(Collectors.toList()); + } + + // 从问题库中查询数据 + List commonDicIdList = childCommonDicList.stream().map(CommonDic::getId).collect(Collectors.toList()); + List askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().in(AskTemplateQuestionLibrary::getDictId, commonDicIdList).list(); + return askTemplateQuestionLibraryList.stream().map(e -> { + MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO(); + medicalRecQaVO.setLibraryQuestionId(e.getId()); + medicalRecQaVO.setDictNamePath(childCommonDicMap.getOrDefault(e.getDictId(), new CommonDic()).getNameZhPath()); + medicalRecQaVO.setQuestionList(libraryMapQuestion.get(e.getId())); + return medicalRecQaVO; + }).collect(Collectors.toList()); + } + } diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java index 0e9cfea9..e5d4db87 100644 --- a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java @@ -33,4 +33,8 @@ public class MedicalRecPageResVO { @Schema(description = "病历状态 1:未上线 2:上线") private String medicalStatus; + + @Schema(description = "病历状态(导入)00创建病历 01数字人生成中 02 完成") + private String medicalDataStatus; + } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecQaVO.java similarity index 95% rename from virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java rename to virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecQaVO.java index ca25b42f..fd7120fe 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecQaVO.java @@ -1,4 +1,4 @@ -package com.supervision.manage.pojo.vo; +package com.supervision.vo.manage; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml index d72d6e20..538b83f3 100644 --- a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml @@ -38,4 +38,15 @@ + + + + diff --git a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml index 86a35545..2c1ef53a 100644 --- a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml @@ -69,6 +69,7 @@ t1.patient_head_pic as patientHeadPic, t1.patient_self_desc as patientSelfDesc, t1.status as medicalStatus, + t1.medical_status as medicalDataStatus, if(t1.update_time is null, t1.create_time, t1.update_time) as time from vp_medical_rec t1 left join vp_disease t3 on t1.disease_id = t3.id