From dc7c7b1ce70b3ac0efbc4b3729b0dd766936979b Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Wed, 31 Jan 2024 10:38:54 +0800 Subject: [PATCH] manage : fix preGenerationMedicalAnswerVideo --- .../MedicalRecManageController.java | 17 +++- .../manage/dto/MedicalRecAnswerExcelDTO.java | 34 ++++++- .../pojo/vo/MedicalAnswerVideoResVo.java | 8 ++ .../service/AnswerVideoResourceService.java | 5 +- .../service/MedicalRecManageService.java | 4 +- .../impl/MedicalRecManageServiceImpl.java | 11 ++- .../impl/OfflineAnswerVideoResource.java | 99 +++++++++++++------ .../VirtualPatientManageApplicationTests.java | 2 +- 8 files changed, 132 insertions(+), 48 deletions(-) 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 ca6eedcc..6c3b24a3 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 @@ -106,17 +106,24 @@ public class MedicalRecManageController { } - @ApiOperation("导入疾病问题回答") - @PostMapping("/uploadMedicalAnswer") + @ApiOperation("预导入疾病问题回答") + @PostMapping("/preUploadMedicalAnswer") public MedicalAnswerVideoResVo uploadMedicalAnswer(@ApiParam("文件") @RequestParam("file") MultipartFile multipartFile, - @ApiParam("病例id") @RequestParam("medicalRecId") String medicalRecId) throws Exception { + @ApiParam("病例id") @RequestParam(value = "medicalRecId",required = false) String medicalRecId) throws Exception { - return medicalRecManageService.uploadMedicalAnswer(multipartFile, medicalRecId); + return medicalRecManageService.preUploadMedicalAnswer(multipartFile, medicalRecId); } - // 下载疾病问题模板 + @ApiOperation("查询病例默认问题") + @PostMapping("/queryMedicalDefaultAnswer") + public MedicalAnswerVideoResVo queryMedicalDefaultAnswer(@ApiParam("病例id") + @RequestParam(value = "medicalRecId",required = false) String medicalRecId) { + + return medicalRecManageService.queryMedicalDefaultAnswer(medicalRecId); + } + } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/dto/MedicalRecAnswerExcelDTO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/dto/MedicalRecAnswerExcelDTO.java index d781bb9a..7ff09f72 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/dto/MedicalRecAnswerExcelDTO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/dto/MedicalRecAnswerExcelDTO.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.supervision.model.AskPatientAnswer; import com.supervision.model.AskTemplateQuestionLibrary; +import com.supervision.model.CommonDic; import com.supervision.model.MaterialLibrary; import lombok.Data; @@ -21,7 +22,7 @@ public class MedicalRecAnswerExcelDTO { private String questionTypeOne; /** - * 问诊类目2 + * 问诊类目2 对应于 vp_ask_template_question_library 表中的 dict_id对应的 name_zh */ @Alias(value = "问诊类目Ⅱ") private String questionTypeTwo; @@ -55,7 +56,7 @@ public class MedicalRecAnswerExcelDTO { private String libraryQuestionId; /** - * 问诊问题id + * 问诊问题id 对应于 vp_ask_patient_answer 表中的 id */ private String askPatientAnswerId; @@ -64,6 +65,10 @@ public class MedicalRecAnswerExcelDTO { */ private String answerResourceId; + private String dictId; + + private String dictNamePath; + public static final List READ_ANSWER_VIDEO_TITLE = CollUtil.newArrayList("问诊类目Ⅰ", "问诊类目Ⅱ", "* 知识", "* 回答","* 视频名称"); @@ -76,11 +81,13 @@ public class MedicalRecAnswerExcelDTO { public void doAction(List questionLibraryList, List askPatientAnswerList, - List materialLibraryList){ + List materialLibraryList, + List questionTypeDicList){ this.absentCheck(); this.matchQuestion(questionLibraryList); this.matchAskPatientAnswer(askPatientAnswerList); this.matchAnswerResource(materialLibraryList); + this.matchQuestionDicId(questionTypeDicList); } public AskPatientAnswer toAskPatientAnswer(){ @@ -189,6 +196,24 @@ public class MedicalRecAnswerExcelDTO { errorCodeEnums.add(ErrorCodeEnum.ANSWER_VIDEO_NAME_NOT_FIND); } + public void matchQuestionDicId(List questionTypeDicList){ + if (StrUtil.isEmpty(this.questionTypeTwo)){ + return; + } + if(CollUtil.isEmpty(questionTypeDicList)){ + errorCodeEnums.add(ErrorCodeEnum.DICE_NOT_FIND); + } + + for (CommonDic questionTypeDic : questionTypeDicList) { + if (this.questionTypeTwo.equals(questionTypeDic.getNameZh())){ + this.dictId = String.valueOf(questionTypeDic.getId()); + this.dictNamePath = questionTypeDic.getNameZhPath(); + return; + } + } + errorCodeEnums.add(ErrorCodeEnum.ANSWER_VIDEO_NAME_NOT_FIND); + } + private static Map getReadAlias(){ Map map = new LinkedHashMap<>(); @@ -217,7 +242,8 @@ public class MedicalRecAnswerExcelDTO { ANSWER_EMPTY("0004","回答不能为空"), ANSWER_VIDEO_NAME_EMPTY("0005","视频名称不能为空"), QUESTION_NOT_FIND("40001","知识未找到"), - ANSWER_VIDEO_NAME_NOT_FIND("40002","视频不存在"); + ANSWER_VIDEO_NAME_NOT_FIND("40002","视频不存在"), + DICE_NOT_FIND("40003","类目字典码值未找到"); private String code; private String desc; 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 3e088cef..a5460b38 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,11 +1,19 @@ package com.supervision.manage.pojo.vo; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class MedicalAnswerVideoResVo { + @ApiModelProperty("消息内容") private String message; + @ApiModelProperty("文件id") private String fileId; + + @ApiModelProperty("应答策略") + private List qaList; } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/AnswerVideoResourceService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/AnswerVideoResourceService.java index c56ff87d..4586bb2e 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/AnswerVideoResourceService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/AnswerVideoResourceService.java @@ -1,8 +1,5 @@ package com.supervision.manage.service; - - import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo; - import java.io.InputStream; /** @@ -10,5 +7,5 @@ import java.io.InputStream; **/ public interface AnswerVideoResourceService { - MedicalAnswerVideoResVo generationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception; + MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception; } 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 c97cb256..bcbb66c4 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 @@ -41,5 +41,7 @@ public interface MedicalRecManageService { List querySingleDiseaseListByDropList(); - MedicalAnswerVideoResVo uploadMedicalAnswer(MultipartFile multipartFile, String medicalRecId) throws Exception; + MedicalAnswerVideoResVo preUploadMedicalAnswer(MultipartFile multipartFile, String medicalRecId) throws Exception; + + MedicalAnswerVideoResVo queryMedicalDefaultAnswer(String medicalRecId); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java index 1856570b..08709a95 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java @@ -251,12 +251,15 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { } @Override - public MedicalAnswerVideoResVo uploadMedicalAnswer(MultipartFile multipartFile, String medicalRecId) throws Exception { + public MedicalAnswerVideoResVo preUploadMedicalAnswer(MultipartFile multipartFile, String medicalRecId) throws Exception { - // 读取上传的文件内容 - InputStream inputStream = multipartFile.getInputStream(); + return answerVideoResourceService.preGenerationMedicalAnswerVideo(multipartFile.getInputStream(),medicalRecId); - return answerVideoResourceService.generationMedicalAnswerVideo(inputStream,medicalRecId); + } + + @Override + public MedicalAnswerVideoResVo queryMedicalDefaultAnswer(String medicalRecId) { + return null; } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java index c164a06d..e42e79c7 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java @@ -11,16 +11,11 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.supervision.manage.dto.MedicalRecAnswerExcelDTO; import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo; +import com.supervision.manage.pojo.vo.MedicalRecQaVO; import com.supervision.manage.service.AnswerVideoResourceService; import com.supervision.manage.service.FileManageService; -import com.supervision.model.AskPatientAnswer; -import com.supervision.model.AskTemplateQuestionLibrary; -import com.supervision.model.FileResource; -import com.supervision.model.MaterialLibrary; -import com.supervision.service.AskPatientAnswerService; -import com.supervision.service.AskTemplateQuestionLibraryService; -import com.supervision.service.FileResourceService; -import com.supervision.service.MaterialLibraryService; +import com.supervision.model.*; +import com.supervision.service.*; import com.supervision.util.MinioUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -56,42 +51,86 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { private final FileManageService fileManageService; + private final CommonDicService commonDicService; + @Override - public MedicalAnswerVideoResVo generationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception { + public MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception { TimeInterval timer = DateUtil.timer(); ExcelReader reader = ExcelUtil.getReader(bookStream); - log.info("generationMedicalAnswerVideo : 读取文件耗时:{} s" , timer.intervalSecond()); - //校验行头 + assertTitle(reader); List medicalRecAnswerExcelDTOS = reader.readAll(MedicalRecAnswerExcelDTO.class); - //数据合法性校验,填充不要的数据,为进一步处理准备 - List questionLibraryList = askTemplateQuestionLibraryService.list(); - List askPatientAnswerList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list(); - List materialLibraryList = materialLibraryService.list(); - medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction(questionLibraryList,askPatientAnswerList,materialLibraryList)); - - // 保存诊断问询数据 - updateAskPatientAnswer(medicalRecAnswerExcelDTOS,medicalId); + medicalRecAnswerExcelDoAction(medicalId, medicalRecAnswerExcelDTOS); + timer.restart(); // 生成错误信息excel File file = writeExcel(medicalRecAnswerExcelDTOS); + log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时:{} s" , timer.intervalSecond()); + FileResource fileResource = fileManageService.uploadFile(file); FileUtil.del(file); - //组装返回消息 + return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS,fileResource.getId()); + } + + /** + * 数据合法性校验,填充必要的数据,为进一步处理准备 + * @param medicalId 病历id + * @param medicalRecAnswerExcelDTOS 数据列表 + */ + private void medicalRecAnswerExcelDoAction(String medicalId, List medicalRecAnswerExcelDTOS) { + + // 查询问题库问题 + List questionLibraryList = askTemplateQuestionLibraryService.list(); + // 疾病id为空,不查询数据 + List askPatientAnswerList = StrUtil.isEmpty(medicalId) ? + CollUtil.newArrayList() : + askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list(); + // 查询资源库资源 + List materialLibraryList = materialLibraryService.list(); + // 查询类目字段 + List questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list(); + + medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction( + questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList)); + } + + /** + * 组装返回消息 + * @param medicalRecAnswerExcelDTOS 数据 + * @param fileId 文件id + * @return MedicalAnswerVideoResVo + */ + private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List medicalRecAnswerExcelDTOS,String fileId) { + MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo(); - medicalAnswerVideoResVo.setFileId(fileResource.getId()); - String message = StrUtil.format("共导入数据{}条,失败{}条",medicalRecAnswerExcelDTOS.size(), + + medicalAnswerVideoResVo.setFileId(fileId); + String message = StrUtil.format("共导入数据{}条,失败{}条。",medicalRecAnswerExcelDTOS.size(), medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).count()); medicalAnswerVideoResVo.setMessage(message); + List medicalRecQaVOList = medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isEmpty(dto.getErrorCodeEnums())).map(dto -> { + MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO(); + medicalRecQaVO.setId(dto.getAskPatientAnswerId()); + medicalRecQaVO.setLibraryQuestionId(dto.getLibraryQuestionId()); + if (StrUtil.isNotEmpty(dto.getAnswerResourceId())) { + medicalRecQaVO.setDictId(Long.parseLong(dto.getDictId())); + } + medicalRecQaVO.setDictNamePath(dto.getDictNamePath()); + medicalRecQaVO.setAnswerResourceId(dto.getAnswerResourceId()); + medicalRecQaVO.setMedicalRecAnswer(dto.getAnswer()); + return medicalRecQaVO; + }).collect(Collectors.toList()); + medicalAnswerVideoResVo.setQaList(medicalRecQaVOList); + return medicalAnswerVideoResVo; - } + } public void updateAskPatientAnswer(List medicalRecAnswerExcelDTOS,String medicalId){ @@ -121,13 +160,10 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { public File writeExcel(List medicalRecAnswerExcelDTOS) throws Exception { - if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){ - return null; - } - List errorList = medicalRecAnswerExcelDTOS.stream() - .filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList()); + /* List errorList = medicalRecAnswerExcelDTOS.stream() + .filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList());*/ - List> rowDataList = errorList.stream().map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList()); + List> rowDataList = medicalRecAnswerExcelDTOS.stream().map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList()); File templateFile = downLoadTemplate(templateResourceId); try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){ writer.setHeaderAlias(MedicalRecAnswerExcelDTO.WRITE_HEADER_ALIAS); @@ -158,6 +194,11 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { } return tempFile; } + + /** + * 校验行头 + * @param reader + */ private void assertTitle(ExcelReader reader){ List titleList = reader.readRow(0); Assert.notEmpty(titleList,"标题行为空"); diff --git a/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java b/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java index 8faedd8a..9a359c6e 100644 --- a/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java +++ b/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java @@ -83,7 +83,7 @@ class VirtualPatientManageApplicationTests { BufferedInputStream inputStream = FileUtil.getInputStream("F:\\tmp\\excel\\病历问诊问题导入模板.xlsx"); - MedicalAnswerVideoResVo medicalAnswerVideoResVo = answerVideoResourceService.generationMedicalAnswerVideo(inputStream, "1111"); + MedicalAnswerVideoResVo medicalAnswerVideoResVo = answerVideoResourceService.preGenerationMedicalAnswerVideo(inputStream, "1111"); System.out.println(JSONUtil.toJsonStr(medicalAnswerVideoResVo)); }