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 78b4abad..c034620e 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 @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.apache.ibatis.annotations.Update; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -44,7 +45,7 @@ public class MedicalRecManageController { @Parameter(name = "patientName", description = "患者姓名 v1.3 新加字段") String patientName, @Parameter(name = "diseaseId", description = "疾病ID") String diseaseId, Integer pageNum, Integer pageSize) { - return medicalRecManageService.queryMedicalRecManagePage(selfDescKeyword, gender,patientName, diseaseId, pageNum, pageSize); + return medicalRecManageService.queryMedicalRecManagePage(selfDescKeyword, gender, patientName, diseaseId, pageNum, pageSize); } @Operation(summary = "创建病历") @@ -61,19 +62,19 @@ public class MedicalRecManageController { @Operation(summary = "创建病历时查看配置的辅助检查项") @GetMapping("queryDiseaseAncillaryByCreat") - public List queryDiseaseAncillaryByCreat(String diseaseId){ + public List queryDiseaseAncillaryByCreat(String diseaseId) { return medicalRecManageService.queryDiseaseAncillaryByCreat(diseaseId); } @Operation(summary = "创建病历时查看配置的体格检查项") @GetMapping("queryDiseasePhysicalByCreat") - public List queryDiseasePhysicalByCreat(String diseaseId){ + public List queryDiseasePhysicalByCreat(String diseaseId) { return medicalRecManageService.queryDiseasePhysicalByCreat(diseaseId); } @Operation(summary = "创建病历时查看配置的处置计划") @GetMapping("queryDiseaseTreatmentPlanByCreat") - public List queryDiseaseTreatmentPlanByCreat(String diseaseId){ + public List queryDiseaseTreatmentPlanByCreat(String diseaseId) { return medicalRecManageService.queryDiseaseTreatmentPlanByCreat(diseaseId); } @@ -130,22 +131,32 @@ public class MedicalRecManageController { @Operation(summary = "修改病历状态") @GetMapping("/updateMedicalStatus") public Boolean updateMedicalStatus(@Parameter(name = "medicalRecId", description = "病例id") String medicalRecId, - @Parameter(name = "status", description = "病历状态 1:未上线 2:上线") Integer status) { + @Parameter(name = "status", description = "病历状态 1:未上线 2:上线") Integer status) { - return medicalRecManageService.updateMedicalStatus(medicalRecId,status); + return medicalRecManageService.updateMedicalStatus(medicalRecId, status); } @Operation(summary = "下载病例导入模板") @GetMapping("/downloadMedicalTemplate") - public void downloadDiseaseTemplate(HttpServletResponse response) throws Exception { + public void downloadMedicalTemplate(HttpServletResponse response) throws Exception { medicalRecManageService.downloadMedicalTemplate(response); } @Operation(summary = "导入病例信息") @PostMapping("/uploadMedical") - public void uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception { + public void uploadMedical(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception { medicalRecManageService.uploadMedical(multipartFile); } + + + @Operation(summary = "生成病历模型提示词") + @PutMapping("/uploadMedicalAiById") + public void uploadMedicalAi(@Parameter(name = "medicalRecId", description = "病例id") String medicalRecId, + @Parameter(name = "medicalRecAi", description = "提示词") String medicalRecAi) throws Exception { + medicalRecManageService.uploadMedicalAi(medicalRecId, medicalRecAi); + } + + } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseTreatmentPlanManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseTreatmentPlanManageService.java index abcf5409..6b7b7f9a 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseTreatmentPlanManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/DiseaseTreatmentPlanManageService.java @@ -1,5 +1,7 @@ package com.supervision.manage.service; +import cn.hutool.poi.excel.ExcelReader; +import com.supervision.model.Disease; import com.supervision.model.DiseaseTreatmentPlan; import com.supervision.vo.manage.DiseaseTreatmentPlanReqVo; import com.supervision.vo.manage.DiseaseTreatmentPlanResVo; @@ -22,4 +24,15 @@ public interface DiseaseTreatmentPlanManageService { List queryDiseaseTreatmentPlanTree(Integer disposalMethod, String diseaseId); boolean updateDiseaseTreatmentPlan(DiseaseTreatmentPlanReqVo diseaseTreatmentPlan); + + + /** + * 保存处置计划 + * 文档导入 + * + * @param excelReader + * @param diseaseId + */ + void batchSaveTreatmentPlanToDoc(ExcelReader excelReader, Disease diseaseId); + } 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 bd02110d..c855c75f 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 @@ -16,7 +16,7 @@ public interface MedicalRecManageService { List queryDiseaseListByCreat(); - IPage queryMedicalRecManagePage(String selfDescKeyword, String gender,String patientName, + IPage queryMedicalRecManagePage(String selfDescKeyword, String gender, String patientName, String diseaseId, Integer pageNum, Integer pageSize); void createMedicalRec(MedicalRecManageVO reqVO); @@ -49,6 +49,7 @@ public interface MedicalRecManageService { /** * 下载模板 + * * @param response * @throws Exception */ @@ -57,11 +58,19 @@ public interface MedicalRecManageService { /** * 流程自動化 上傳病歷模板導入 + * * @param multipartFile * @throws Exception */ void uploadMedical(MultipartFile multipartFile) throws Exception; + /** + * 修改病历提示词 + * + * @param medicalRecId + * @param medicalRecAi + */ + void uploadMedicalAi(String medicalRecId, String medicalRecAi); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseTreatmentPlanManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseTreatmentPlanManageServiceImpl.java index b036c47d..90be8e4d 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseTreatmentPlanManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/DiseaseTreatmentPlanManageServiceImpl.java @@ -5,12 +5,13 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import com.supervision.dto.HandlingPlanDtoDown; +import com.supervision.dto.HandlingPlanDtoTop; import com.supervision.manage.service.ConfigTreatmentPlanManageService; import com.supervision.manage.service.DiseaseTreatmentPlanManageService; -import com.supervision.model.CommonDic; -import com.supervision.model.ConfigDrug; -import com.supervision.model.DiseaseTreatmentPlan; -import com.supervision.model.DiseaseTreatmentPlanDrug; +import com.supervision.manage.service.DrugManageService; +import com.supervision.model.*; import com.supervision.service.CommonDicService; import com.supervision.service.ConfigDrugService; import com.supervision.service.DiseaseTreatmentPlanDrugService; @@ -20,13 +21,13 @@ import com.supervision.vo.manage.DiseaseTreatmentPlanResVo; import com.supervision.vo.manage.DiseaseTreatmentPlanTreeNode; import com.supervision.vo.manage.TreatmentPlanTreeNode; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.*; 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; @Service @@ -43,13 +44,16 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl private final CommonDicService commonDicService; + private final DrugManageService drugManageService; + + @Override public List queryListByDiseaseId(String diseaseId) { - Assert.notEmpty(diseaseId,"疾病id不能为空"); + Assert.notEmpty(diseaseId, "疾病id不能为空"); List diseaseTreatmentPlanResVos = diseaseTreatmentPlanService.queryListByDiseaseId(diseaseId); - if (CollUtil.isEmpty(diseaseTreatmentPlanResVos)){ + if (CollUtil.isEmpty(diseaseTreatmentPlanResVos)) { return diseaseTreatmentPlanResVos; } @@ -64,23 +68,23 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl // 翻译处置计划 **处置计划对应于药物中的剂型** List drugIds = diseaseTreatmentPlanDrugList.stream() .map(DiseaseTreatmentPlanDrug::getDrugId).filter(StrUtil::isNotEmpty).collect(Collectors.toList()); - Map> drugIdMapDose = new HashMap<>(); - if (CollUtil.isNotEmpty(drugIds)){ + Map> drugIdMapDose = new HashMap<>(); + if (CollUtil.isNotEmpty(drugIds)) { List configDrugs = configDrugService.listByIds(drugIds); - if (CollUtil.isNotEmpty(configDrugs)){ + if (CollUtil.isNotEmpty(configDrugs)) { Map doseDic = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "DOSE").list() .stream().collect(Collectors.toMap(CommonDic::getCode, CommonDic::getNameZh)); - // 组合药物id与剂型之间的映射关系 - drugIdMapDose = configDrugs.stream().collect(Collectors.toMap(ConfigDrug::getId, drug -> { + // 组合药物id与剂型之间的映射关系 + drugIdMapDose = configDrugs.stream().collect(Collectors.toMap(ConfigDrug::getId, drug -> { if (StrUtil.isNotEmpty(drug.getDosageForm())) { - return Pair.of(drug.getDosageForm(),doseDic.getOrDefault(drug.getDosageForm(),StrUtil.EMPTY)); + return Pair.of(drug.getDosageForm(), doseDic.getOrDefault(drug.getDosageForm(), StrUtil.EMPTY)); } - return Pair.of(StrUtil.EMPTY,StrUtil.EMPTY); + return Pair.of(StrUtil.EMPTY, StrUtil.EMPTY); })); } } Map> group = diseaseTreatmentPlanDrugList.stream() - .filter(item->Objects.nonNull(item.getDiseaseTreatmentPlanId())).collect(Collectors.groupingBy(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId)); + .filter(item -> Objects.nonNull(item.getDiseaseTreatmentPlanId())).collect(Collectors.groupingBy(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId)); for (DiseaseTreatmentPlanResVo item : diseaseTreatmentPlanResVos) { // 设置处置药物id集合 @@ -89,8 +93,8 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl .stream().map(DiseaseTreatmentPlanDrug::getDrugId).collect(Collectors.toList())); // 设置处置药物剂型与剂型的翻译数据 String drugId = CollUtil.getFirst(item.getDrugIds()); - if (StrUtil.isNotEmpty(drugId)){ - item.setFirstMeasuresId(drugIdMapDose.getOrDefault(drugId, Pair.of(StrUtil.EMPTY,StrUtil.EMPTY)).getKey()); + if (StrUtil.isNotEmpty(drugId)) { + item.setFirstMeasuresId(drugIdMapDose.getOrDefault(drugId, Pair.of(StrUtil.EMPTY, StrUtil.EMPTY)).getKey()); item.setFirstMeasures(drugIdMapDose.getOrDefault(drugId, Pair.of(StrUtil.EMPTY, StrUtil.EMPTY)).getValue()); } } @@ -103,14 +107,14 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl assertDiseaseTreatmentPlan(diseaseTreatmentPlan); // note: 如果diseaseTreatmentPlan.getDiseaseId()不为空,则表示处置计划为药品,需要进行手动矫正,统一设置为20 - if (CollUtil.isNotEmpty(diseaseTreatmentPlan.getDrugIds())){ + if (CollUtil.isNotEmpty(diseaseTreatmentPlan.getDrugIds())) { diseaseTreatmentPlan.setTreatmentPlanId(mapDrugTreatPlanId(diseaseTreatmentPlan.getDisposalMethod())); } diseaseTreatmentPlanService.save(diseaseTreatmentPlan); // 保存处置计划药品信息 - if (CollUtil.isNotEmpty(diseaseTreatmentPlan.getDrugIds())){ + if (CollUtil.isNotEmpty(diseaseTreatmentPlan.getDrugIds())) { List diseaseTreatmentPlanDrugList = diseaseTreatmentPlan.getDrugIds().stream().map(item -> { DiseaseTreatmentPlanDrug diseaseTreatmentPlanDrug = new DiseaseTreatmentPlanDrug(); diseaseTreatmentPlanDrug.setDiseaseId(diseaseTreatmentPlan.getDiseaseId()); @@ -128,11 +132,12 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl /** * 映射药品的处置计划id + * * @param disposeMethod * @return */ - private String mapDrugTreatPlanId(String disposeMethod){ - if (StrUtil.isEmpty(disposeMethod)){ + private String mapDrugTreatPlanId(String disposeMethod) { + if (StrUtil.isEmpty(disposeMethod)) { return null; } return "0".equals(disposeMethod) ? "20" : "252"; @@ -140,7 +145,7 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl @Override public void batchSaveTreatmentPlan(List diseaseTreatmentPlanList) { - Assert.notEmpty(diseaseTreatmentPlanList,"数据不能为空"); + Assert.notEmpty(diseaseTreatmentPlanList, "数据不能为空"); diseaseTreatmentPlanList.forEach(this::assertDiseaseTreatmentPlan); diseaseTreatmentPlanService.saveBatch(diseaseTreatmentPlanList); @@ -149,22 +154,22 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl @Override @Transactional(rollbackFor = Exception.class) public boolean deleteDiseaseTreatmentPlan(String id) { - Assert.notEmpty(id,"id不能为空"); + Assert.notEmpty(id, "id不能为空"); DiseaseTreatmentPlan diseaseTreatmentPlan = diseaseTreatmentPlanService.getById(id); - if (Objects.isNull(diseaseTreatmentPlan)){ + if (Objects.isNull(diseaseTreatmentPlan)) { return false; } diseaseTreatmentPlanService.removeById(id); - diseaseTreatmentPlanDrugService.lambdaUpdate().eq(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId,id).remove(); + diseaseTreatmentPlanDrugService.lambdaUpdate().eq(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId, id).remove(); return true; } @Override public boolean deleteByDiseaseId(String diseaseId) { - Assert.notEmpty(diseaseId,"疾病id不能为空"); + Assert.notEmpty(diseaseId, "疾病id不能为空"); - return diseaseTreatmentPlanService.lambdaUpdate().eq(DiseaseTreatmentPlan::getDiseaseId,diseaseId).remove(); + return diseaseTreatmentPlanService.lambdaUpdate().eq(DiseaseTreatmentPlan::getDiseaseId, diseaseId).remove(); } @Override @@ -172,7 +177,7 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl // 1. 查询处置计划树 List treatmentPlanTreeNodes = configTreatmentPlanManageService.queryTree(disposalMethod); - if (CollUtil.isEmpty(treatmentPlanTreeNodes)){ + if (CollUtil.isEmpty(treatmentPlanTreeNodes)) { return CollectionUtil.newArrayList(); } @@ -184,7 +189,7 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl List diseaseTreatmentPlanResVos = this.queryListByDiseaseId(diseaseId); // 3. 初始化flag - if (CollUtil.isNotEmpty(diseaseTreatmentPlanResVos)){ + if (CollUtil.isNotEmpty(diseaseTreatmentPlanResVos)) { rootNode.initFlag(diseaseTreatmentPlanResVos.stream().map(DiseaseTreatmentPlanResVo::getTreatmentPlanId).collect(Collectors.toList())); } @@ -192,16 +197,16 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl } @Override - @Transactional(rollbackFor=Exception.class) + @Transactional(rollbackFor = Exception.class) public boolean updateDiseaseTreatmentPlan(DiseaseTreatmentPlanReqVo diseaseTreatmentPlan) { - Assert.notEmpty(diseaseTreatmentPlan.getId(),"id允许为空"); + Assert.notEmpty(diseaseTreatmentPlan.getId(), "id允许为空"); DiseaseTreatmentPlan dtp = diseaseTreatmentPlanService.getById(diseaseTreatmentPlan.getId()); // 删除旧的数据 - if (Objects.nonNull(dtp)){ + if (Objects.nonNull(dtp)) { diseaseTreatmentPlanService.removeById(diseaseTreatmentPlan.getId()); diseaseTreatmentPlanDrugService.lambdaUpdate() - .eq(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId,dtp.getId()).remove(); + .eq(DiseaseTreatmentPlanDrug::getDiseaseTreatmentPlanId, dtp.getId()).remove(); } diseaseTreatmentPlan.setId(null); @@ -211,13 +216,13 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl } - private void assertDiseaseTreatmentPlan(DiseaseTreatmentPlan diseaseTreatmentPlan){ + private void assertDiseaseTreatmentPlan(DiseaseTreatmentPlan diseaseTreatmentPlan) { - Assert.isTrue(StrUtil.isEmpty(diseaseTreatmentPlan.getId()),"id需要为空"); + Assert.isTrue(StrUtil.isEmpty(diseaseTreatmentPlan.getId()), "id需要为空"); - Assert.notEmpty(diseaseTreatmentPlan.getDiseaseId(),"疾病id不能为空"); + Assert.notEmpty(diseaseTreatmentPlan.getDiseaseId(), "疾病id不能为空"); - Assert.notEmpty(diseaseTreatmentPlan.getTreatmentPlanId(),"处置计划id不能为空"); + Assert.notEmpty(diseaseTreatmentPlan.getTreatmentPlanId(), "处置计划id不能为空"); // 根据疾病id和处置计划id进行重复校验 Long count = diseaseTreatmentPlanService.lambdaQuery() @@ -226,4 +231,162 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl Assert.isFalse(count > 0, "该处置计划已存在"); } + + + /** + * 保存处置计划 + * 文档导入 + * + * @param excelReader + * @param diseaseId + */ + @SneakyThrows + @Override + public void batchSaveTreatmentPlanToDoc(ExcelReader excelReader, Disease diseaseId) { + + // 判断表头 + List> listList = excelReader.read(); + for (int i = 0; i < listList.size(); i++) { + List objectList = listList.get(i); + String colNumString = String.valueOf(objectList.get(0)); + if (colNumString.equals("处置计划")) { + // 第一个表头 + List sheetHeadOne = excelReader.read().get(i); + checkSheetHeadOne(sheetHeadOne); + } + if (colNumString.equals("用药计划")) { + // 第二个表头 + List sheetHeadTwo = excelReader.read().get(i); + checkSheetHeadTwo(sheetHeadTwo); + } + if (colNumString.equals("用药计划\n填写说明")) { + } + } + + + // 处置方案 + List handlingPlanDtos = excelReader.read().get(1); + Object object = handlingPlanDtos.get(0); + Assert.isTrue(object.equals("*处置方案\n(请选择)"), "请检查应答策略模板是否正确"); + String disposalMethod = String.valueOf(handlingPlanDtos.get(1)).equals("入院治疗") ? "1" : "0"; + + // 读取数据 + readExcel(excelReader, disposalMethod, diseaseId); + } + + + /** + * 判断模板中的处置计划是否准确 + * + * @param excelReader + * @param disposalMethod 处置方案 + * @param disease 病历id + */ + public void readExcel(ExcelReader excelReader, String disposalMethod, Disease disease) { + + String diseaseId = disease.getId(); + // 处置方案同一种病不可再修改 + List diseaseTreatmentPlanResVos = queryListByDiseaseId(diseaseId); + if (!diseaseTreatmentPlanResVos.isEmpty()) { + String disposalMethod1 = String.valueOf(queryListByDiseaseId(diseaseId).get(0).getDisposalMethod()); + if (StringUtils.isNotEmpty(disposalMethod1)) { + disposalMethod = disposalMethod1; + } + } + + // 索引 + int upHeadIndex = 0; + int downHeadIndex = 0; + int endHeadIndex = 0; + Sheet sheet = excelReader.getSheet(); + int lastRowNum = sheet.getLastRowNum(); + for (int i = 0; i <= lastRowNum; i++) { + Row row = sheet.getRow(i); + for (Cell cell : row) { + cell.setCellType(CellType.STRING); + String stringCellValue = cell.getStringCellValue(); + if (stringCellValue.equals("处置计划")) { + // 第一个表头 + List sheetHeadOne = excelReader.read().get(i); + upHeadIndex = i; + } + if (stringCellValue.equals("用药计划")) { + // 第二个表头 + List sheetHeadTwo = excelReader.read().get(i); + downHeadIndex = i; + } + if (stringCellValue.equals("用药计划\n填写说明")) { + endHeadIndex = i; + } + } + } + + // 查询 该疾病和处置方式 下的处置计划 + List diseaseTreatmentPlanTreeNodes = queryDiseaseTreatmentPlanTree(Integer.parseInt(disposalMethod), diseaseId); + + // 获取列表数据 + List> listListUp = excelReader.read(upHeadIndex + 1, downHeadIndex - 2); + // 模板中未有药物所以药物暂不用 + // List> listListDown = excelReader.read(downHeadIndex + 1, endHeadIndex - 1); + for (int i = 0; i < listListUp.size(); i++) { + // 读取每一行 + List objects = listListUp.get(i); + + // 有一个为空则pass + String firstLevelMeasure = String.valueOf(objects.get(1)); + String secondLevelMeasure = String.valueOf(objects.get(2)); + if (StringUtils.isEmpty(firstLevelMeasure) || StringUtils.isEmpty(secondLevelMeasure)) { + continue; + } + + + if (StringUtils.isNotEmpty(firstLevelMeasure)) { + // 查询一级措施 + List diseaseTreatmentPlanTreeNodeList = diseaseTreatmentPlanTreeNodes + .stream() + .filter(e -> firstLevelMeasure.equals(e.getName())) + .toList(); + Assert.notNull(diseaseTreatmentPlanTreeNodeList, "请检查处置计划一级措施"); + // 二级措施 + if (StringUtils.isNotEmpty(secondLevelMeasure)) { + // 查询二级措施 + List child = diseaseTreatmentPlanTreeNodeList.get(0).getChild(); + List planTreeNodes = child + .stream() + .filter(e -> secondLevelMeasure.equals(e.getName())) + .toList(); + Assert.notNull(planTreeNodes, "请检查处置计划二级措施"); + // 保存 + DiseaseTreatmentPlanReqVo diseaseTreatmentPlanReqVo = new DiseaseTreatmentPlanReqVo(); + if (!diseaseTreatmentPlanTreeNodeList.isEmpty()) { + String disposalPlanId = diseaseTreatmentPlanTreeNodeList.get(0).getId(); + diseaseTreatmentPlanReqVo.setPlanId(disposalPlanId); + } + if (!planTreeNodes.isEmpty()) { + String firstMeasuresId = planTreeNodes.get(0).getId(); + diseaseTreatmentPlanReqVo.setTreatmentPlanId(firstMeasuresId); + diseaseTreatmentPlanReqVo.setFirstMeasuresId(firstMeasuresId); + } + diseaseTreatmentPlanReqVo.setDiseaseId(diseaseId); + diseaseTreatmentPlanReqVo.setDisposalMethod(disposalMethod); + saveTreatmentPlan(diseaseTreatmentPlanReqVo); + } + + } + } + } + + private void checkSheetHeadOne(List sheetHeadOne) { + for (int i = 0; i < HandlingPlanDtoTop.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(sheetHeadOne.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(HandlingPlanDtoTop.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(sheetHeadOne.get(i)), "表头格式有误,请重新导入"); + } + } + + private void checkSheetHeadTwo(List sheetHeadOne) { + for (int i = 0; i < HandlingPlanDtoDown.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) { + Assert.isTrue(sheetHeadOne.size() > i, "表头格式有误,请重新导入"); + Assert.isTrue(HandlingPlanDtoDown.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(sheetHeadOne.get(i)), "表头格式有误,请重新导入"); + } + } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java index 2a36b692..0095427b 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java @@ -302,6 +302,7 @@ public class HumanManageServiceImpl implements HumanManageService { // 绑定病例 MedicalRec medicalRec1 = new MedicalRec(); + medicalRec1.setPatientHeadPic(fileResource.getId()); medicalRec1.setMedicalStatus(EnumMedicalRec.ESTABLISHED_RECORD.getCode()); medicalRec1.setHumanId(human.getId()); medicalRec1.setId(medicalId); 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 73b9bc8b..0cc16461 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 @@ -502,8 +502,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { continue; case "处置计划": assertTitle(excelReader, "处置计划"); - List handlingPlanDtos = excelReader.readAll(HandlingPlanDto.class); - System.out.println(handlingPlanDtos); + diseaseTreatmentPlanManageService.batchSaveTreatmentPlanToDoc(reader, disease); continue; case "评估结果概述": assertTitle(excelReader, "评估结果概述"); @@ -570,6 +569,8 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRec.setUpdateUserId(UserUtil.getUser().getId()); medicalRec.setMedicalStatus(MedicalStatusEnum.CREATE.getCode()); medicalRec.setMedicalImportType(MedicalTypeEnum.TEMPLATE_IMPORT.getCode()); + medicalRec.setMedicalRecordAi("姓名:" + name + "\n性别:" + sex + "\n年龄:" + ageStar + + "\n婚育史:" + maritalStatus + "\n职业:" + occupation + "\n家庭住址:" + address + "\n病史叙述者:本人"); medicalRecService.save(medicalRec); medicalRecService.updateMedicalRecNo("QL", "男".equals(sex) ? "M" : "F", medicalRec.getId()); return medicalRec; @@ -735,4 +736,17 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { } + /** + * 修改病历提示词 + * + * @param medicalRecId + * @param medicalRecAi + */ + @Override + public void uploadMedicalAi(String medicalRecId, String medicalRecAi) { + MedicalRec medicalRec = new MedicalRec(); + medicalRec.setId(medicalRecId); + medicalRec.setMedicalRecordAi(medicalRecAi); + this.medicalRecService.updateById(medicalRec); + } } diff --git a/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx b/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx index 16f6fbe1..ebc897ec 100644 Binary files a/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx and b/virtual-patient-manage/src/main/resources/template/虚拟病例信息模板v3.0.xlsx differ diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoDown.java b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoDown.java new file mode 100644 index 00000000..34b0fcca --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoDown.java @@ -0,0 +1,58 @@ +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/7 15:35 + * @Description: 处置计划 下 + */ +@Data +public class HandlingPlanDtoDown { + + + public static final List CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList + ("用药计划","*药物通用名","*类目(一级措施)", "*规格", "*剂量(用药量)", "单位", "*用药间隔(请选择)", "*剂型(请选择)" + , "*说明", "皮试", "费用分类", "药物费用(元)"); + + @Alias(value = "用药计划") + private String medicationPlan; + + @Alias(value = "药物通用名") + private String genericDrugName; + + @Alias(value = "类目(一级措施)") + private String categoryLevelOne; + + @Alias(value = "规格") + private String specification; + + @Alias(value = "剂量(用药量)") + private String dosage; + + @Alias(value = "单位") + private String unit; + + @Alias(value = "用药间隔(请选择)") + private String dosingInterval; + + @Alias(value = "剂型(请选择)") + private String dosageForm; + + @Alias(value = "说明") + private String description; + + @Alias(value = "皮试") + private String skinTest; + + @Alias(value = "费用分类") + private String costClassification; + + @Alias(value = "药物费用(元)") + private String drugCost; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoTop.java similarity index 57% rename from virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java rename to virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoTop.java index 7aa1af37..2192f3b2 100644 --- a/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDto.java +++ b/virtual-patient-model/src/main/java/com/supervision/dto/HandlingPlanDtoTop.java @@ -9,25 +9,25 @@ import java.util.List; /** * @Author:longbao * @Date:2024/11/5 11:09 - * @Description: 处置计划 + * @Description: 处置计划 上 */ @Data -public class HandlingPlanDto { +public class HandlingPlanDtoTop { public static final List CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList - ("*处置方案(请选择)","* 一级措施(请选择)","* 二级措施(请选择)", "* 说明"); + ("处置计划","* 一级措施(请选择)","* 二级措施(请选择)", "* 说明"); - @Alias(value = "处置方案") + @Alias(value = "处置计划") private String disposalScheme; - @Alias(value = "一级措施") + @Alias(value = "* 一级措施(请选择)") private String firstLevelMeasure; - @Alias(value = "二级措施") + @Alias(value = "* 二级措施(请选择)") private String secondLevelMeasure; - @Alias(value = "说明") + @Alias(value = "* 说明") private String description; } diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java index e5d4db87..1726ba8c 100644 --- a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java @@ -37,4 +37,8 @@ public class MedicalRecPageResVO { @Schema(description = "病历状态(导入)00创建病历 01数字人生成中 02 完成") private String medicalDataStatus; + + @Schema(description = "完整的病例信息") + private String medicalRecordAi; + } diff --git a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml index 2c1ef53a..43c915ac 100644 --- a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml @@ -66,6 +66,7 @@ t1.patient_name as name, t1.patient_age as age, t1.patient_gender as gender, + t1.medical_record_ai as medicalRecordAi, t1.patient_head_pic as patientHeadPic, t1.patient_self_desc as patientSelfDesc, t1.status as medicalStatus,