From 01b0072058dffe962ab5668345b2a9a3102095a6 Mon Sep 17 00:00:00 2001
From: longbao <1923439579@qq.com>
Date: Tue, 5 Nov 2024 17:24:13 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=B5=81=E7=A8=8B=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E5=8C=96=E3=80=91=201.=E6=96=B0=E5=A2=9E=E4=B8=8B=E8=BD=BD?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=8E=A5=E5=8F=A3=202.=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF=E6=8E=A5=E5=8F=A3=203.?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=A8=E9=9D=A2=E6=A3=80=E6=9F=A5=E4=B8=BA?=
=?UTF-8?q?=E9=A2=84=E6=9C=9F=E8=AF=8A=E6=96=AD=E7=BB=93=E6=9E=9C=E5=B9=B6?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/supervision/config/WebConfig.java | 2 +
...kTemplateQuestionLibraryManageService.xml} | 0
virtual-patient-manage/pom.xml | 10 +-
.../DiseaseAncillaryManageController.java | 2 +-
.../DiseaseManageController.java | 12 +-
.../MedicalRecManageController.java | 31 +-
.../manage/enums/DiseasePhysicalEnum.java | 41 ++
.../manage/enums/DiseaseTypeEnum.java | 37 ++
.../manage/enums/MedicalStatusEnum.java | 27 ++
.../manage/enums/MedicalTypeEnum.java | 24 ++
.../manage/enums/VirtualSheetNameEnum.java | 37 ++
.../manage/pojo/vo/UploadDiseaseResVo.java | 19 +
...kTemplateQuestionLibraryManageService.java | 24 ++
.../DiseaseAncillaryManageService.java | 8 +
.../service/DiseasePhysicalManageService.java | 10 +-
.../service/MedicalRecManageService.java | 11 +-
.../AskQuestionLibraryManageServiceImpl.java | 3 +-
...plateQuestionLibraryManageServiceImpl.java | 128 +++++++
.../DiseaseAncillaryManageServiceImpl.java | 107 ++++--
.../impl/DiseaseManageServiceImpl.java | 56 +--
.../DiseasePhysicalManageServiceImpl.java | 106 ++++--
.../service/impl/FileManageServiceImpl.java | 40 +-
.../impl/MedicalRecManageServiceImpl.java | 358 +++++++++++++++++-
.../虚拟病例信息模板v3.0.xlsx | Bin 0 -> 961466 bytes
.../manage/MedicalAiAnswerSetter.java | 30 +-
.../supervision/dto/ClinicalInterviewDTO.java | 33 ++
.../com/supervision/dto/HandlingPlanDto.java | 33 ++
.../dto/OverviewEvaluationResultsDto.java | 30 ++
.../supervision/dto/SupplementaryTestDto.java | 54 +++
.../com/supervision/dto/UploadDiseaseDTO.java | 63 +++
.../dto/UploadPhysicalExaminationDTO.java | 60 +++
.../com/supervision/enums/EnumMedicalRec.java | 32 ++
.../AskTemplateQuestionLibraryMapper.java | 4 +
.../AskTemplateQuestionSimilarityMapper.java | 8 +
.../mapper/DiseaseAncillaryMapper.java | 10 +-
.../mapper/DiseasePhysicalMapper.java | 10 +-
.../java/com/supervision/model/Disease.java | 19 +-
.../com/supervision/model/MedicalRec.java | 16 +-
.../AskTemplateQuestionSimilarityService.java | 11 +
.../supervision/service/CommonDicService.java | 9 +
.../service/ConfigAncillaryItemService.java | 9 +
.../ConfigPhysicalLocationService.java | 8 +
.../service/ConfigPhysicalToolService.java | 8 +
.../service/DiseaseAncillaryService.java | 8 +-
.../service/DiseasePhysicalService.java | 8 +-
.../supervision/service/DiseaseService.java | 18 +
.../service/MedicalRecService.java | 10 +-
...TemplateQuestionSimilarityServiceImpl.java | 28 +-
.../service/impl/CommonDicServiceImpl.java | 18 +-
.../impl/ConfigAncillaryItemServiceImpl.java | 9 +
.../ConfigPhysicalLocationServiceImpl.java | 18 +-
.../impl/ConfigPhysicalToolServiceImpl.java | 10 +
.../impl/DiseaseAncillaryServiceImpl.java | 10 +-
.../impl/DiseasePhysicalServiceImpl.java | 10 +-
.../service/impl/DiseaseServiceImpl.java | 70 +++-
.../com/supervision/util/StringChartUtil.java | 24 ++
.../AskTemplateQuestionLibraryMapper.xml | 13 +
.../AskTemplateQuestionSimilarityMapper.xml | 35 +-
.../mapper/DiseaseAncillaryMapper.xml | 8 +-
.../mapper/DiseasePhysicalMapper.xml | 46 +--
.../pojo/vo/DiagnosisResultResVO.java | 7 +-
.../impl/AskDiagnosisResultServiceImpl.java | 20 +-
62 files changed, 1653 insertions(+), 257 deletions(-)
rename virtual-patient-graph/src/main/resources/nebulaMapper/{MedicalRecDao.xml => AskTemplateQuestionLibraryManageService.xml} (100%)
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseasePhysicalEnum.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/enums/DiseaseTypeEnum.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalStatusEnum.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/enums/MedicalTypeEnum.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/enums/VirtualSheetNameEnum.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/UploadDiseaseResVo.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/service/AskTemplateQuestionLibraryManageService.java
create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskTemplateQuestionLibraryManageServiceImpl.java
create mode 100644 virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/ClinicalInterviewDTO.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/OverviewEvaluationResultsDto.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/SupplementaryTestDto.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/UploadDiseaseDTO.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/dto/UploadPhysicalExaminationDTO.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/enums/EnumMedicalRec.java
create mode 100644 virtual-patient-model/src/main/java/com/supervision/util/StringChartUtil.java
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 @@
${project.version}
-
- com.supervision
- virtual-patient-common
- ${project.version}
-
+
+
+
+
+
org.projectlombok
lombok
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 {
+
+
+ public String queryByName(String nameZh);
+
+ /**
+ * 保存问题
+ * @param code
+ */
+ void saveSimilarityQuestion(List 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 queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo);
+ /**
+ * 保存辅助检查
+ * @param disease
+ * @param supplementaryTestDtos
+ */
+ void batchSaveAncillaryExaminationList(Disease disease, List 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 queryTree(String diseaseId, String toolId);
+
+ /**
+ * 保存体格检查
+ * @param diseaseList 疾病信息
+ * @param uploadPhysicalExaminationDTOS 体格检查信息
+ */
+ void batchSavePhysicalExaminationList(Disease diseaseList, List 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 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
+ 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().select("max(code) as code"));
+ if (Objects.isNull(askTemplateQuestionLibrary)) {
+ return null;
+ }
+ return askTemplateQuestionLibrary.getCode();
+ }
+
+ /**
+ * 模板导入-相似问题
+ *
+ * @param clinicalInterviewDTOS
+ */
+ @Override
+ public void saveSimilarityQuestion(List clinicalInterviewDTOS) {
+ // 1.判定条件集合是否存在
+ ArrayList 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 queryListByDiseaseId(String diseaseId) {
- Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"diseaseId不能为空");
+ Assert.isTrue(StrUtil.isNotEmpty(diseaseId), "diseaseId不能为空");
List diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(diseaseId);
diseaseAncillaryResVos.forEach(DiseaseAncillaryResVo::populateOther);
return diseaseAncillaryResVos;
@@ -40,7 +47,7 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage
@Override
public List queryListStrByDiseaseId(String diseaseId) {
- Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"diseaseId不能为空");
+ Assert.isTrue(StrUtil.isNotEmpty(diseaseId), "diseaseId不能为空");
List 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 queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo) {
List configAncillaryItemResVOS = configAncillaryItemService.queryAncillaryItemList(ancillaryItemReqVo);
- if (CollUtil.isEmpty(configAncillaryItemResVOS) || StrUtil.isEmpty(ancillaryItemReqVo.getDiseaseId())){
+ if (CollUtil.isEmpty(configAncillaryItemResVOS) || StrUtil.isEmpty(ancillaryItemReqVo.getDiseaseId())) {
return configAncillaryItemResVOS;
}
List diseaseAncillaryResVos = diseaseAncillaryService.queryListByDiseaseId(ancillaryItemReqVo.getDiseaseId());
- if (CollUtil.isEmpty(diseaseAncillaryResVos)){
+ if (CollUtil.isEmpty(diseaseAncillaryResVos)) {
return configAncillaryItemResVOS;
}
List 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 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 supplementaryTestDtos) {
+ List 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 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 diseaseMapCopy = new HashMap<>(diseaseMap);
+ final Map 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 queryByAnyCondition(String code, String diseaseName, String diseaseNameAlias) {
- private List 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 queryByCode(String code){
- if (Objects.isNull(code)){
+
+ private List 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 queryListByDiseaseId(String diseaseId) {
- Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空");
+ isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空");
List diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId);
diseasePhysicalResVos.forEach(DiseasePhysicalResVo::populateOther);
@@ -50,7 +55,7 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
@Override
public List queryListToStringByDiseaseId(String diseaseId) {
- Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空");
+ isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空");
List 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 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 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 diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId);
- List locationIds = diseasePhysicalResVos.stream().filter(vo->toolId.equals(vo.getToolId()))
+ List 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 uploadPhysicalExaminationDTOS) {
+ List 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 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 queryMedicalRecManagePage(String selfDescKeyword, String gender,String patientName,
+ public IPage 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 dicIds = chiildCommonDicList.stream().map(i -> String.valueOf(i.getId())).collect(Collectors.toList());
List askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().in(AskTemplateQuestionLibrary::getDictId, dicIds).list();
- if (CollUtil.isEmpty(askTemplateQuestionLibraryList)){
+ if (CollUtil.isEmpty(askTemplateQuestionLibraryList)) {
return;
}
Set libraryIds = qaList.stream().map(MedicalRecQaVO::getLibraryQuestionId).collect(Collectors.toSet());
@@ -124,7 +140,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
}
- private void saveAskPatientAnswer(List qaList,String medicalRecId,Integer answerType){
+ private void saveAskPatientAnswer(List qaList, String medicalRecId, Integer answerType) {
if (CollUtil.isEmpty(qaList)) {
return;
}
@@ -142,6 +158,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
askPatientAnswer.insert();
}
}
+
@Override
public List 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 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 libraryMap = new HashMap<>();
- if (CollUtil.isNotEmpty(askPatientAnswerList)){
+ if (CollUtil.isNotEmpty(askPatientAnswerList)) {
// 查询问题库信息
List 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 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 uploadDiseaseResVos = excelReader.readAll(UploadDiseaseDTO.class);
+ assertSheetDataBasicInfo(uploadDiseaseResVos);
+ disease = diseaseService.saveDisease(uploadDiseaseResVos);
+ medicalRec = batchSaveMedicalRec(uploadDiseaseResVos, disease);
+ continue;
+ case "临床问诊":
+ assertTitle(excelReader, "临床问诊");
+ List clinicalInterviewDTOS = excelReader.readAll(ClinicalInterviewDTO.class);
+ if (null == clinicalInterviewDTOS || clinicalInterviewDTOS.isEmpty()) {
+ continue;
+ }
+ assertSheetDataClinicalInterview(clinicalInterviewDTOS);
+ askTemplateQuestionLibraryManageService.saveSimilarityQuestion(clinicalInterviewDTOS);
+ continue;
+ case "体格检查":
+ assertTitle(excelReader, "体格检查");
+ List uploadPhysicalExaminationDTOS = excelReader.readAll(UploadPhysicalExaminationDTO.class);
+ if (null == uploadPhysicalExaminationDTOS || uploadPhysicalExaminationDTOS.isEmpty()) {
+ continue;
+ }
+ assertSheetDataPhysicalExamination(uploadPhysicalExaminationDTOS);
+ diseasePhysicalManageService.batchSavePhysicalExaminationList(disease, uploadPhysicalExaminationDTOS);
+ continue;
+ case "辅助检查":
+ assertTitle(excelReader, "辅助检查");
+ List supplementaryTestDtos = excelReader.readAll(SupplementaryTestDto.class);
+ if (null == supplementaryTestDtos || supplementaryTestDtos.isEmpty()) {
+ continue;
+ }
+ assertSheetDataSupplementaryTest(supplementaryTestDtos);
+ diseaseAncillaryManageService.batchSaveAncillaryExaminationList(disease, supplementaryTestDtos);
+ continue;
+ case "处置计划":
+ assertTitle(excelReader, "处置计划");
+ List handlingPlanDtos = excelReader.readAll(HandlingPlanDto.class);
+ System.out.println(handlingPlanDtos);
+ continue;
+ case "评估结果概述":
+ assertTitle(excelReader, "评估结果概述");
+ List 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 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 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 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