diff --git a/virtual-patient-common/src/main/java/com/supervision/config/WebConfig.java b/virtual-patient-common/src/main/java/com/supervision/config/WebConfig.java index 1b9715e6..07c3102c 100644 --- a/virtual-patient-common/src/main/java/com/supervision/config/WebConfig.java +++ b/virtual-patient-common/src/main/java/com/supervision/config/WebConfig.java @@ -48,6 +48,8 @@ public class WebConfig implements WebMvcConfigurer { paths.add("/fileManage/downloadFile"); paths.add("/aqLibrary/downloadQuestionLibraryTemplate"); paths.add("/medicalRecManage/downloadMedicalAnswerTemplate"); + //下载病例知识库接口 + paths.add("/medicalRecManage/downloadMedicalTemplate"); paths.add("/qaKnowledge/**"); // 开发环境,放开不校验token.每次修改这里需要重启(热部署不行) // paths.add("/**"); diff --git a/virtual-patient-graph/src/main/resources/nebulaMapper/MedicalRecDao.xml b/virtual-patient-graph/src/main/resources/nebulaMapper/AskTemplateQuestionLibraryManageService.xml similarity index 100% rename from virtual-patient-graph/src/main/resources/nebulaMapper/MedicalRecDao.xml rename to virtual-patient-graph/src/main/resources/nebulaMapper/AskTemplateQuestionLibraryManageService.xml diff --git a/virtual-patient-manage/pom.xml b/virtual-patient-manage/pom.xml index 90bebfcb..918135f7 100644 --- a/virtual-patient-manage/pom.xml +++ b/virtual-patient-manage/pom.xml @@ -85,11 +85,11 @@ <version>${project.version}</version> </dependency> - <dependency> - <groupId>com.supervision</groupId> - <artifactId>virtual-patient-common</artifactId> - <version>${project.version}</version> - </dependency> +<!-- <dependency>--> +<!-- <groupId>com.supervision</groupId>--> +<!-- <artifactId>virtual-patient-common</artifactId>--> +<!-- <version>${project.version}</version>--> +<!-- </dependency>--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseAncillaryManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseAncillaryManageController.java index 5a9b65b7..b9cd2a31 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseAncillaryManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseAncillaryManageController.java @@ -21,7 +21,7 @@ import java.util.List; @RequiredArgsConstructor public class DiseaseAncillaryManageController { - private final DiseaseAncillaryManageService diseaseAncillaryManageService; + private final DiseaseAncillaryManageService diseaseAncillaryManageService; @Operation(summary = "新增辅助检查信息") @PostMapping("/save") diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseManageController.java index a6b86579..687bbff6 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/diseasemanage/DiseaseManageController.java @@ -1,15 +1,19 @@ package com.supervision.manage.controller.diseasemanage; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.manage.pojo.vo.UploadDiseaseResVo; import com.supervision.manage.service.DiseaseManageService; +import com.supervision.manage.service.MedicalRecManageService; import com.supervision.model.Disease; import com.supervision.vo.manage.DiseaseReqVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.SchemaProperty; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "疾病管理") @RestController @@ -19,6 +23,7 @@ public class DiseaseManageController { private final DiseaseManageService diseaseManageService; + private final MedicalRecManageService medicalRecManageService; @PostMapping("/save") @@ -56,11 +61,4 @@ public class DiseaseManageController { } - - - - - - - } 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 23d5bed1..e9a1e95b 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 @@ -1,10 +1,7 @@ package com.supervision.manage.controller.medicalrec; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo; -import com.supervision.manage.pojo.vo.MedicalRecInfoVO; -import com.supervision.manage.pojo.vo.MedicalRecManageVO; -import com.supervision.manage.pojo.vo.MedicalRecQaVO; +import com.supervision.manage.pojo.vo.*; import com.supervision.manage.service.MedicalRecManageService; import com.supervision.model.Disease; import com.supervision.vo.manage.DiseaseAncillaryResVo; @@ -141,4 +138,30 @@ public class MedicalRecManageController { } + @Operation(summary = "下载病例导入模板") + @GetMapping("/downloadMedicalTemplate") + public void downloadDiseaseTemplate(HttpServletResponse response) throws Exception { + medicalRecManageService.downloadMedicalTemplate(response); + } + + + @Operation(summary = "导入病例信息") + @PostMapping("/uploadMedical") + public UploadDiseaseResVo uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception { + return 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/enums/DiseasePhysicalEnum.java b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseasePhysicalEnum.java new file mode 100644 index 00000000..9dd02481 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseasePhysicalEnum.java @@ -0,0 +1,41 @@ +package com.supervision.manage.enums; + +import lombok.Getter; + +/** + * @Author:longbao + * @Date:2024/10/30 10:02 + * @Description: 体格检查 枚举 + */ +@Getter +public enum DiseasePhysicalEnum { + + PRELIMINARY_DIAGNOSTIC_BASIS("初步诊断依据", 1, 0), + DIAGNOSTIC_CONFIRMATION_BASIS("证实诊断依据", 1, 0), + COMPREHENSIVE_BASIS_FOR_DIAGNOSIS("全面依据", 1, 0), + DIFFERENTIAL_DIAGNOSTIC_BASIS("鉴别依据", 1, 0), + ; + + private String description; + private int yes; + private int no; + + DiseasePhysicalEnum(String description, int yes, int no) { + this.description = description; + this.yes = yes; + this.no = no; + } + + + public static int fromCode(String description) { + for (DiseasePhysicalEnum status : DiseasePhysicalEnum.values()) { + if (status.getDescription().equals(description)) { + return status.getYes(); + } else { + return status.getNo(); + } + } + throw new IllegalArgumentException("Invalid status code: " + description); + } + +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseaseTypeEnum.java b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseaseTypeEnum.java new file mode 100644 index 00000000..00fe7e17 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseaseTypeEnum.java @@ -0,0 +1,37 @@ +package com.supervision.manage.enums; + +import lombok.Getter; + +/** + * @Author:longbao + * @Date:2024/10/30 10:02 + * @Description: + */ +@Getter +public enum DiseaseTypeEnum { + + SINGLE_DISEASE("单一疾病", 0), + CONFORMING_DISEASE("复合疾病", 1), + ; + + private String description; + private int code; + + DiseaseTypeEnum(String description, int code) { + this.description = description; + this.code = code; + } + + + public static DiseaseTypeEnum fromCode(String description) { + for (DiseaseTypeEnum status : DiseaseTypeEnum.values()) { + if (status.getDescription().equals(description)) { + return status; + } else { + return null; + } + } + throw new IllegalArgumentException("Invalid status code: " + description); + } + +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalStatusEnum.java b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalStatusEnum.java new file mode 100644 index 00000000..80b4e0ed --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalStatusEnum.java @@ -0,0 +1,27 @@ +package com.supervision.manage.enums; + +import lombok.Getter; + +/** + * @Author:longbao + * @Date:2024/11/1 17:44 + * @Description: + */ +@Getter +public enum MedicalStatusEnum { + + CREATE("病例生成状态","00"), + CREATE_MEDICAL("病例生成状态","01"), + CREATE_DATA_HUMAN("病例生成状态","02"), + CREATE_DATA_HUMAN_OVER("病例生成状态","03"), + OVER("病例生成状态","00"), + ; + + private String description; + private String code; + + MedicalStatusEnum(String description, String code) { + this.description = description; + this.code = code; + } +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalTypeEnum.java b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalTypeEnum.java new file mode 100644 index 00000000..891a3ceb --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalTypeEnum.java @@ -0,0 +1,24 @@ +package com.supervision.manage.enums; + +import lombok.Getter; + +/** + * @Author:longbao + * @Date:2024/11/1 17:44 + * @Description: + */ +@Getter +public enum MedicalTypeEnum { + + SYSTEM_CREATE("系统创建","00"), + TEMPLATE_IMPORT("v3.0病例模板导入","01"), + ; + + private String description; + private String code; + + MedicalTypeEnum(String description, String code) { + this.description = description; + this.code = code; + } +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/enums/VirtualSheetNameEnum.java b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/VirtualSheetNameEnum.java new file mode 100644 index 00000000..f115373e --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/enums/VirtualSheetNameEnum.java @@ -0,0 +1,37 @@ +package com.supervision.manage.enums; + +import lombok.Getter; + +/** + * @Author:longbao + * @Date:2024/11/1 11:36 + * @Description: 虚拟病人模板sheet名 + */ +@Getter +public enum VirtualSheetNameEnum { + + BASIC_INFO("基本信息"), + CLINICAL_INTERVIEW("临床问诊"), + PHYSICAL_EXAMINATION("体格检查"), + AUXILIARY_EXAMINATION("辅助检查"), + TREATMENT_PLAN("处置计划"), + SUMMARY_OF_EVALUATION_RESULTS("评估结果概述"), + ; + + private String description; + + VirtualSheetNameEnum(String description) { + this.description = description; + } + + public static String fromCode(String description) { + for (VirtualSheetNameEnum status : VirtualSheetNameEnum.values()) { + if (status.getDescription().equals(description)) { + return status.description; + } else { + continue; + } + } + throw new IllegalArgumentException("Invalid status code: " + description); + } +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/UploadDiseaseResVo.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/UploadDiseaseResVo.java new file mode 100644 index 00000000..852d47c0 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/UploadDiseaseResVo.java @@ -0,0 +1,19 @@ +package com.supervision.manage.pojo.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class UploadDiseaseResVo { + + @Schema(description = "总数据条数") + private int totalCount; + + @Schema(description = "失败数据条数") + private int failCount; + + @Schema(description = "文件id") + private String fileId; + +} 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 new file mode 100644 index 00000000..809bbb0e --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java @@ -0,0 +1,24 @@ +package com.supervision.manage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.dto.ClinicalInterviewDTO; +import com.supervision.model.AskTemplateQuestionLibrary; + +import java.util.List; + +/** +* @author flevance +* @description 针对表【vp_ask_template_question_library(诊断问询意图问题库)】的数据库操作Service +* @createDate 2023-11-03 11:13:26 +*/ +public interface AskTemplateQuestionLibraryManageService extends IService<AskTemplateQuestionLibrary> { + + + public String queryByName(String nameZh); + + /** + * 保存问题 + * @param code + */ + void saveSimilarityQuestion(List<ClinicalInterviewDTO> code); +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseAncillaryManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseAncillaryManageService.java index 619ff224..f49488bb 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseAncillaryManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseAncillaryManageService.java @@ -1,5 +1,7 @@ package com.supervision.manage.service; +import com.supervision.dto.SupplementaryTestDto; +import com.supervision.model.Disease; import com.supervision.model.DiseaseAncillary; import com.supervision.vo.ask.AncillaryItemReqVo; import com.supervision.vo.ask.ConfigAncillaryItemResVO; @@ -27,4 +29,10 @@ public interface DiseaseAncillaryManageService { List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo); + /** + * 保存辅助检查 + * @param disease + * @param supplementaryTestDtos + */ + void batchSaveAncillaryExaminationList(Disease disease, List<SupplementaryTestDto> supplementaryTestDtos); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseasePhysicalManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseasePhysicalManageService.java index 6c12b40c..81473658 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseasePhysicalManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseasePhysicalManageService.java @@ -1,10 +1,11 @@ package com.supervision.manage.service; +import com.supervision.dto.UploadPhysicalExaminationDTO; +import com.supervision.model.Disease; import com.supervision.model.DiseasePhysical; import com.supervision.vo.manage.DiseasePhysicalLocationNodeVo; import com.supervision.vo.manage.DiseasePhysicalResVo; import com.supervision.vo.manage.DiseasePhysicalStrResVo; -import com.supervision.vo.manage.PhysicalLocationNode; import java.util.List; @@ -28,4 +29,11 @@ public interface DiseasePhysicalManageService { boolean deleteByDiseaseId(String diseaseId); List<DiseasePhysicalLocationNodeVo> queryTree(String diseaseId, String toolId); + + /** + * 保存体格检查 + * @param diseaseList 疾病信息 + * @param uploadPhysicalExaminationDTOS 体格检查信息 + */ + void batchSavePhysicalExaminationList(Disease diseaseList, List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS); } 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 d4b66086..3e2ac6bf 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 @@ -1,10 +1,7 @@ package com.supervision.manage.service; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo; -import com.supervision.manage.pojo.vo.MedicalRecInfoVO; -import com.supervision.manage.pojo.vo.MedicalRecManageVO; -import com.supervision.manage.pojo.vo.MedicalRecQaVO; +import com.supervision.manage.pojo.vo.*; import com.supervision.model.Disease; import com.supervision.vo.manage.DiseaseAncillaryResVo; import com.supervision.vo.manage.DiseasePhysicalResVo; @@ -50,4 +47,10 @@ public interface MedicalRecManageService { void downloadMedicalAnswerTemplate(HttpServletResponse response) throws Exception; Boolean updateMedicalStatus(String medicalRecId, Integer status); + + void downloadMedicalTemplate(HttpServletResponse response) throws Exception; + + UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception; + + } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java index 46dd0180..732e3051 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java @@ -30,7 +30,6 @@ import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; @@ -197,7 +196,7 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa log.info("uploadQuestionLibrary : 读取文件耗时:{} s" , timer.intervalSecond()); // 校验模板是否正确 - assertTitle(reader); + assertTitle(reader); List<UploadQuestionLibraryDTO> uploadQuestionLibraryDTOS = reader.readAll(UploadQuestionLibraryDTO.class); 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 new file mode 100644 index 00000000..d517d2c1 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java @@ -0,0 +1,128 @@ +package com.supervision.manage.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.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 lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author flevance + * @description 针对表【vp_ask_template_question_library(诊断问询意图问题库)】的数据库操作Service实现 + * @createDate 2023-11-03 11:13:26 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<AskTemplateQuestionLibraryMapper, AskTemplateQuestionLibrary> + implements AskTemplateQuestionLibraryManageService { + + private final ConfigPhysicalToolService configPhysicalToolService; + + private final ConfigAncillaryItemService configAncillaryItemService; + + private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService; + + @Autowired + private CommonDicService commonDicService; + + private QaKnowledgeManageService qaKnowledgeService; + + + @Override + public String queryByName(String nameZh) { + return this.baseMapper.queryByName(nameZh); + } + + public String getMaxCode() { + AskTemplateQuestionLibrary askTemplateQuestionLibrary = super.getBaseMapper() + .selectOne(new QueryWrapper<AskTemplateQuestionLibrary>().select("max(code) as code")); + if (Objects.isNull(askTemplateQuestionLibrary)) { + return null; + } + return askTemplateQuestionLibrary.getCode(); + } + + /** + * 模板导入-相似问题 + * + * @param clinicalInterviewDTOS + */ + @Override + public void saveSimilarityQuestion(List<ClinicalInterviewDTO> clinicalInterviewDTOS) { + // 1.判定条件集合是否存在 + ArrayList<String> consultationList = new ArrayList(); + for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) { + String consultationI = clinicalInterviewDTO.getConsultationI().trim(); + String consultationII = clinicalInterviewDTO.getConsultationII().trim(); + String consultation = "'" + consultationI + "/" + consultationII + "'"; + consultationList.add(consultation); + } + Long queryCommonDictTreeByCode = commonDicService.queryCommonDictTreeByCode(consultationList); + Assert.isTrue(queryCommonDictTreeByCode != clinicalInterviewDTOS.size(), "请检查临床问诊中的问诊1和2是否存在"); + + // 2.插入问题 + // 标准问题存在:增加问题为相似问题 + // 标准问题不存在:增加问题为标准问题并更新问题库 + for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) { + String consultationII = clinicalInterviewDTO.getConsultationII().trim(); + String questionIntentRecognition = clinicalInterviewDTO.getQuestionIntentRecognition(); + if (StringUtils.isNotEmpty(questionIntentRecognition)) { + String libraryId = queryByName(questionIntentRecognition); + if (StringUtils.isNotEmpty(libraryId)) { + AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestionByNameZhAndSimilarityQuestion(consultationII, questionIntentRecognition); + if (null == askTemplateQuestionSimilarity) { + AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity(); + similarity.setSimilarityQuestion(questionIntentRecognition); + similarity.setLibraryId(libraryId); + askTemplateQuestionSimilarityService.save(similarity); + } + } else { + // 获取nexCode 获取的是redis中的问题库 + String nextCode = RedisSequenceUtil.getQuestionLibraryCode(() -> { + String maxCode = getMaxCode(); + if (StrUtil.isNotEmpty(maxCode)) { + return Long.parseLong(StrUtil.removePrefix(maxCode, "Q")); + } + return null; + }); + AskTemplateQuestionLibrary askTemplateQuestionLibrary = new AskTemplateQuestionLibrary(); + askTemplateQuestionLibrary.setCode(nextCode); + askTemplateQuestionLibrary.setStandardQuestion(questionIntentRecognition); + save(askTemplateQuestionLibrary); + qaKnowledgeService.saveOrUpdateQuestionLibrary(CollUtil.newArrayList(askTemplateQuestionLibrary.getId())); + } + } + + } + } + +} + + + + diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseAncillaryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseAncillaryManageServiceImpl.java index e631b2a7..35c6e23b 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseAncillaryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseAncillaryManageServiceImpl.java @@ -5,10 +5,14 @@ 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.conditions.update.LambdaUpdateChainWrapper; +import com.supervision.dto.SupplementaryTestDto; import com.supervision.manage.service.DiseaseAncillaryManageService; +import com.supervision.model.ConfigAncillaryItem; +import com.supervision.model.Disease; import com.supervision.model.DiseaseAncillary; import com.supervision.service.ConfigAncillaryItemService; import com.supervision.service.DiseaseAncillaryService; +import com.supervision.util.UserUtil; import com.supervision.vo.ask.AncillaryItemReqVo; import com.supervision.vo.ask.ConfigAncillaryItemResVO; import com.supervision.vo.manage.DiseaseAncillaryResVo; @@ -17,10 +21,13 @@ import com.supervision.vo.result.ConfigAncillaryItemVo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import static cn.hutool.core.lang.Assert.isTrue; + @Service @RequiredArgsConstructor public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManageService { @@ -32,7 +39,7 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage @Override public List<DiseaseAncillaryResVo> queryListByDiseaseId(String diseaseId) { - Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"diseaseId不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(diseaseId), "diseaseId不能为空"); List<DiseaseAncillaryResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(diseaseId); diseaseAncillaryResVos.forEach(DiseaseAncillaryResVo::populateOther); return diseaseAncillaryResVos; @@ -40,7 +47,7 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage @Override public List<DiseaseAncillaryStrResVo> queryListStrByDiseaseId(String diseaseId) { - Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"diseaseId不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(diseaseId), "diseaseId不能为空"); List<DiseaseAncillaryStrResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListStrByDiseaseId(diseaseId); diseaseAncillaryResVos.forEach(DiseaseAncillaryStrResVo::populateOther); return diseaseAncillaryResVos; @@ -51,7 +58,7 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage assertDiseaseAncillary(diseaseAncillary); - Assert.isFalse(checkIfPresent(diseaseAncillary),"数据已存在!"); + Assert.isFalse(checkIfPresent(diseaseAncillary), "数据已存在!"); diseaseAncillaryService.save(diseaseAncillary); @@ -61,7 +68,7 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage @Override public boolean deleteDiseaseAncillary(String id) { - Assert.isTrue(StrUtil.isNotEmpty(id),"id 不允许为空"); + Assert.isTrue(StrUtil.isNotEmpty(id), "id 不允许为空"); return diseaseAncillaryService.removeById(id); } @@ -69,14 +76,14 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage @Override public boolean updateAncillary(DiseaseAncillary diseaseAncillary) { - Assert.isTrue(StrUtil.isNotEmpty(diseaseAncillary.getId()),"id 不允许为空"); + Assert.isTrue(StrUtil.isNotEmpty(diseaseAncillary.getId()), "id 不允许为空"); return diseaseAncillaryService.updateById(diseaseAncillary); } @Override public boolean deleteByDiseaseId(String diseaseId) { - Assert.notEmpty(diseaseId,"疾病id不能为空"); + Assert.notEmpty(diseaseId, "疾病id不能为空"); return diseaseAncillaryService.lambdaUpdate().eq(DiseaseAncillary::getDiseaseId, diseaseId).remove(); } @@ -84,17 +91,17 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage @Override public List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo) { List<ConfigAncillaryItemResVO> configAncillaryItemResVOS = configAncillaryItemService.queryAncillaryItemList(ancillaryItemReqVo); - if (CollUtil.isEmpty(configAncillaryItemResVOS) || StrUtil.isEmpty(ancillaryItemReqVo.getDiseaseId())){ + if (CollUtil.isEmpty(configAncillaryItemResVOS) || StrUtil.isEmpty(ancillaryItemReqVo.getDiseaseId())) { return configAncillaryItemResVOS; } List<DiseaseAncillaryResVo> diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(ancillaryItemReqVo.getDiseaseId()); - if (CollUtil.isEmpty(diseaseAncillaryResVos)){ + if (CollUtil.isEmpty(diseaseAncillaryResVos)) { return configAncillaryItemResVOS; } List<String> itemIds = diseaseAncillaryResVos.stream().map(DiseaseAncillary::getItemId).distinct().collect(Collectors.toList()); for (ConfigAncillaryItemResVO configAncillaryItemResVO : configAncillaryItemResVOS) { - if (CollUtil.isEmpty(configAncillaryItemResVO.getItemList())){ + if (CollUtil.isEmpty(configAncillaryItemResVO.getItemList())) { continue; } for (ConfigAncillaryItemVo itemVo : configAncillaryItemResVO.getItemList()) { @@ -106,42 +113,96 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage } - private void assertDiseaseAncillary(DiseaseAncillary diseaseAncillary){ + private void assertDiseaseAncillary(DiseaseAncillary diseaseAncillary) { - Assert.isNull(diseaseAncillary.getId(),"id不为空"); + Assert.isNull(diseaseAncillary.getId(), "id不为空"); - Assert.isTrue(StrUtil.isNotEmpty(diseaseAncillary.getDiseaseId()),"疾病id不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(diseaseAncillary.getDiseaseId()), "疾病id不能为空"); - Assert.notNull(diseaseAncillary.getPrimarilyDiagnosisCriteriaFlag(),"初步诊断依据不能为空"); + Assert.notNull(diseaseAncillary.getPrimarilyDiagnosisCriteriaFlag(), "初步诊断依据不能为空"); - Assert.notNull(diseaseAncillary.getBasisConfirmFlag(),"证实诊断依据不能为空"); + Assert.notNull(diseaseAncillary.getBasisConfirmFlag(), "证实诊断依据不能为空"); - Assert.notNull(diseaseAncillary.getBasisIdentificationFlag(),"鉴别诊断依据不能为空"); + Assert.notNull(diseaseAncillary.getBasisIdentificationFlag(), "鉴别诊断依据不能为空"); - Assert.notNull(diseaseAncillary.getFullCheckFlag(),"全面诊断不能为空"); + Assert.notNull(diseaseAncillary.getFullCheckFlag(), "全面诊断不能为空"); - Assert.notNull(diseaseAncillary.getDiagnosisAssessmentFlag(),"判断不能为空"); + Assert.notNull(diseaseAncillary.getDiagnosisAssessmentFlag(), "判断不能为空"); - Assert.notNull(diseaseAncillary.getRequireCheckFlag(),"是否必查不能为空"); + Assert.notNull(diseaseAncillary.getRequireCheckFlag(), "是否必查不能为空"); - Assert.notNull(diseaseAncillary.getDiagnosisAssessmentFlag(),"判断不能为空"); + Assert.notNull(diseaseAncillary.getDiagnosisAssessmentFlag(), "判断不能为空"); - Assert.notNull(diseaseAncillary.getExpectedDiagnosisResult(),"预期诊断结果不能为空"); + Assert.notNull(diseaseAncillary.getExpectedDiagnosisResult(), "预期诊断结果不能为空"); } - private boolean checkIfPresent(DiseaseAncillary diseaseAncillary){ + private boolean checkIfPresent(DiseaseAncillary diseaseAncillary) { return !Objects.isNull(findByDiseaseIdAndItemId(diseaseAncillary.getDiseaseId(), diseaseAncillary.getItemId())); } - private DiseaseAncillary findByDiseaseIdAndItemId(String diseaseId,String itemId){ + private DiseaseAncillary findByDiseaseIdAndItemId(String diseaseId, String itemId) { List<DiseaseAncillary> list = diseaseAncillaryService.lambdaQuery().eq(DiseaseAncillary::getDiseaseId, diseaseId).eq(DiseaseAncillary::getItemId, itemId).list(); - if (CollUtil.isEmpty(list)){ + if (CollUtil.isEmpty(list)) { return null; } return list.get(0); } + + + /** + * 保存辅助检查 + * + * @param disease + * @param supplementaryTestDtos + */ + @Override + public void batchSaveAncillaryExaminationList(Disease disease, List<SupplementaryTestDto> supplementaryTestDtos) { + List<DiseaseAncillary> diseaseAncillaries = new ArrayList<>(); + for (SupplementaryTestDto supplementaryTestDto : supplementaryTestDtos) { + + String firstLevelCategory = supplementaryTestDto.getFirstLevelCategory(); + String secondLevelCategory = supplementaryTestDto.getSecondLevelCategory(); + int preliminaryDiagnosisBasis = supplementaryTestDto.getPreliminaryDiagnosisBasis().equals("否") ? 0 : 1; + int confirmedDiagnosisBasis = supplementaryTestDto.getConfirmedDiagnosisBasis().equals("否") ? 0 : 1; + int differentialDiagnosisBasis = supplementaryTestDto.getDifferentialDiagnosisBasis().equals("否") ? 0 : 1; + int status = supplementaryTestDto.getStatus().equals("正常") ? 0 : 1; + int isRequiredCheck = supplementaryTestDto.getIsRequiredCheck().equals("否") ? 0 : 1; + String normalTestResult = supplementaryTestDto.getNormalTestResult(); + String patientTestResult = supplementaryTestDto.getPatientTestResult(); + + ConfigAncillaryItem configAncillaryItem = configAncillaryItemService.queryAncillaryItem(firstLevelCategory, secondLevelCategory); + + Assert.isTrue((null != configAncillaryItem), "辅助检查工具未找到:{}", secondLevelCategory); + + DiseaseAncillary diseaseAncillary = new DiseaseAncillary(); + diseaseAncillary.setDiseaseId(disease.getId()); + // 工具id + diseaseAncillary.setItemId(configAncillaryItem.getId()); + // 初步诊断依据 + diseaseAncillary.setPrimarilyDiagnosisCriteriaFlag(preliminaryDiagnosisBasis); + + // 证实诊断依据 + diseaseAncillary.setBasisConfirmFlag(confirmedDiagnosisBasis); + + //鉴别依据 + diseaseAncillary.setBasisIdentificationFlag(differentialDiagnosisBasis); + + diseaseAncillary.setExpectedDiagnosisResult(status); + + diseaseAncillary.setRequireCheckFlag(isRequiredCheck); + + diseaseAncillary.setNormalResult(normalTestResult); + + diseaseAncillary.setResult(patientTestResult); + + diseaseAncillary.setCreateUserId(UserUtil.getUser().getCreateUserId()); + diseaseAncillary.setUpdateUserId(UserUtil.getUser().getCreateUserId()); + diseaseAncillaries.add(diseaseAncillary); + } + diseaseAncillaryService.saveBatch(diseaseAncillaries); + } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseManageServiceImpl.java index 0b4f450a..f97957b1 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseManageServiceImpl.java @@ -16,15 +16,14 @@ import com.supervision.util.RedisSequenceUtil; import com.supervision.vo.manage.DiseaseReqVo; import com.supervision.vo.manage.DiseaseResVo; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; +@Slf4j @Service @RequiredArgsConstructor public class DiseaseManageServiceImpl implements DiseaseManageService { @@ -46,10 +45,10 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { assertDisease(disease); // 如果包含疾病id不为空,则为复合疾病 - if (CollUtil.isNotEmpty(disease.getContainDiseaseIds())){ + if (CollUtil.isNotEmpty(disease.getContainDiseaseIds())) { disease.setDiseaseType(1); } - if (StrUtil.isEmpty(disease.getCode())){ + if (StrUtil.isEmpty(disease.getCode())) { disease.setCode(RedisSequenceUtil.getComplexDiseaseNo()); } disease.setStatus(0); @@ -62,7 +61,7 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { @Override public boolean updateDisease(Disease disease) { - Assert.isTrue(StrUtil.isNotEmpty(disease.getId()),"id is not allow empty"); + Assert.isTrue(StrUtil.isNotEmpty(disease.getId()), "id is not allow empty"); return diseaseService.updateById(disease); @@ -73,10 +72,10 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { public boolean deleteDisease(String id) { Disease disease = diseaseService.getById(id); - if (Objects.isNull(disease)){ + if (Objects.isNull(disease)) { return true; } - Assert.isFalse(disease.getDiseaseType()==0,"单一疾病不允许被删除"); + Assert.isFalse(disease.getDiseaseType() == 0, "单一疾病不允许被删除"); assertDiseaseIsUsed(id); // 1. 删除疾病信息 diseaseService.removeById(id); @@ -117,15 +116,15 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { .filter(disease -> CollUtil.isNotEmpty(disease.getContainDiseaseIds())) .flatMap(disease -> disease.getContainDiseaseIds().stream()).distinct().collect(Collectors.toList()); Map<String, Disease> diseaseMap = new HashMap<>(); - if (CollUtil.isNotEmpty(containDiseaseIds)){ + if (CollUtil.isNotEmpty(containDiseaseIds)) { diseaseMap = diseaseService.listByIds(containDiseaseIds) .stream().collect(Collectors.toMap(Disease::getId, disease -> disease, (v1, v2) -> v1)); } - final Map<String, Disease> diseaseMapCopy = new HashMap<>(diseaseMap); + final Map<String, Disease> diseaseMapCopy = new HashMap<>(diseaseMap); // 把疾病名映射到DiseaseResVo中 return page.convert(record -> { DiseaseResVo bean = BeanUtil.toBean(record, DiseaseResVo.class); - if (CollUtil.isNotEmpty(bean.getContainDiseaseIds())){ + if (CollUtil.isNotEmpty(bean.getContainDiseaseIds())) { bean.setContainDiseaseNames(bean.getContainDiseaseIds().stream() .map(diseaseMapCopy::get).filter(Objects::nonNull).map(Disease::getDiseaseName).collect(Collectors.toList())); } @@ -135,33 +134,33 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { } + private List<Disease> queryByAnyCondition(String code, String diseaseName, String diseaseNameAlias) { - private List<Disease> queryByAnyCondition(String code, String diseaseName, String diseaseNameAlias){ - - return diseaseService.lambdaQuery().eq(StrUtil.isNotEmpty(code),Disease::getCode,code).or() - .eq(StrUtil.isNotEmpty(diseaseName), Disease::getDiseaseName,diseaseName).or() - .eq(StrUtil.isNotEmpty(diseaseNameAlias),Disease::getDiseaseNameAlias,diseaseNameAlias) + return diseaseService.lambdaQuery().eq(StrUtil.isNotEmpty(code), Disease::getCode, code).or() + .eq(StrUtil.isNotEmpty(diseaseName), Disease::getDiseaseName, diseaseName).or() + .eq(StrUtil.isNotEmpty(diseaseNameAlias), Disease::getDiseaseNameAlias, diseaseNameAlias) .list(); } - private List<Disease> queryByCode(String code){ - if (Objects.isNull(code)){ + + private List<Disease> queryByCode(String code) { + if (Objects.isNull(code)) { throw new BusinessException("code is not allow empty"); } - return diseaseService.lambdaQuery().eq(Disease::getCode,code).list(); + return diseaseService.lambdaQuery().eq(Disease::getCode, code).list(); } - private void assertDisease(Disease disease){ + private void assertDisease(Disease disease) { - Assert.isNull(disease.getId(),"id 不为空"); + Assert.isNull(disease.getId(), "id 不为空"); - Assert.isTrue(StrUtil.isNotEmpty(disease.getDiseaseName()),"疾病名称不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(disease.getDiseaseName()), "疾病名称不能为空"); - Assert.isTrue(StrUtil.isNotEmpty(disease.getDiseaseNameAlias()),"疾病别名不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(disease.getDiseaseNameAlias()), "疾病别名不能为空"); - if (CollUtil.isEmpty(disease.getContainDiseaseIds())){ + if (CollUtil.isEmpty(disease.getContainDiseaseIds())) { // 如果包含疾病为空,则疾病code不能为空 - Assert.isTrue(StrUtil.isNotEmpty(disease.getCode()),"疾病编码不能为空"); + Assert.isTrue(StrUtil.isNotEmpty(disease.getCode()), "疾病编码不能为空"); } @@ -169,11 +168,12 @@ public class DiseaseManageServiceImpl implements DiseaseManageService { /** * 校验疾病是否被使用 + * * @param diseaseId 疾病id */ - private void assertDiseaseIsUsed(String diseaseId){ + private void assertDiseaseIsUsed(String diseaseId) { boolean isUsedMedicalRec = medicalRecService.lambdaQuery().eq(MedicalRec::getDiseaseId, diseaseId).count() > 0; - Assert.isFalse(isUsedMedicalRec,"疾病已经关联病例,不允许删除"); + Assert.isFalse(isUsedMedicalRec, "疾病已经关联病例,不允许删除"); } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseasePhysicalManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseasePhysicalManageServiceImpl.java index d18ee472..d56bdec4 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseasePhysicalManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseasePhysicalManageServiceImpl.java @@ -4,26 +4,29 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.supervision.dto.UploadPhysicalExaminationDTO; +import com.supervision.manage.enums.DiseasePhysicalEnum; import com.supervision.manage.service.DiseasePhysicalManageService; import com.supervision.manage.service.PhysicalLocationManageService; -import com.supervision.model.ConfigPhysicalLocation; -import com.supervision.model.DefaultPhysicalIndicator; -import com.supervision.model.DiseasePhysical; +import com.supervision.model.*; import com.supervision.service.ConfigPhysicalLocationService; +import com.supervision.service.ConfigPhysicalToolService; import com.supervision.service.DefaultPhysicalIndicatorService; import com.supervision.service.DiseasePhysicalService; +import com.supervision.util.UserUtil; import com.supervision.vo.manage.DiseasePhysicalLocationNodeVo; import com.supervision.vo.manage.DiseasePhysicalResVo; import com.supervision.vo.manage.DiseasePhysicalStrResVo; import com.supervision.vo.manage.PhysicalLocationNode; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; +import static cn.hutool.core.lang.Assert.*; + @Service @RequiredArgsConstructor public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageService { @@ -34,13 +37,15 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe private final ConfigPhysicalLocationService configPhysicalLocationService; + private final ConfigPhysicalToolService configPhysicalToolService; + private final DefaultPhysicalIndicatorService defaultPhysicalIndicatorService; @Override public List<DiseasePhysicalResVo> queryListByDiseaseId(String diseaseId) { - Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空"); + isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空"); List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId); diseasePhysicalResVos.forEach(DiseasePhysicalResVo::populateOther); @@ -50,7 +55,7 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe @Override public List<DiseasePhysicalStrResVo> queryListToStringByDiseaseId(String diseaseId) { - Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空"); + isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空"); List<DiseasePhysicalStrResVo> diseasePhysicalResVos = diseasePhysicalService.queryListStrByDiseaseId(diseaseId); diseasePhysicalResVos.forEach(DiseasePhysicalStrResVo::populateOther); @@ -69,14 +74,14 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe @Override public boolean deletePhysical(String id) { - Assert.isTrue(StrUtil.isNotEmpty(id),"id不能为空"); + isTrue(StrUtil.isNotEmpty(id), "id不能为空"); return diseasePhysicalService.removeById(id); } @Override public boolean updatePhysical(DiseasePhysical diseasePhysical) { - Assert.isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()),"疾病id不能为空"); + isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()), "疾病id不能为空"); return diseasePhysicalService.updateById(diseasePhysical); } @@ -84,8 +89,8 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe @Override public boolean deleteByDiseaseId(String diseaseId) { - Assert.notEmpty(diseaseId,"疾病id不能为空"); - return diseasePhysicalService.lambdaUpdate().eq(DiseasePhysical::getDiseaseId,diseaseId).remove(); + notEmpty(diseaseId, "疾病id不能为空"); + return diseasePhysicalService.lambdaUpdate().eq(DiseasePhysical::getDiseaseId, diseaseId).remove(); } @Override @@ -93,7 +98,7 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe // 1. 查询体格检查位置树 List<PhysicalLocationNode> physicalLocationNodes = physicalToolManageService.queryTree(); - if (CollectionUtil.isEmpty(physicalLocationNodes)){ + if (CollectionUtil.isEmpty(physicalLocationNodes)) { return CollectionUtil.newArrayList(); } @@ -101,23 +106,23 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe physicalLocationNode.setChild(physicalLocationNodes); DiseasePhysicalLocationNodeVo bean = BeanUtil.toBean(physicalLocationNode, DiseasePhysicalLocationNodeVo.class); - if (StrUtil.isEmpty(toolId)){ + if (StrUtil.isEmpty(toolId)) { // 工具id为空,全部设置为禁用标识 - bean.getChild().forEach(vo->vo.setFlag(true)); + bean.getChild().forEach(vo -> vo.setFlag(true)); return bean.getChild(); } // 在体格检查配置身体位置时,只能配置一级部位,此时默认下级的部位也已经被配置。如果工具没有设置,应该子节点设置为禁用 List<DefaultPhysicalIndicator> defaultPhysicalIndicatorList = defaultPhysicalIndicatorService.lambdaQuery().eq(DefaultPhysicalIndicator::getItemId, toolId).list(); - if (CollectionUtil.isEmpty(defaultPhysicalIndicatorList)){ + if (CollectionUtil.isEmpty(defaultPhysicalIndicatorList)) { // 如果未配置,所有子节点设置为禁用 - bean.getChild().forEach(vo->vo.setFlag(true)); + bean.getChild().forEach(vo -> vo.setFlag(true)); return bean.getChild(); } // 2. 根据疾病id查询疾病体格检查项 List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId); - List<String> locationIds = diseasePhysicalResVos.stream().filter(vo->toolId.equals(vo.getToolId())) + List<String> locationIds = diseasePhysicalResVos.stream().filter(vo -> toolId.equals(vo.getToolId())) .map(DiseasePhysical::getLocationId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); // 3. 填充疾病体格检查树中的flag属性 @@ -151,22 +156,71 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe return bean.getChild(); } - private void assertDiseasePhysical(DiseasePhysical diseasePhysical){ + private void assertDiseasePhysical(DiseasePhysical diseasePhysical) { - Assert.isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()),"疾病id不能为空"); + isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()), "疾病id不能为空"); - Assert.notNull(diseasePhysical.getPrimarilyDiagnosisCriteriaFlag(),"初步诊断依据不能为空"); + notNull(diseasePhysical.getPrimarilyDiagnosisCriteriaFlag(), "初步诊断依据不能为空"); - Assert.notNull(diseasePhysical.getBasisConfirmFlag(),"证实诊断依据不能为空"); + notNull(diseasePhysical.getBasisConfirmFlag(), "证实诊断依据不能为空"); - Assert.notNull(diseasePhysical.getBasisIdentificationFlag(),"鉴别诊断依据不能为空"); + notNull(diseasePhysical.getBasisIdentificationFlag(), "鉴别诊断依据不能为空"); - Assert.notNull(diseasePhysical.getFullCheckFlag(),"全面诊断不能为空"); + notNull(diseasePhysical.getFullCheckFlag(), "全面诊断不能为空"); - Assert.notNull(diseasePhysical.getRequireCheckFlag(),"是否必查不能为空"); + notNull(diseasePhysical.getRequireCheckFlag(), "是否必查不能为空"); - Assert.notNull(diseasePhysical.getExpectedDiagnosisResult(),"预期诊断结果不能为空"); + notNull(diseasePhysical.getExpectedDiagnosisResult(), "预期诊断结果不能为空"); } + + @Override + public void batchSavePhysicalExaminationList(Disease diseaseId, List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS) { + List<DiseasePhysical> diseasePhysicals = new ArrayList<>(); + + for (UploadPhysicalExaminationDTO uploadDiseaseDTO : uploadPhysicalExaminationDTOS) { + String iLevelClassification = uploadDiseaseDTO.getILevelClassification(); + String iiLevelClassification = uploadDiseaseDTO.getIiLevelClassification(); + String humanBodyPartIi = uploadDiseaseDTO.getHumanBodyPartIi(); + String normalExamResult = uploadDiseaseDTO.getNormalExamResult(); + String patientExamResult = uploadDiseaseDTO.getPatientExamResult(); + Integer status = uploadDiseaseDTO.getStatus().equals("正常") ? 0 : 1; + Integer preliminaryDiagnosisBasis = uploadDiseaseDTO.getPreliminaryDiagnosisBasis().equals("否") ? 0 : 1; + Integer confirmedDiagnosisBasis = uploadDiseaseDTO.getConfirmedDiagnosisBasis().equals("否") ? 0 : 1; + Integer differentialDiagnosisBasis = uploadDiseaseDTO.getDifferentialDiagnosisBasis().equals("否") ? 0 : 1; + Integer isNecessaryExamDefaultYes = uploadDiseaseDTO.getIsNecessaryExamDefaultYes().equals("否") ? 0 : 1; + // 查询工具和位置 + ConfigPhysicalTool configPhysicalTool = configPhysicalToolService.queryPhysicalToolByTypeAndToolName(iLevelClassification, iiLevelClassification); + ConfigPhysicalLocation configPhysicalLocation = configPhysicalLocationService.queryLocationTreeForLocationName(humanBodyPartIi, "1"); + + Assert.isTrue((null != configPhysicalTool), "体格检查工具未找到:{}", iiLevelClassification); + Assert.isTrue((null != configPhysicalLocation), "体格检查位置未找到:{}", humanBodyPartIi); + + DiseasePhysical diseasePhysical = new DiseasePhysicalResVo(); + diseasePhysical.setDiseaseId(diseaseId.getId()); + // 工具id + diseasePhysical.setToolId(configPhysicalTool.getId()); + // 检查部位ID + diseasePhysical.setLocationId(configPhysicalLocation.getId()); + // 正常結果 + diseasePhysical.setNormalResult(normalExamResult); + // 一場結果 + diseasePhysical.setResult(patientExamResult); + // 预期结果 + diseasePhysical.setExpectedDiagnosisResult(status); + // 初步 + diseasePhysical.setPrimarilyDiagnosisCriteriaFlag(preliminaryDiagnosisBasis); + // 证实 + diseasePhysical.setBasisConfirmFlag(confirmedDiagnosisBasis); + // 鉴别 + diseasePhysical.setBasisIdentificationFlag(differentialDiagnosisBasis); + // 是否必查 + diseasePhysical.setRequireCheckFlag(isNecessaryExamDefaultYes); + diseasePhysical.setCreateUserId(UserUtil.getUser().getCreateUserId()); + diseasePhysical.setUpdateUserId(UserUtil.getUser().getCreateUserId()); + diseasePhysicals.add(diseasePhysical); + } + diseasePhysicalService.saveBatch(diseasePhysicals); + } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java index 8fb08cdb..213a9ab1 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java @@ -28,6 +28,7 @@ import java.util.Objects; public class FileManageServiceImpl implements FileManageService { private final FileResourceService fileResourceService; + @Override public FileResource uploadFile(MultipartFile multipartFile, String contentType) throws Exception { // 把文件上传到minio @@ -60,7 +61,7 @@ public class FileManageServiceImpl implements FileManageService { // 把文件上传到minio FileResource fileResource = new FileResource(); - try (BufferedInputStream inputStream = FileUtil.getInputStream(file)){ + try (BufferedInputStream inputStream = FileUtil.getInputStream(file)) { String minoId = MinioUtil.uploadFile(inputStream); fileResource.setMinioId(minoId); } @@ -71,6 +72,7 @@ public class FileManageServiceImpl implements FileManageService { fileResourceService.save(fileResource); return fileResource; } + @Override public void downloadFile(String fileId, HttpServletResponse response) throws Exception { Assert.notEmpty(fileId, "文件id不能为空"); @@ -79,24 +81,24 @@ public class FileManageServiceImpl implements FileManageService { Assert.notNull(fileResource, "文件不存在"); try (InputStream inputStream = MinioUtil.download(fileResource.getMinioId()); - ServletOutputStream outputStream = response.getOutputStream()){ + ServletOutputStream outputStream = response.getOutputStream()) { String contentType = StrUtil.isEmpty(fileResource.getFileType()) ? "application/octet-stream" : fileResource.getFileType(); response.setContentType(contentType); - if (StrUtil.isNotEmpty(fileResource.getFileName())){ + if (StrUtil.isNotEmpty(fileResource.getFileName())) { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileResource.getFileName(), "UTF-8")); } byte[] bytes = new byte[1024]; int len; - while ((len = inputStream.read(bytes))!= -1){ + while ((len = inputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } outputStream.flush(); - }catch (Exception e){ - log.error("文件下载失败",e); - throw new BusinessException("下载文件失败",e); + } catch (Exception e) { + log.error("文件下载失败", e); + throw new BusinessException("下载文件失败", e); } } @@ -106,17 +108,17 @@ public class FileManageServiceImpl implements FileManageService { Assert.notEmpty(fileId, "fileId不能为空"); FileResource fileResource = fileResourceService.getById(fileId); - Assert.notNull(fileResource,"文件不存在"); + Assert.notNull(fileResource, "文件不存在"); String prefix = null; String suffix = null; - if (StrUtil.isNotEmpty(fileResource.getFileName())){ + if (StrUtil.isNotEmpty(fileResource.getFileName())) { List<String> split = StrUtil.split(fileResource.getFileName(), "."); prefix = CollUtil.getFirst(split); - if (CollUtil.size(split) > 1){ + if (CollUtil.size(split) > 1) { suffix = "." + split.get(1); } } - File tempFile = StrUtil.isEmpty(prefix) ? FileUtil.createTempFile() : FileUtil.createTempFile(prefix,suffix,true); + File tempFile = StrUtil.isEmpty(prefix) ? FileUtil.createTempFile() : FileUtil.createTempFile(prefix, suffix, true); try (InputStream inputStream = MinioUtil.download(fileResource.getMinioId()); FileOutputStream fileOutputStream = new FileOutputStream(tempFile)) { byte[] bytes = new byte[1024]; @@ -125,12 +127,12 @@ public class FileManageServiceImpl implements FileManageService { fileOutputStream.write(bytes, 0, len); } fileOutputStream.flush(); - }catch (Exception e){ - if (tempFile.exists()){ + } catch (Exception e) { + if (tempFile.exists()) { tempFile.delete(); } - log.error("文件下载失败",e); - throw new BusinessException("文件下载失败",e); + log.error("文件下载失败", e); + throw new BusinessException("文件下载失败", e); } return tempFile; } @@ -140,12 +142,12 @@ public class FileManageServiceImpl implements FileManageService { Assert.notEmpty(fileId, "文件id不能为空"); FileResource fileResource = fileResourceService.getById(fileId); - if (Objects.isNull(fileResource)){ - log.info("deleteFile: fileId:{} 未找到数据",fileId); + if (Objects.isNull(fileResource)) { + log.info("deleteFile: fileId:{} 未找到数据", fileId); return false; } - if (StrUtil.isNotEmpty(fileResource.getMinioId())){ - log.info("deleteFile:删除minio中的数据.minioId:{}",fileResource.getMinioId()); + if (StrUtil.isNotEmpty(fileResource.getMinioId())) { + log.info("deleteFile:删除minio中的数据.minioId:{}", fileResource.getMinioId()); MinioUtil.deleteObject(fileResource.getMinioId()); } return fileResourceService.removeById(fileId); 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 7a07fb6d..3662c8aa 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 @@ -2,31 +2,41 @@ package com.supervision.manage.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.TimeInterval; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.dto.*; import com.supervision.exception.BusinessException; -import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo; -import com.supervision.manage.pojo.vo.MedicalRecInfoVO; -import com.supervision.manage.pojo.vo.MedicalRecManageVO; -import com.supervision.manage.pojo.vo.MedicalRecQaVO; +import com.supervision.manage.pojo.vo.*; import com.supervision.manage.service.*; +import com.supervision.manage.enums.*; +import com.supervision.manage.service.AskTemplateQuestionLibraryManageService; import com.supervision.model.*; import com.supervision.model.Process; import com.supervision.service.*; +import com.supervision.service.MedicalRecService; +import com.supervision.util.UserUtil; import com.supervision.vo.manage.*; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Sheet; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; import java.net.URLEncoder; import java.util.*; import java.util.function.Function; @@ -36,6 +46,10 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class MedicalRecManageServiceImpl implements MedicalRecManageService { + + + private final String CASE_TEMPLATE_TEMPLATE_EXCEL_PATH = "classpath:template/虚拟病例信息模板v3.0.xlsx"; + private final String MEDICAL_ANSWER_TEMPLATE_EXCEL_PATH = "classpath:template/medical_answer_template.xlsx"; private final ResourceLoader resourceLoader; @@ -48,6 +62,8 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService; + private final AskTemplateQuestionLibraryManageService askTemplateQuestionLibraryManageService; + private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService; private final CommonDicService commonDicService; @@ -77,7 +93,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { } @Override - public IPage<MedicalRecPageResVO> queryMedicalRecManagePage(String selfDescKeyword, String gender,String patientName, + public IPage<MedicalRecPageResVO> queryMedicalRecManagePage(String selfDescKeyword, String gender, String patientName, String diseaseId, Integer pageNum, Integer pageSize) { // 注意,这里的diseaseId不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造 MedicalRecPageReqVO medicalRecPageReqVO = new MedicalRecPageReqVO(); @@ -113,7 +129,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { Assert.notEmpty(chiildCommonDicList, "系统问题未找到"); List<String> dicIds = chiildCommonDicList.stream().map(i -> String.valueOf(i.getId())).collect(Collectors.toList()); List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().in(AskTemplateQuestionLibrary::getDictId, dicIds).list(); - if (CollUtil.isEmpty(askTemplateQuestionLibraryList)){ + if (CollUtil.isEmpty(askTemplateQuestionLibraryList)) { return; } Set<String> libraryIds = qaList.stream().map(MedicalRecQaVO::getLibraryQuestionId).collect(Collectors.toSet()); @@ -124,7 +140,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { } - private void saveAskPatientAnswer(List<MedicalRecQaVO> qaList,String medicalRecId,Integer answerType){ + private void saveAskPatientAnswer(List<MedicalRecQaVO> qaList, String medicalRecId, Integer answerType) { if (CollUtil.isEmpty(qaList)) { return; } @@ -142,6 +158,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { askPatientAnswer.insert(); } } + @Override public List<DiseaseAncillaryResVo> queryDiseaseAncillaryByCreat(String diseaseId) { // 辅助检查 @@ -201,7 +218,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { assertDefaultAnswer(reqVO.getDefaultQaList()); - BeanUtil.copyProperties(reqVO, medicalRec, "id","patientId"); + BeanUtil.copyProperties(reqVO, medicalRec, "id", "patientId"); medicalRec.updateById(); // 然后修改问答 // 首先找到数据库中的问答 @@ -227,7 +244,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { askPatientAnswer.setAnswer(medicalRecQaVO.getMedicalRecAnswer()); askPatientAnswer.setMedicalId(medicalRec.getId()); askPatientAnswer.setQuestion(CollUtil.getFirst(medicalRecQaVO.getQuestionList())); - if (null == askPatientAnswer.getAnswerType()){ + if (null == askPatientAnswer.getAnswerType()) { askPatientAnswer.setAnswerType(1); } askPatientAnswer.insert(); @@ -268,7 +285,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRecQaVO.setAnswerType(Objects.isNull(e.getAnswerType()) ? 1 : e.getAnswerType()); // 病历的回答 medicalRecQaVO.setMedicalRecAnswer(e.getAnswer()); - if (StrUtil.isNotEmpty(e.getQuestion())){ + if (StrUtil.isNotEmpty(e.getQuestion())) { medicalRecQaVO.setQuestionList(CollUtil.newArrayList(e.getQuestion())); } return medicalRecQaVO; @@ -290,12 +307,12 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { if (ObjectUtil.isNotEmpty(questionLibrary)) { // 问题 List<String> question = libraryMapQuestion.get(medicalRecQaVO.getLibraryQuestionId()); - if (CollUtil.isNotEmpty(medicalRecQaVO.getQuestionList())){ - if (CollUtil.isNotEmpty(question)){ + if (CollUtil.isNotEmpty(medicalRecQaVO.getQuestionList())) { + if (CollUtil.isNotEmpty(question)) { question.remove(CollUtil.getFirst(medicalRecQaVO.getQuestionList())); medicalRecQaVO.getQuestionList().addAll(question); } - }else { + } else { medicalRecQaVO.setQuestionList(question); } @@ -331,7 +348,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { @Override public MedicalAnswerVideoResVo preUploadMedicalAnswer(MultipartFile multipartFile, String medicalRecId) throws Exception { - return answerVideoResourceService.preGenerationMedicalAnswerVideo(multipartFile.getInputStream(),medicalRecId); + return answerVideoResourceService.preGenerationMedicalAnswerVideo(multipartFile.getInputStream(), medicalRecId); } @@ -352,7 +369,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { final Map<String, AskTemplateQuestionLibrary> libraryMap = new HashMap<>(); - if (CollUtil.isNotEmpty(askPatientAnswerList)){ + if (CollUtil.isNotEmpty(askPatientAnswerList)) { // 查询问题库信息 List<String> questionIds = askPatientAnswerList.stream() .map(AskPatientAnswer::getLibraryQuestionId).filter(Objects::nonNull).collect(Collectors.toList()); @@ -369,10 +386,10 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRecQaVO.setMedicalRecAnswer(e.getAnswer()); // 组装问题列表 和 字典数据 AskTemplateQuestionLibrary askTemplateQuestionLibrary = libraryMap.get(e.getLibraryQuestionId()); - if (Objects.nonNull(askTemplateQuestionLibrary)){ + if (Objects.nonNull(askTemplateQuestionLibrary)) { medicalRecQaVO.setQuestionList(libraryMapQuestion.get(e.getLibraryQuestionId())); Long dictId = askTemplateQuestionLibrary.getDictId(); - if (Objects.nonNull(dictId)){ + if (Objects.nonNull(dictId)) { medicalRecQaVO.setDictId(dictId); medicalRecQaVO.setDictNamePath(childCommonDicMap.getOrDefault(dictId, new CommonDic()).getNameZhPath()); } @@ -401,7 +418,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("病历问诊问题导入模板.xlsx", "UTF-8")); - IoUtil.copy(resource.getInputStream(),outputStream); + IoUtil.copy(resource.getInputStream(), outputStream); } @Override @@ -414,4 +431,309 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { return medicalRecService.lambdaUpdate().eq(MedicalRec::getId, medicalRecId).set(MedicalRec::getStatus, status).update(); } + + + @Override + public void downloadMedicalTemplate(HttpServletResponse response) throws Exception { + Resource resource = resourceLoader.getResource(CASE_TEMPLATE_TEMPLATE_EXCEL_PATH); + ServletOutputStream outputStream = response.getOutputStream(); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode("虚拟病例信息模板v3.0.xlsx", "UTF-8")); + + IoUtil.copy(resource.getInputStream(), outputStream); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception { + InputStream inputStream = multipartFile.getInputStream(); + + TimeInterval timer = DateUtil.timer(); + ExcelReader reader = ExcelUtil.getReader(inputStream); + log.info("uploadQuestionLibrary : 读取文件耗时:{} s", timer.intervalSecond()); + // 校验sheet + assertTemplate(reader); + // 疾病 + Disease disease = null; + // 病人 + MedicalRec medicalRec = null; + // 遍历sheet + List<Sheet> sheets = reader.getSheets(); + for (int i = 0; i < 6; i++) { + String sheetName = sheets.get(i).getSheetName(); + ExcelReader excelReader = reader.setSheet(i); + String virtualSheetNameEnum = VirtualSheetNameEnum.fromCode(sheetName); + Assert.isTrue(StringUtils.isNoneBlank(virtualSheetNameEnum), "未查询到sheet:" + sheetName); + switch (sheetName) { + case "基本信息": + assertTitle(excelReader, "基本信息"); + List<UploadDiseaseDTO> uploadDiseaseResVos = excelReader.readAll(UploadDiseaseDTO.class); + assertSheetDataBasicInfo(uploadDiseaseResVos); + disease = diseaseService.saveDisease(uploadDiseaseResVos); + medicalRec = batchSaveMedicalRec(uploadDiseaseResVos, disease); + continue; + case "临床问诊": + assertTitle(excelReader, "临床问诊"); + List<ClinicalInterviewDTO> clinicalInterviewDTOS = excelReader.readAll(ClinicalInterviewDTO.class); + if (null == clinicalInterviewDTOS || clinicalInterviewDTOS.isEmpty()) { + continue; + } + assertSheetDataClinicalInterview(clinicalInterviewDTOS); + askTemplateQuestionLibraryManageService.saveSimilarityQuestion(clinicalInterviewDTOS); + continue; + case "体格检查": + assertTitle(excelReader, "体格检查"); + List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS = excelReader.readAll(UploadPhysicalExaminationDTO.class); + if (null == uploadPhysicalExaminationDTOS || uploadPhysicalExaminationDTOS.isEmpty()) { + continue; + } + assertSheetDataPhysicalExamination(uploadPhysicalExaminationDTOS); + diseasePhysicalManageService.batchSavePhysicalExaminationList(disease, uploadPhysicalExaminationDTOS); + continue; + case "辅助检查": + assertTitle(excelReader, "辅助检查"); + List<SupplementaryTestDto> supplementaryTestDtos = excelReader.readAll(SupplementaryTestDto.class); + if (null == supplementaryTestDtos || supplementaryTestDtos.isEmpty()) { + continue; + } + assertSheetDataSupplementaryTest(supplementaryTestDtos); + diseaseAncillaryManageService.batchSaveAncillaryExaminationList(disease, supplementaryTestDtos); + continue; + case "处置计划": + assertTitle(excelReader, "处置计划"); + List<HandlingPlanDto> handlingPlanDtos = excelReader.readAll(HandlingPlanDto.class); + System.out.println(handlingPlanDtos); + continue; + case "评估结果概述": + assertTitle(excelReader, "评估结果概述"); + List<OverviewEvaluationResultsDto> overviewEvaluationResultsDtos = excelReader.readAll(OverviewEvaluationResultsDto.class); + if (null == overviewEvaluationResultsDtos || overviewEvaluationResultsDtos.isEmpty()) { + continue; + } + updateMedicalRec(medicalRec.getId(), overviewEvaluationResultsDtos); + continue; + default: + Assert.isTrue(true, "未查询到sheet:" + sheetName); + break; + } + + } + return null; + } + + /** + * sheet + */ + private void assertTemplate(ExcelReader excelReader) { + List<Sheet> sheets = excelReader.getSheets(); + for (int i = 0; i < 6; i++) { + Sheet sheet = sheets.get(i); + String virtualSheetNameEnum = VirtualSheetNameEnum.fromCode(sheet.getSheetName()); + Assert.isTrue(virtualSheetNameEnum != null, "请检查sheet名称:" + sheet.getSheetName()); + } + // 保证第一个sheet必须为病例信息 + String sheetName = sheets.get(0).getSheetName(); + Assert.isTrue(sheetName.equals("基本信息"), "模板错误,请更换模板,sheet {} " + "必须为第一个" + sheetName); + } + + + @Transactional + public MedicalRec batchSaveMedicalRec(List<UploadDiseaseDTO> uploadDiseaseResVos, Disease disease) { + UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0); + // 保存病历 + String name = uploadDiseaseDTO.getName(); + String sex = uploadDiseaseDTO.getSex(); + String ageStar = uploadDiseaseDTO.getAgeStar(); + String maritalStatus = uploadDiseaseDTO.getMaritalStatus(); + String occupation = uploadDiseaseDTO.getOccupation(); + String nation = uploadDiseaseDTO.getNation(); + String birthPlaceOrOrigin = uploadDiseaseDTO.getBirthPlaceOrOrigin(); + String address = uploadDiseaseDTO.getAddress(); + String birthPlace = uploadDiseaseDTO.getBirthPlace(); + String mainSymptom = uploadDiseaseDTO.getMainSymptom(); + + MedicalRec medicalRec = new MedicalRec(); + medicalRec.setDigitalHumanType(1); + medicalRec.setPatientName(name); + medicalRec.setPatientGender(sex); + medicalRec.setPatientAge(Integer.parseInt(ageStar)); + medicalRec.setPatientMarriage(maritalStatus); + medicalRec.setPatientProfession(occupation); + medicalRec.setNativePlace(birthPlaceOrOrigin); + medicalRec.setPatientNation(nation); + medicalRec.setPatientBirthplace(birthPlace); + medicalRec.setPatientHabitation(address); + medicalRec.setDiseaseId(disease.getId()); + medicalRec.setPatientSelfDesc(mainSymptom); + medicalRec.setStatus(1); + medicalRec.setCreateUserId(UserUtil.getUser().getId()); + medicalRec.setUpdateUserId(UserUtil.getUser().getId()); + medicalRec.setMedicalStatus(MedicalStatusEnum.CREATE.getCode()); + medicalRec.setMedicalImportType(MedicalTypeEnum.TEMPLATE_IMPORT.getCode()); + medicalRecService.save(medicalRec); + medicalRecService.updateMedicalRecNo("QL", "男".equals(sex) ? "M" : "F", medicalRec.getId()); + return medicalRec; + } + + + /** + * 修改评价结果描述 + * + * @param id 病例id + * @param overviewEvaluationResultsDtos + */ + private void updateMedicalRec(String id, List<OverviewEvaluationResultsDto> overviewEvaluationResultsDtos) { + MedicalRec medicalRec = new MedicalRec(); + medicalRec.setId(id); + for (OverviewEvaluationResultsDto overviewEvaluationResultsDto : overviewEvaluationResultsDtos) { + String assessmentItem = overviewEvaluationResultsDto.getAssessmentItem(); + switch (assessmentItem) { + case "*预期诊断结果": + String assessmentOverview = overviewEvaluationResultsDto.getAssessmentOverview(); + medicalRec.setFullCheck(assessmentOverview); + continue; + case "*初步诊断依据": + String assessmentOverview1 = overviewEvaluationResultsDto.getAssessmentOverview(); + medicalRec.setPrimarilyDiagnosisCriteria(assessmentOverview1); + continue; + case "*证实诊断依据": + String assessmentOverview2 = overviewEvaluationResultsDto.getAssessmentOverview(); + medicalRec.setConfirmDiagnosisCriteria(assessmentOverview2); + continue; + case "*鉴别依据": + String assessmentOverview3 = overviewEvaluationResultsDto.getAssessmentOverview(); + medicalRec.setDifferentialDiagnosisCriteria(assessmentOverview3); + continue; + default: + Assert.isTrue(true, "请检查评估结果概述sheet第一列是否正确"); + } + } + medicalRecService.updateById(medicalRec); + } + + + /** + * 校验行头 + * todo 这要根据每个sheet进行case + * + * @param reader + * @param sheetName + */ + private void assertTitle(ExcelReader reader, String sheetName) { + List<Object> titleList = reader.readRow(0); + Assert.isTrue(CollUtil.isNotEmpty(titleList), "表头格式有误,请重新导入"); + switch (sheetName) { + case "基本信息": + for (int i = 0; i < UploadDiseaseDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(UploadDiseaseDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入"); + } + break; + case "临床问诊": + for (int i = 0; i < ClinicalInterviewDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(ClinicalInterviewDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入"); + } + break; + case "体格检查": + for (int i = 0; i < UploadPhysicalExaminationDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(UploadPhysicalExaminationDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入"); + } + break; + case "辅助检查": + for (int i = 0; i < SupplementaryTestDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(SupplementaryTestDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入"); + } + break; + case "评估结果概述": + for (int i = 0; i < OverviewEvaluationResultsDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(OverviewEvaluationResultsDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入"); + } + break; + } + } + + + /** + * 判断基本信息中只有一条数据 + * + * @param uploadDiseaseResVos + */ + private void assertSheetDataBasicInfo(List<UploadDiseaseDTO> uploadDiseaseResVos) { + Assert.notEmpty(uploadDiseaseResVos, "病例基本信息数据数据为空"); + Assert.isTrue(uploadDiseaseResVos.size() != 1, "目前仅限传一个病例"); + uploadDiseaseResVos.forEach(this::assertDiseaseQuestion); + } + + + /** + * 判断基本信息中只有一条数据 + * + * @param uploadDiseaseResVos + */ + private void assertSheetDataClinicalInterview(List<ClinicalInterviewDTO> uploadDiseaseResVos) { + uploadDiseaseResVos.forEach(this::assertClinicalInterview); + } + + private void assertSheetDataPhysicalExamination(List<UploadPhysicalExaminationDTO> uploadDiseaseResVos) { + uploadDiseaseResVos.forEach(this::assertPhysicalExamination); + } + + private void assertSheetDataSupplementaryTest(List<SupplementaryTestDto> uploadDiseaseResVos) { + uploadDiseaseResVos.forEach(this::supplementaryTestDto); + } + + + private void assertDiseaseQuestion(UploadDiseaseDTO diseaseQuestion) { + + Assert.notEmpty(diseaseQuestion.getSex(), "性别不能为空"); + + Assert.notEmpty(diseaseQuestion.getAgeStar(), "年龄不能为空"); + + Assert.isTrue(StrUtil.isNotEmpty(diseaseQuestion.getDiseaseClassificationName()), "疾病分类名称不能为空"); + + Assert.notEmpty(diseaseQuestion.getCommonName(), "通用名不能为空"); + + Assert.notEmpty(diseaseQuestion.getCategoryCode(), "疾病代码不能为空"); + + Assert.notEmpty(diseaseQuestion.getMainSymptom(), "主诉不能为空"); + } + + + private void assertClinicalInterview(ClinicalInterviewDTO clinicalInterviewDTO) { + Assert.notEmpty(clinicalInterviewDTO.getConsultationI(), "问诊I不能为空"); + + Assert.notEmpty(clinicalInterviewDTO.getConsultationII(), "问诊Ⅱ不能为空"); + } + + private void assertPhysicalExamination(UploadPhysicalExaminationDTO uploadPhysicalExaminationDTO) { +// Assert.isTrue(StrUtil.isEmpty(uploadPhysicalExaminationDTO.getIiLevelClassification()), "Ⅰ级分类不能为空"); +// Assert.notEmpty(uploadPhysicalExaminationDTO.getIiLevelClassification(), "Ⅱ级分类不能为空"); +// Assert.notEmpty(uploadPhysicalExaminationDTO.getHumanBodyPartI(), "人体部位Ⅰ不能为空"); +// Assert.notEmpty(uploadPhysicalExaminationDTO.getHumanBodyPartIi(), "人体部位Ii不能为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getNormalExamResult(), "正常检查结果不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getStatus(), "状态不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getIsNecessaryExamDefaultYes(), "*是否必查(默认是)不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getPreliminaryDiagnosisBasis(), "初步诊断依据不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getConfirmedDiagnosisBasis(), "证实诊断依据不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getDifferentialDiagnosisBasis(), "鉴别依据不可为空"); + + } + + private void supplementaryTestDto(SupplementaryTestDto uploadPhysicalExaminationDTO) { +// Assert.isTrue(StrUtil.isEmpty(uploadPhysicalExaminationDTO.getFirstLevelCategory()), "Ⅰ级分类不能为空"); +// Assert.notEmpty(uploadPhysicalExaminationDTO.getSecondLevelCategory(), "Ⅱ级分类不能为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getNormalTestResult(), "正常检查结果不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getPatientTestResult(), "病人检查结果不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getIsRequiredCheck(), "*是否必查(默认是)不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getPreliminaryDiagnosisBasis(), "初步诊断依据不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getConfirmedDiagnosisBasis(), "证实诊断依据不可为空"); + Assert.notEmpty(uploadPhysicalExaminationDTO.getDifferentialDiagnosisBasis(), "鉴别依据不可为空"); + } + + } diff --git a/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx b/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx new file mode 100644 index 00000000..16f6fbe1 Binary files /dev/null and b/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx differ diff --git a/virtual-patient-manage/src/test/java/com/supervision/manage/MedicalAiAnswerSetter.java b/virtual-patient-manage/src/test/java/com/supervision/manage/MedicalAiAnswerSetter.java index 9be19e3c..74ebf439 100644 --- a/virtual-patient-manage/src/test/java/com/supervision/manage/MedicalAiAnswerSetter.java +++ b/virtual-patient-manage/src/test/java/com/supervision/manage/MedicalAiAnswerSetter.java @@ -1,6 +1,7 @@ package com.supervision.manage; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; import com.supervision.exception.BusinessException; import com.supervision.manage.service.FileManageService; import com.supervision.manage.service.MaterialLibraryManageService; @@ -16,13 +17,40 @@ import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.io.FileInputStream; -import java.util.List; +import java.util.*; @Slf4j @SpringBootTest public class MedicalAiAnswerSetter { + + @Test + public void sd(){ + String s = "现病史 发病时间\n" + + "现病史 现病史2 发病时间\n"; + + + String[] split = s.split("\n"); + + for (String string : split) { + String[] split1 = string.split(" "); + Assert.isTrue(split1.length ==2, "数据格式错误"); + Map<String, String> map = new HashMap<>(); + map.put("item1", split1[0]); + map.put("item2", split1[1]); + + } + } + + + public static int countChar(String str, char targetChar) { + return (int) Arrays.stream(str.split("")) + .filter(s -> s.charAt(0) == targetChar) + .count(); + } + + @Autowired private MaterialLibraryManageService materialLibraryManageService; diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/ClinicalInterviewDTO.java b/virtual-patient-model/src/main/java/com/supervision/dto/ClinicalInterviewDTO.java new file mode 100644 index 00000000..cc8c7b08 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/ClinicalInterviewDTO.java @@ -0,0 +1,33 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + + +/** + * @Author:longbao + * @Date:2024/10/29 10:00 + * @Description: 上传excel临床问诊字段对应 + */ +@Data +public class ClinicalInterviewDTO { + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("问诊Ⅰ", "问诊Ⅱ", "*问题(可不选择具体问题,根据问诊类目系统识别问诊意图)","患者回复(必填-模拟专业度较高问诊场景需要 获取有效的问诊回复)"); + + @Alias(value = "问诊Ⅰ") + private String ConsultationI; + + @Alias(value = "问诊Ⅱ") + private String ConsultationII; + + @Alias(value = "问题") + private String QuestionIntentRecognition; + + @Alias(value = "患者回复") + private String PatientResponseRequired; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java new file mode 100644 index 00000000..7aa1af37 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java @@ -0,0 +1,33 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + +/** + * @Author:longbao + * @Date:2024/11/5 11:09 + * @Description: 处置计划 + */ +@Data +public class HandlingPlanDto { + + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("*处置方案(请选择)","* 一级措施(请选择)","* 二级措施(请选择)", "* 说明"); + + @Alias(value = "处置方案") + private String disposalScheme; + + @Alias(value = "一级措施") + private String firstLevelMeasure; + + @Alias(value = "二级措施") + private String secondLevelMeasure; + + @Alias(value = "说明") + private String description; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/OverviewEvaluationResultsDto.java b/virtual-patient-model/src/main/java/com/supervision/dto/OverviewEvaluationResultsDto.java new file mode 100644 index 00000000..5e0fb209 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/OverviewEvaluationResultsDto.java @@ -0,0 +1,30 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + +/** + * @Author:longbao + * @Date:2024/11/5 11:09 + * @Description: 评估结果概述 + */ +@Data +public class OverviewEvaluationResultsDto { + + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("NO.","评估项目","评估概述(需医生提供,以下为示例 可删除)", "填写说明"); + + @Alias(value = "评估项目") + private String assessmentItem; + + @Alias(value = "评估概述(需医生提供,以下为示例 可删除)") + private String assessmentOverview; + + @Alias(value = "填写说明") + private String fillingInstructions; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/SupplementaryTestDto.java b/virtual-patient-model/src/main/java/com/supervision/dto/SupplementaryTestDto.java new file mode 100644 index 00000000..824b2bfe --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/SupplementaryTestDto.java @@ -0,0 +1,54 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + +/** + * @Author:longbao + * @Date:2024/11/4 21:34 + * @Description: 辅助检查 + */ +@Data +public class SupplementaryTestDto { + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("1级分类","Ⅱ级分类","*正常检测结果", "*病人检查结果", "状态", "*初步诊断依据", "*证实诊断依据", "*鉴别依据", "*是否必查\n(默认是)", + "补充项1", "补充项2"); + + @Alias(value = "1级分类") + private String firstLevelCategory; + + @Alias(value = "Ⅱ级分类") + private String secondLevelCategory; + + @Alias(value = "*正常检测结果") + private String normalTestResult; + + @Alias(value = "*病人检查结果") + private String patientTestResult; + + @Alias(value = "状态") + private String status; + + @Alias(value = "*初步诊断依据") + private String preliminaryDiagnosisBasis; + + @Alias(value = "*证实诊断依据") + private String confirmedDiagnosisBasis; + + @Alias(value = "*鉴别依据") + private String differentialDiagnosisBasis; + + @Alias(value = "*是否必查\n(默认是)") + private String isRequiredCheck; + + @Alias(value = "补充项1") + private String supplementaryItem1; + + @Alias(value = "补充项2") + private String supplementaryItem2; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/UploadDiseaseDTO.java b/virtual-patient-model/src/main/java/com/supervision/dto/UploadDiseaseDTO.java new file mode 100644 index 00000000..05f973ab --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/UploadDiseaseDTO.java @@ -0,0 +1,63 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + + +/** + * @Author:longbao + * @Date:2024/10/29 10:00 + * @Description: 上传excel疾病检查字段对应 + */ +@Data +public class UploadDiseaseDTO { + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("姓名","*性别","*年龄", "婚姻状态", "职业", "民族", "出生地/籍贯", "住址", "出生地","*疾病代码", "*疾病分类名称", "*通用名", "最终诊断", "*(主诉)主要症状"); + + @Alias(value = "姓名") + private String name; + + @Alias(value = "*性别") + private String sex; + + @Alias(value = "*年龄") + private String ageStar; + + @Alias(value = "婚姻状态") + private String maritalStatus; + + @Alias(value = "职业") + private String occupation; + + @Alias(value = "民族") + private String nation; + + @Alias(value = "出生地/籍贯") + private String birthPlaceOrOrigin; + + @Alias(value = "住址") + private String address; + + @Alias(value = "出生地") + private String birthPlace; + + @Alias(value = "*疾病代码") + private String categoryCode; + + @Alias(value = "*疾病分类名称") + private String diseaseClassificationName; + + @Alias(value = "*通用名") + private String commonName; + +// @Alias(value = "最终诊断") +// private String finalDiagnosis; + + @Alias(value = "*(主诉)主要症状") + private String mainSymptom; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/UploadPhysicalExaminationDTO.java b/virtual-patient-model/src/main/java/com/supervision/dto/UploadPhysicalExaminationDTO.java new file mode 100644 index 00000000..4e3fc87a --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/UploadPhysicalExaminationDTO.java @@ -0,0 +1,60 @@ +package com.supervision.dto; + +import cn.hutool.core.annotation.Alias; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.List; + + +/** + * @Author:longbao + * @Date:2024/10/29 11:00 + * @Description: 上传excel体格检查字段对应 + */ +@Data +public class UploadPhysicalExaminationDTO { + + public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("Ⅰ级分类", "Ⅱ级分类", "人体部位Ⅰ", "人体部位Ⅱ", "*正常检查结果", + "病人检查结果", "*状态", "*初步诊断依据", "*证实诊断依据", "*鉴别依据", "*是否必查\n(默认是)", "补充项1", "补充项2"); + + @Alias(value = "Ⅰ级分类") + private String iLevelClassification; + + @Alias(value = "Ⅱ级分类") + private String iiLevelClassification; + + @Alias(value = "人体部位Ⅰ") + private String humanBodyPartI; + + @Alias(value = "人体部位Ⅱ") + private String humanBodyPartIi; + + @Alias(value = "*正常检查结果") + private String normalExamResult; + + @Alias(value = "病人检查结果") + private String patientExamResult; + + @Alias(value = "*状态") + private String status; + + @Alias(value = "*初步诊断依据") + private String preliminaryDiagnosisBasis; + + @Alias(value = "*证实诊断依据") + private String confirmedDiagnosisBasis; + + @Alias(value = "*鉴别依据") + private String differentialDiagnosisBasis; + + @Alias(value = "*是否必查\n(默认是)") + private String isNecessaryExamDefaultYes; + + private String supplementItem1; + + private String supplementItem2; + + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/enums/EnumMedicalRec.java b/virtual-patient-model/src/main/java/com/supervision/enums/EnumMedicalRec.java new file mode 100644 index 00000000..5a23d91d --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/enums/EnumMedicalRec.java @@ -0,0 +1,32 @@ +package com.supervision.enums; + +/** + * @Author:longbao + * @Date:2024/10/31 16:59 + * @Description: + */ +public enum EnumMedicalRec { + + DIGITAL_HUMAN_CREATED("已创建病例", "00"), + ESTABLISHED_RECORD("数字人生成中", "01"), + MEDICAL_RECORD_ESTABLISHED("已生成数字人", "02"), + COMPLETE("完成", "03"), + ; + + private String description; + private String code; + + EnumMedicalRec(String description, String code) { + this.description = description; + this.code = code; + } + + + public String getDescription() { + return description; + } + + public String getCode() { + return code; + } +} diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionLibraryMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionLibraryMapper.java index 7a271187..17ef55d6 100644 --- a/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionLibraryMapper.java +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/AskTemplateQuestionLibraryMapper.java @@ -23,6 +23,10 @@ public interface AskTemplateQuestionLibraryMapper extends BaseMapper<AskTemplate Page<AskQuestionLibraryResVo> queryPageList(IPage<AskQuestionLibraryResVo> page, @Param("askQuestionLibrary") AskQuestionLibraryReqVo askQuestionLibrary); + + + String queryByName(@Param("askQuestionLibrary") String nameZh); + } 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 1ecb4d6a..28a820d7 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 @@ -11,6 +11,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface AskTemplateQuestionSimilarityMapper extends BaseMapper<AskTemplateQuestionSimilarity> { + + /** + * 查询相似问题 + * @param nameZh + * @param similarityQuestion + * @return + */ + public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion); } diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/DiseaseAncillaryMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/DiseaseAncillaryMapper.java index 64438f14..0426e840 100644 --- a/virtual-patient-model/src/main/java/com/supervision/mapper/DiseaseAncillaryMapper.java +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/DiseaseAncillaryMapper.java @@ -10,11 +10,11 @@ import org.apache.ibatis.annotations.Param; import java.util.List; /** - * @author flevance - * @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Mapper - * @createDate 2023-10-20 17:19:21 - * @Entity com.supervision.model.DiseaseAncillary - */ +* @author flevance +* @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Mapper +* @createDate 2023-10-20 17:19:21 +* @Entity com.supervision.model.DiseaseAncillary +*/ public interface DiseaseAncillaryMapper extends BaseMapper<DiseaseAncillary> { List<DiseaseAncillaryDto> queryDiseaseAncillaryDtoList(@Param("diseaseAncillary")DiseaseAncillary diseaseAncillary); diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/DiseasePhysicalMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/DiseasePhysicalMapper.java index 51dfe262..9e965d6f 100644 --- a/virtual-patient-model/src/main/java/com/supervision/mapper/DiseasePhysicalMapper.java +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/DiseasePhysicalMapper.java @@ -9,11 +9,11 @@ import org.apache.ibatis.annotations.Param; import java.util.List; /** - * @author flevance - * @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Mapper - * @createDate 2023-10-20 17:19:21 - * @Entity com.supervision.model.DiseasePhysical - */ +* @author flevance +* @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Mapper +* @createDate 2023-10-20 17:19:21 +* @Entity com.supervision.model.DiseasePhysical +*/ public interface DiseasePhysicalMapper extends BaseMapper<DiseasePhysical> { List<DiseasePhysicalResVo> queryListByDiseaseId(@Param("diseaseId") String diseaseId); diff --git a/virtual-patient-model/src/main/java/com/supervision/model/Disease.java b/virtual-patient-model/src/main/java/com/supervision/model/Disease.java index 10128f97..620a78c9 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/Disease.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/Disease.java @@ -27,13 +27,6 @@ public class Disease implements Serializable { private String id; - @Schema(description = "疾病名称") - private String diseaseName; - - - @Schema(description = "疾病分类别名") - private String diseaseNameAlias; - /** * 疾病编码 */ @@ -41,10 +34,11 @@ public class Disease implements Serializable { private String code; - @Schema(description = "包含的疾病id") - @TableField(typeHandler = StringListTypeHandler.class) - private List<String> containDiseaseIds; + @Schema(description = "疾病名称") + private String diseaseName; + @Schema(description = "疾病分类别名") + private String diseaseNameAlias; /** * 状态 0未训练 1已训练 */ @@ -54,6 +48,11 @@ public class Disease implements Serializable { @Schema(description = "疾病类型 0单一疾病 1 复合疾病") private Integer diseaseType; + @Schema(description = "包含的疾病id") + @TableField(typeHandler = StringListTypeHandler.class) + private List<String> containDiseaseIds; + + @Schema(description = "症状") private String symptom; diff --git a/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java b/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java index 1f44c578..0811e837 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java @@ -125,7 +125,8 @@ public class MedicalRec extends Model<MedicalRec> implements Serializable { @Schema(description = "鉴别诊断依据") private String differentialDiagnosisCriteria; - @Schema(description = "全面检查") + // 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果 + @Schema(description = "预期诊断结果") private String fullCheck; @Schema(description = "提交给大模型的病历") @@ -158,6 +159,19 @@ public class MedicalRec extends Model<MedicalRec> implements Serializable { @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; + /** + *病例生成状态 + */ + @Schema(description = "病例生成状态") + private String medicalStatus; + + /** + * 病例创建类型 + */ + @Schema(description = "病例创建类型") + private String medicalImportType; + + @TableField(exist = false) private static final long serialVersionUID = 1L; } \ No newline at end of file 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 65cfb78b..d34d31f8 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 @@ -1,5 +1,6 @@ package com.supervision.service; +import com.supervision.dto.ClinicalInterviewDTO; import com.supervision.model.AskTemplateQuestionLibrary; import com.supervision.model.AskTemplateQuestionSimilarity; import com.baomidou.mybatisplus.extension.service.IService; @@ -30,4 +31,14 @@ public interface AskTemplateQuestionSimilarityService extends IService<AskTempla */ Map<String, List<String>> querySimilarityQuestionMapByLibraryLists(List<AskTemplateQuestionLibrary> libraryList); + + /** + * 查询相似问题 + * @param nameZh 中文名 + * @param similarityQuestion 相似问题 + * @return + */ + AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion); + + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/CommonDicService.java b/virtual-patient-model/src/main/java/com/supervision/service/CommonDicService.java index c941b28b..d511b7ea 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/CommonDicService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/CommonDicService.java @@ -4,6 +4,7 @@ import com.supervision.dto.CommonDictTreeDTO; import com.supervision.model.CommonDic; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.ArrayList; import java.util.List; /** @@ -19,4 +20,12 @@ public interface CommonDicService extends IService<CommonDic> { */ List<CommonDictTreeDTO> queryCommonDictTree(String groupCode); + + /** + * 查询字典表的配置 + * @param code + * @return + */ + public Long queryCommonDictTreeByCode(ArrayList<String> code); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/ConfigAncillaryItemService.java b/virtual-patient-model/src/main/java/com/supervision/service/ConfigAncillaryItemService.java index 648abec1..ddd15328 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/ConfigAncillaryItemService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/ConfigAncillaryItemService.java @@ -19,4 +19,13 @@ public interface ConfigAncillaryItemService extends IService<ConfigAncillaryItem List<ConfigAncillaryItemVo> queryVoList(AncillaryItemReqVo ancillaryItemReqVo); List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo); + + /** + * 查詢輔助檢查工具 + * @param name1 輔助檢查一级分類 + * @param name2 輔助檢查二级分類 + * @return + */ + ConfigAncillaryItem queryAncillaryItem( String name1,String name2); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalLocationService.java b/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalLocationService.java index 8ca03b3f..ccdb8d97 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalLocationService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalLocationService.java @@ -10,4 +10,12 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ConfigPhysicalLocationService extends IService<ConfigPhysicalLocation> { + + /** + * 查询体格检查通过locationName + * @param locationName 位置名称 + * @param level 层级 + * @return + */ + ConfigPhysicalLocation queryLocationTreeForLocationName(String locationName, String level); } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalToolService.java b/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalToolService.java index 0e93a76e..af72b11e 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalToolService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/ConfigPhysicalToolService.java @@ -15,4 +15,12 @@ public interface ConfigPhysicalToolService extends IService<ConfigPhysicalTool> List<ConfigPhysicalToolResVO> queryPhysicalToolList(); + /** + * 工具 + * @param type 工具类型 + * @param toolName 工具名称 + * @return + */ + ConfigPhysicalTool queryPhysicalToolByTypeAndToolName(String type, String toolName); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/DiseaseAncillaryService.java b/virtual-patient-model/src/main/java/com/supervision/service/DiseaseAncillaryService.java index 5c7edc6a..29574331 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/DiseaseAncillaryService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/DiseaseAncillaryService.java @@ -10,10 +10,10 @@ import java.util.List; import java.util.function.Supplier; /** - * @author flevance - * @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Service - * @createDate 2023-10-20 17:19:21 - */ +* @author flevance +* @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Service +* @createDate 2023-10-20 17:19:21 +*/ public interface DiseaseAncillaryService extends IService<DiseaseAncillary> { List<DiseaseAncillaryDto> queryDiseaseAncillaryDtoList(DiseaseAncillary diseaseAncillary); diff --git a/virtual-patient-model/src/main/java/com/supervision/service/DiseasePhysicalService.java b/virtual-patient-model/src/main/java/com/supervision/service/DiseasePhysicalService.java index 2efdd69c..65b81691 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/DiseasePhysicalService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/DiseasePhysicalService.java @@ -8,10 +8,10 @@ import com.supervision.vo.manage.DiseasePhysicalStrResVo; import java.util.List; /** - * @author flevance - * @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Service - * @createDate 2023-10-20 17:19:21 - */ +* @author flevance +* @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Service +* @createDate 2023-10-20 17:19:21 +*/ public interface DiseasePhysicalService extends IService<DiseasePhysical> { List<DiseasePhysicalResVo> queryListByDiseaseId(String diseaseId); diff --git a/virtual-patient-model/src/main/java/com/supervision/service/DiseaseService.java b/virtual-patient-model/src/main/java/com/supervision/service/DiseaseService.java index 2152c7cc..4407695b 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/DiseaseService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/DiseaseService.java @@ -1,6 +1,7 @@ package com.supervision.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.dto.UploadDiseaseDTO; import com.supervision.model.Disease; import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.vo.manage.DiseaseReqVo; @@ -33,4 +34,21 @@ public interface DiseaseService extends IService<Disease> { List<String> queryAllDiseaseListByDiseaseId(List<String> diseaseId); + /** + * 根据疾病编码查询 + * + * @param codeId + * @return + */ + List<String> queryDiseaseListByDiseaseCode(List<String> codeId); + + + /** + * 保存 + * @param uploadDiseaseResVos + * @return + */ + Disease saveDisease(List<UploadDiseaseDTO> uploadDiseaseResVos); + + } 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 14ff6e35..39d91d16 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 @@ -7,10 +7,10 @@ import com.supervision.vo.manage.MedicalRecPageReqVO; import com.supervision.vo.manage.MedicalRecPageResVO; /** -* @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 + */ public interface MedicalRecService extends IService<MedicalRec> { /** @@ -26,7 +26,7 @@ public interface MedicalRecService extends IService<MedicalRec> { * 生成一个病历编码,是最大的病历编码+1 * @param code 医院名称缩写 * @param gender 性别 M 男 F 女 - * @param id 记录ID + * @param id 记录ID */ void updateMedicalRecNo(String code,String gender,String id); 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 b6e71d47..ea971c50 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 @@ -14,13 +14,13 @@ import java.util.Map; import java.util.stream.Collectors; /** -* @author Administrator -* @description 针对表【vp_ask_template_question_similarity(相似问问题库)】的数据库操作Service实现 -* @createDate 2024-06-06 16:31:25 -*/ + * @author Administrator + * @description 针对表【vp_ask_template_question_similarity(相似问问题库)】的数据库操作Service实现 + * @createDate 2024-06-06 16:31:25 + */ @Service public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTemplateQuestionSimilarityMapper, AskTemplateQuestionSimilarity> - implements AskTemplateQuestionSimilarityService{ + implements AskTemplateQuestionSimilarityService { @Override public Map<String, List<String>> querySimilarityQuestionMapByLibraryIds(List<String> libraryIdList) { @@ -31,9 +31,9 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTem .collect(Collectors.groupingBy(AskTemplateQuestionSimilarity::getLibraryId, Collectors.mapping(AskTemplateQuestionSimilarity::getSimilarityQuestion, Collectors.toList()))); - if (CollUtil.isNotEmpty(libraryIdList)){ + if (CollUtil.isNotEmpty(libraryIdList)) { for (String libraryId : libraryIdList) { - if (!similarityMap.containsKey(libraryId)){ + if (!similarityMap.containsKey(libraryId)) { similarityMap.put(libraryId, new ArrayList<>()); } } @@ -45,11 +45,23 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTem @Override public Map<String, List<String>> querySimilarityQuestionMapByLibraryLists(List<AskTemplateQuestionLibrary> libraryList) { List<String> libraryIdList = new ArrayList<>(); - if (CollUtil.isNotEmpty(libraryList)){ + if (CollUtil.isNotEmpty(libraryList)) { libraryIdList = libraryList.stream().map(AskTemplateQuestionLibrary::getId).collect(Collectors.toList()); } return querySimilarityQuestionMapByLibraryIds(libraryIdList); } + + /** + * 查询相似问题 + * + * @param nameZh 中文名 + * @param similarityQuestion 相似问题 + * @return + */ + @Override + public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion) { + return this.baseMapper.querySimilarityQuestionByNameZhAndSimilarityQuestion(nameZh, similarityQuestion); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/CommonDicServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/CommonDicServiceImpl.java index 08876cda..bea975c3 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/CommonDicServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/CommonDicServiceImpl.java @@ -28,7 +28,7 @@ public class CommonDicServiceImpl extends ServiceImpl<CommonDicMapper, CommonDic List<CommonDic> list = new ArrayList<>(); if (StrUtil.isBlank(groupCode)) { list = super.lambdaQuery().list(); - }else { + } else { list = super.lambdaQuery().eq(CommonDic::getGroupCode, groupCode).list(); } Map<Long, List<CommonDic>> commonDicParentIdMap = list.stream().filter(e -> ObjectUtil.isNotNull(e.getParentId())) @@ -58,6 +58,22 @@ public class CommonDicServiceImpl extends ServiceImpl<CommonDicMapper, CommonDic } } + + /** + * 查询字典表的配置 + * @param code + * @return + */ + public Long queryCommonDictTreeByCode(ArrayList<String> code) { + return this.lambdaQuery() + .eq(CommonDic::getGroupCode, "AQT") + .ne(CommonDic::getParentId, "179") + .in(CommonDic::getCode, code) + .isNotNull(CommonDic::getParentId) + .count(); + } + + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigAncillaryItemServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigAncillaryItemServiceImpl.java index 3ad3f609..1ef7ed57 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigAncillaryItemServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigAncillaryItemServiceImpl.java @@ -91,6 +91,15 @@ public class ConfigAncillaryItemServiceImpl extends ServiceImpl<ConfigAncillaryI return super.lambdaQuery().like(StrUtil.isNotEmpty(keyWord), ConfigAncillaryItem::getItemName, keyWord) .or().like(StrUtil.isNotEmpty(keyWord), ConfigAncillaryItem::getType, keyWord).list(); } + + + @Override + public ConfigAncillaryItem queryAncillaryItem(String name1, String name2) { + return this.lambdaQuery() + .eq(ConfigAncillaryItem::getType, name1) + .eq(ConfigAncillaryItem::getItemName, name2) + .one(); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalLocationServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalLocationServiceImpl.java index 7a4940c5..99948223 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalLocationServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalLocationServiceImpl.java @@ -7,14 +7,22 @@ import com.supervision.mapper.ConfigPhysicalLocationMapper; import org.springframework.stereotype.Service; /** -* @author flevance -* @description 针对表【vp_config_physical_location(体格检查位置表配置表)】的数据库操作Service实现 -* @createDate 2023-10-20 17:19:21 -*/ + * @author flevance + * @description 针对表【vp_config_physical_location(体格检查位置表配置表)】的数据库操作Service实现 + * @createDate 2023-10-20 17:19:21 + */ @Service public class ConfigPhysicalLocationServiceImpl extends ServiceImpl<ConfigPhysicalLocationMapper, ConfigPhysicalLocation> - implements ConfigPhysicalLocationService{ + implements ConfigPhysicalLocationService { + + @Override + public ConfigPhysicalLocation queryLocationTreeForLocationName(String locationName, String level) { + return this.lambdaQuery() + .eq(ConfigPhysicalLocation::getLocationName, locationName) + .ne(ConfigPhysicalLocation::getLevel, level) + .one(); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalToolServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalToolServiceImpl.java index 286ce277..8284c982 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalToolServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/ConfigPhysicalToolServiceImpl.java @@ -40,6 +40,16 @@ public class ConfigPhysicalToolServiceImpl extends ServiceImpl<ConfigPhysicalToo return tool; }).sorted(Comparator.comparingInt(ConfigPhysicalToolResVO::getPriority)).collect(Collectors.toList()); } + + + @Override + public ConfigPhysicalTool queryPhysicalToolByTypeAndToolName(String type, String toolName) { + ConfigPhysicalTool configPhysicalTool = this.lambdaQuery() + .eq(ConfigPhysicalTool::getType, type) + .eq(ConfigPhysicalTool::getToolName, toolName) + .one(); + return configPhysicalTool; + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseAncillaryServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseAncillaryServiceImpl.java index a6d9e740..978cf379 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseAncillaryServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseaseAncillaryServiceImpl.java @@ -16,14 +16,14 @@ import java.util.List; import java.util.function.Supplier; /** - * @author flevance - * @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Service实现 - * @createDate 2023-10-20 17:19:21 - */ +* @author flevance +* @description 针对表【vp_disease_ancillary(疾病辅助检查)】的数据库操作Service实现 +* @createDate 2023-10-20 17:19:21 +*/ @Service @RequiredArgsConstructor public class DiseaseAncillaryServiceImpl extends ServiceImpl<DiseaseAncillaryMapper, DiseaseAncillary> - implements DiseaseAncillaryService{ + implements DiseaseAncillaryService{ @Override public List<DiseaseAncillaryDto> queryDiseaseAncillaryDtoList(DiseaseAncillary diseaseAncillary) { diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseasePhysicalServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseasePhysicalServiceImpl.java index d89cb503..08d77ed4 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseasePhysicalServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/DiseasePhysicalServiceImpl.java @@ -11,13 +11,13 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * @author flevance - * @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Service实现 - * @createDate 2023-10-20 17:19:21 - */ +* @author flevance +* @description 针对表【vp_disease_physical(疾病体格检查)】的数据库操作Service实现 +* @createDate 2023-10-20 17:19:21 +*/ @Service public class DiseasePhysicalServiceImpl extends ServiceImpl<DiseasePhysicalMapper, DiseasePhysical> - implements DiseasePhysicalService{ + implements DiseasePhysicalService{ @Override public List<DiseasePhysicalResVo> queryListByDiseaseId(String diseaseId) { 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 f98a07f1..58993854 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 @@ -5,30 +5,34 @@ import cn.hutool.core.lang.Assert; 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.dto.UploadDiseaseDTO; import com.supervision.model.Disease; import com.supervision.service.DiseaseService; import com.supervision.mapper.DiseaseMapper; +import com.supervision.util.StringChartUtil; +import com.supervision.util.UserUtil; import com.supervision.vo.manage.DiseaseReqVo; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; /** -* @author flevance -* @description 针对表【vp_disease(疾病名称)】的数据库操作Service实现 -* @createDate 2023-10-20 17:19:21 -*/ + * @author flevance + * @description 针对表【vp_disease(疾病名称)】的数据库操作Service实现 + * @createDate 2023-10-20 17:19:21 + */ @Service public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease> - implements DiseaseService{ + implements DiseaseService { @Override public List<Disease> listDiseaseNestIfComposite(String id) { Assert.notEmpty(id, "id is not allow empty"); Disease disease = super.getById(id); - if (!isCompositeDisease(disease) || CollUtil.isEmpty(disease.getContainDiseaseIds())){ + if (!isCompositeDisease(disease) || CollUtil.isEmpty(disease.getContainDiseaseIds())) { return CollUtil.newArrayList(disease); } @@ -42,7 +46,7 @@ public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease> @Override public List<String> queryAllDiseaseListByDiseaseId(List<String> diseaseId) { - if (CollUtil.isEmpty(diseaseId)){ + if (CollUtil.isEmpty(diseaseId)) { return new ArrayList<>(); } return this.baseMapper.queryAllDiseaseListByDiseaseId(diseaseId); @@ -50,24 +54,68 @@ public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease> /** * 是否是复合疾病 + * * @param disease 疾病 * @return true 是复合疾病 false 不是复合疾病 */ - private boolean isCompositeDisease(Disease disease){ + private boolean isCompositeDisease(Disease disease) { - if (Objects.isNull(disease)){ + if (Objects.isNull(disease)) { return false; } return isCompositeDisease(disease.getDiseaseType()); } - private boolean isCompositeDisease(Integer integer){ - if (Objects.isNull(integer)){ + private boolean isCompositeDisease(Integer integer) { + if (Objects.isNull(integer)) { return false; } return Integer.valueOf(1).equals(integer); } + + @Override + public List<String> queryDiseaseListByDiseaseCode(List<String> codeId) { + List<String> diseaseIdList = new ArrayList<>(); + List<Disease> diseaseList = this.lambdaQuery() + .select(Disease::getId) + .in(Disease::getCode, codeId) + .list(); + for (Disease disease : diseaseList) { + String diseaseId = disease.getId(); + diseaseIdList.add(diseaseId); + } + return diseaseIdList; + } + + + @Override + public Disease saveDisease(List<UploadDiseaseDTO> uploadDiseaseResVos) { + UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0); + // 保存疾病 + String categoryCode = uploadDiseaseDTO.getCategoryCode(); + String diseaseClassificationName = uploadDiseaseDTO.getDiseaseClassificationName(); + String commonName = uploadDiseaseDTO.getCommonName(); + 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) { + List<String> codeIdList = Arrays.stream(categoryCode.split("/")).toList(); + List<String> listByDiseaseCode = queryDiseaseListByDiseaseCode(codeIdList); + Assert.isTrue(listByDiseaseCode.size() != codeIdList.size(), "请检查复合疾病中的单一疾病是否存在"); + disease.setContainDiseaseIds(listByDiseaseCode); + } + disease.setSymptom(mainSymptom); + disease.setCreateUserId(UserUtil.getUser().getId()); + disease.setUpdateUserId(UserUtil.getUser().getId()); + save(disease); + return disease; + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/util/StringChartUtil.java b/virtual-patient-model/src/main/java/com/supervision/util/StringChartUtil.java new file mode 100644 index 00000000..276c7c5c --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/util/StringChartUtil.java @@ -0,0 +1,24 @@ +package com.supervision.util; + +import java.util.Arrays; + +/** + * @Author:longbao + * @Date:2024/11/1 13:52 + * @Description: + */ +public class StringChartUtil { + + + /** + * 字符串中某个字符出现的次数 + * @param str 源字符串 + * @param targetChar 查找字符 + * @return 出现次数 + */ + public static int countChar(String str, char targetChar) { + return (int) Arrays.stream(str.split("")) + .filter(s -> s.charAt(0) == targetChar) + .count(); + } +} diff --git a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml index 96d5d6a7..528a46e1 100644 --- a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionLibraryMapper.xml @@ -73,4 +73,17 @@ <select id="queryPageList" resultMap="askQuestionLibraryResultMap" resultType="com.supervision.vo.manage.AskQuestionLibraryResVo"> <include refid="queryListsql"></include> </select> + + + <select id="queryByName" resultType="java.lang.String" + parameterType="java.lang.String"> + select l.id + from vp_ask_template_question_library l + where l.dict_id = (select id + from vp_common_dic d + where d.parent_id IS NOT NULL + and d.group_code = 'AQT' + and d.parent_id != '179' + and d.name_zh = (#{nameZh})) + </select> </mapper> diff --git a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml index 9dee8606..d72d6e20 100644 --- a/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/AskTemplateQuestionSimilarityMapper.xml @@ -5,18 +5,37 @@ <mapper namespace="com.supervision.mapper.AskTemplateQuestionSimilarityMapper"> <resultMap id="BaseResultMap" type="com.supervision.model.AskTemplateQuestionSimilarity"> - <id property="id" column="id" jdbcType="VARCHAR"/> - <result property="libraryId" column="library_id" jdbcType="VARCHAR"/> - <result property="similarityQuestion" column="similarity_question" jdbcType="VARCHAR"/> - <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/> - <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> - <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/> - <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> + <id property="id" column="id" jdbcType="VARCHAR"/> + <result property="libraryId" column="library_id" jdbcType="VARCHAR"/> + <result property="similarityQuestion" column="similarity_question" jdbcType="VARCHAR"/> + <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/> + <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> + <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/> + <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List"> - id,library_id,similarity_question, + id + ,library_id,similarity_question, create_user_id,create_time,update_user_id, update_time </sql> + + + <select id="querySimilarityQuestionByNameZhAndSimilarityQuestion" resultMap="BaseResultMap" + resultType="java.lang.String"> + select * + from vp_ask_template_question_similarity s + where s.library_id = (select l.id + from vp_ask_template_question_library l + where l.dict_id = (select id + from vp_common_dic d + where d.parent_id IS NOT NULL + and d.group_code = 'AQT' + and d.parent_id != '179' + and d.name_zh = (#{nameZh}))) + and similarity_question = #{similarityQuestion}; + </select> + + </mapper> diff --git a/virtual-patient-model/src/main/resources/mapper/DiseaseAncillaryMapper.xml b/virtual-patient-model/src/main/resources/mapper/DiseaseAncillaryMapper.xml index f406fa40..ff932875 100644 --- a/virtual-patient-model/src/main/resources/mapper/DiseaseAncillaryMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/DiseaseAncillaryMapper.xml @@ -90,10 +90,10 @@ da.item_id as itemId, cai.item_name as itemName, cai.type as itemType, - da.primarily_diagnosis_criteria_flag as primarilyDiagnosisCriteriaFlag, - da.basis_confirm_flag as basisConfirmFlag, - da.basis_identification_flag as basisIdentificationFlag, - da.full_check_flag as fullCheckFlag, + case ifnull(da.primarily_diagnosis_criteria_flag,0) when 0 then null when 1 then '初步诊断依据' end as primarilyDiagnosisCriteriaFlag, + case ifnull(da.basis_confirm_flag,0) when 0 then null when 1 then '证实诊断依据' end as basisConfirmFlag, + case ifnull(da.basis_identification_flag,0) when 0 then null when 1 then '鉴别依据' end as basisIdentificationFlag, + case ifnull(da.full_check_flag,0) when 0 then null when 1 then '全面依据' end as fullCheckFlag, da.diagnosis_assessment_flag as diagnosisAssessmentFlag, da.expected_diagnosis_result as expectedDiagnosisResult, da.require_check_flag as requireCheckFlag, diff --git a/virtual-patient-model/src/main/resources/mapper/DiseasePhysicalMapper.xml b/virtual-patient-model/src/main/resources/mapper/DiseasePhysicalMapper.xml index 27679ca0..b307c72d 100644 --- a/virtual-patient-model/src/main/resources/mapper/DiseasePhysicalMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/DiseasePhysicalMapper.xml @@ -5,25 +5,25 @@ <mapper namespace="com.supervision.mapper.DiseasePhysicalMapper"> <resultMap id="BaseResultMap" type="com.supervision.model.DiseasePhysical"> - <id property="id" column="id" jdbcType="VARCHAR"/> - <result property="diseaseId" column="disease_id" jdbcType="VARCHAR"/> - <result property="toolId" column="tool_id" jdbcType="VARCHAR"/> - <result property="locationId" column="location_id" jdbcType="VARCHAR"/> - <result property="requireCheckFlag" column="require_check_flag" jdbcType="INTEGER"/> - <result property="primarilyDiagnosisCriteriaFlag" column="primarily_diagnosis_criteria_flag" jdbcType="INTEGER"/> - <result property="basisConfirmFlag" column="basis_confirm_flag" jdbcType="INTEGER"/> - <result property="basisIdentificationFlag" column="basis_identification_flag" jdbcType="INTEGER"/> - <result property="diagnosisAssessmentFlag" column="diagnosis_assessment_flag" jdbcType="INTEGER"/> - <result property="expectedDiagnosisResult" column="expected_diagnosis_result" jdbcType="VARCHAR"/> - <result property="fullCheckFlag" column="full_check_flag" jdbcType="INTEGER"/> - <result property="locationDiagnosisFlag" column="location_diagnosis_flag" jdbcType="INTEGER"/> - <result property="result" column="result" jdbcType="VARCHAR"/> - <result property="normalResult" column="normal_result" jdbcType="VARCHAR"/> - <result property="trait" column="trait" jdbcType="VARCHAR"/> - <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/> - <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> - <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/> - <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> + <id property="id" column="id" jdbcType="VARCHAR"/> + <result property="diseaseId" column="disease_id" jdbcType="VARCHAR"/> + <result property="toolId" column="tool_id" jdbcType="VARCHAR"/> + <result property="locationId" column="location_id" jdbcType="VARCHAR"/> + <result property="requireCheckFlag" column="require_check_flag" jdbcType="INTEGER"/> + <result property="primarilyDiagnosisCriteriaFlag" column="primarily_diagnosis_criteria_flag" jdbcType="INTEGER"/> + <result property="basisConfirmFlag" column="basis_confirm_flag" jdbcType="INTEGER"/> + <result property="basisIdentificationFlag" column="basis_identification_flag" jdbcType="INTEGER"/> + <result property="diagnosisAssessmentFlag" column="diagnosis_assessment_flag" jdbcType="INTEGER"/> + <result property="expectedDiagnosisResult" column="expected_diagnosis_result" jdbcType="VARCHAR"/> + <result property="fullCheckFlag" column="full_check_flag" jdbcType="INTEGER"/> + <result property="locationDiagnosisFlag" column="location_diagnosis_flag" jdbcType="INTEGER"/> + <result property="result" column="result" jdbcType="VARCHAR"/> + <result property="normalResult" column="normal_result" jdbcType="VARCHAR"/> + <result property="trait" column="trait" jdbcType="VARCHAR"/> + <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/> + <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> + <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/> + <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List"> @@ -70,10 +70,10 @@ cpl.location_name as locationName, cpt.tool_name as toolName, cpt.type as toolType, - dp.primarily_diagnosis_criteria_flag as primarilyDiagnosisCriteriaFlag, - dp.basis_confirm_flag as basisConfirmFlag, - dp.basis_identification_flag as basisIdentificationFlag, - dp.full_check_flag as fullCheckFlag, + case ifnull(dp.primarily_diagnosis_criteria_flag,0) when 0 then null when 1 then '初步诊断依据' end as primarilyDiagnosisCriteriaFlag, + case ifnull(dp.basis_confirm_flag,0) when 0 then null when 1 then '证实诊断依据' end as basisConfirmFlag, + case ifnull(dp.basis_identification_flag,0) when 0 then null when 1 then '鉴别依据' end as basisIdentificationFlag, + case ifnull(dp.full_check_flag,0) when 0 then null when 1 then '全面依据' end as fullCheckFlag, dp.diagnosis_assessment_flag as diagnosisAssessmentFlag, dp.location_diagnosis_flag as locationDiagnosisFlag, dp.expected_diagnosis_result as expectedDiagnosisResult, diff --git a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/DiagnosisResultResVO.java b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/DiagnosisResultResVO.java index 8138ee90..1e0ae3dc 100644 --- a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/DiagnosisResultResVO.java +++ b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/DiagnosisResultResVO.java @@ -21,8 +21,11 @@ public class DiagnosisResultResVO { @Schema(description = "鉴别诊断依据") private BasisIdentificationResultResVO basisIdentificationResult; - @Schema(description = "全面检查-(暂无相关数据)") - private FullCheckResVO fullCheck; +// @Schema(description = "全面检查-(暂无相关数据)") +// private FullCheckResVO fullCheck; + // 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果 + @Schema(description = "预期诊断结果") + private String fullCheck; @Schema(description = "处置方案") private DealPlanResVO dealPlan; diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java index 50d91c1b..64c2e3bf 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java @@ -62,6 +62,12 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService private final DiseaseAncillaryService diseaseAncillaryService; + public static <K> Predicate<K> distinctPredicateNotNull(Function<K, Object> function) { + ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(); + // 根据key进行去重,并排除为null的数据 + return t -> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true); + + } @Override public DiagnosisResultResVO queryDiagnosisResult(String processId) { @@ -79,7 +85,8 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService // 4.生成鉴别诊断依据 diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(medicalRec, processId)); // 5.全面检查-(暂无相关数据) 后面再看 - diagnosisResultResVO.setFullCheck(null); + // 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果 + diagnosisResultResVO.setFullCheck(medicalRec.getFullCheck()); // 6.处置方案 diagnosisResultResVO.setDealPlan(createDealPlan(process.getDiseaseId(), processId)); return diagnosisResultResVO; @@ -194,7 +201,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService return basisPrimaryResultResVO; } - private List<BasisDiagnosisNodeResVO> qaRecordMergeListsBasisPrimary(List<DiagnosisQaRecord> qaRecordList, List<AskPatientAnswer> list) { BiFunction<DiagnosisQaRecord, AskPatientAnswer, Boolean> biFunction = (qaRecord, qa) -> qa.getLibraryQuestionId().equals(qaRecord.getQuestionLibraryId()); @@ -209,7 +215,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService return mergeListsBasedOnCondition(qaRecordList, list, biFunction, t1, t2); } - private List<BasisDiagnosisNodeResVO> physicalRecordMergeLists(List<PhysicalRecordByResultDTO> physicalRecordList, List<DiseasePhysicalResVo> diseasePhysicalResVos, Function<PhysicalRecordByResultDTO, Integer> functionCorrect) { @@ -290,7 +295,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService AncillaryRecordByResultDTO::getPrimarilyDiagnosisCriteriaFlag); } - private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeListsConfirm(List<AncillaryRecordByResultDTO> ancillaryRecordList, List<DiseaseAncillaryResVo> diseaseAncillaryResVos) { @@ -391,14 +395,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService return expertDiagnosisResultResVO; } - - public static <K> Predicate<K> distinctPredicateNotNull(Function<K, Object> function) { - ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(); - // 根据key进行去重,并排除为null的数据 - return t -> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true); - - } - /** * 生成雷达图 * <p>