【流程自动化】

1.病历绑定数字人照片
2.优化导入模板应答策略
3.病历设置模型问答内容
4.优化模板内容
jinan_master_by_release_3.0.0
longbao 7 months ago
parent 2c1384ba2a
commit 5bc60393ca

@ -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;
@ -138,14 +139,24 @@ public class MedicalRecManageController {
@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);
}
}

@ -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<DiseaseTreatmentPlanTreeNode> queryDiseaseTreatmentPlanTree(Integer disposalMethod, String diseaseId);
boolean updateDiseaseTreatmentPlan(DiseaseTreatmentPlanReqVo diseaseTreatmentPlan);
/**
*
*
*
* @param excelReader
* @param diseaseId
*/
void batchSaveTreatmentPlanToDoc(ExcelReader excelReader, Disease diseaseId);
}

@ -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);
}

@ -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,6 +44,9 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl
private final CommonDicService commonDicService;
private final DrugManageService drugManageService;
@Override
public List<DiseaseTreatmentPlanResVo> queryListByDiseaseId(String diseaseId) {
@ -128,6 +132,7 @@ public class DiseaseTreatmentPlanManageServiceImpl implements DiseaseTreatmentPl
/**
* id
*
* @param disposeMethod
* @return
*/
@ -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<List<Object>> listList = excelReader.read();
for (int i = 0; i < listList.size(); i++) {
List<Object> objectList = listList.get(i);
String colNumString = String.valueOf(objectList.get(0));
if (colNumString.equals("处置计划")) {
// 第一个表头
List<Object> sheetHeadOne = excelReader.read().get(i);
checkSheetHeadOne(sheetHeadOne);
}
if (colNumString.equals("用药计划")) {
// 第二个表头
List<Object> sheetHeadTwo = excelReader.read().get(i);
checkSheetHeadTwo(sheetHeadTwo);
}
if (colNumString.equals("用药计划\n填写说明")) {
}
}
// 处置方案
List<Object> 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<DiseaseTreatmentPlanResVo> 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<Object> sheetHeadOne = excelReader.read().get(i);
upHeadIndex = i;
}
if (stringCellValue.equals("用药计划")) {
// 第二个表头
List<Object> sheetHeadTwo = excelReader.read().get(i);
downHeadIndex = i;
}
if (stringCellValue.equals("用药计划\n填写说明")) {
endHeadIndex = i;
}
}
}
// 查询 该疾病和处置方式 下的处置计划
List<DiseaseTreatmentPlanTreeNode> diseaseTreatmentPlanTreeNodes = queryDiseaseTreatmentPlanTree(Integer.parseInt(disposalMethod), diseaseId);
// 获取列表数据
List<List<Object>> listListUp = excelReader.read(upHeadIndex + 1, downHeadIndex - 2);
// 模板中未有药物所以药物暂不用
// List<List<Object>> listListDown = excelReader.read(downHeadIndex + 1, endHeadIndex - 1);
for (int i = 0; i < listListUp.size(); i++) {
// 读取每一行
List<Object> 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<DiseaseTreatmentPlanTreeNode> diseaseTreatmentPlanTreeNodeList = diseaseTreatmentPlanTreeNodes
.stream()
.filter(e -> firstLevelMeasure.equals(e.getName()))
.toList();
Assert.notNull(diseaseTreatmentPlanTreeNodeList, "请检查处置计划一级措施");
// 二级措施
if (StringUtils.isNotEmpty(secondLevelMeasure)) {
// 查询二级措施
List<DiseaseTreatmentPlanTreeNode> child = diseaseTreatmentPlanTreeNodeList.get(0).getChild();
List<DiseaseTreatmentPlanTreeNode> 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<Object> 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<Object> 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)), "表头格式有误,请重新导入");
}
}
}

@ -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);

@ -502,8 +502,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
continue;
case "处置计划":
assertTitle(excelReader, "处置计划");
List<HandlingPlanDto> 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);
}
}

@ -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;
/**
* @Authorlongbao
* @Date2024/11/7 15:35
* @Description:
*/
@Data
public class HandlingPlanDtoDown {
public static final List<String> 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;
}

@ -9,25 +9,25 @@ import java.util.List;
/**
* @Authorlongbao
* @Date2024/11/5 11:09
* @Description:
* @Description:
*/
@Data
public class HandlingPlanDto {
public class HandlingPlanDtoTop {
public static final List<String> 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;
}

@ -37,4 +37,8 @@ public class MedicalRecPageResVO {
@Schema(description = "病历状态导入00创建病历 01数字人生成中 02 完成")
private String medicalDataStatus;
@Schema(description = "完整的病例信息")
private String medicalRecordAi;
}

@ -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,

Loading…
Cancel
Save