【流程自动化】

1.新增下载模板接口
2.新增导入模板接口
3.修改全面检查为预期诊断结果并显示
jinan_dev_by_release_3.0.0
longbao 7 months ago
parent ba22e3c6b8
commit 07485873a0

@ -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("/**");

@ -85,11 +85,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.supervision</groupId>
<artifactId>virtual-patient-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.supervision</groupId>-->
<!-- <artifactId>virtual-patient-common</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>

@ -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 {
}
}

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

@ -0,0 +1,41 @@
package com.supervision.manage.enums;
import lombok.Getter;
/**
* @Authorlongbao
* @Date2024/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);
}
}

@ -0,0 +1,37 @@
package com.supervision.manage.enums;
import lombok.Getter;
/**
* @Authorlongbao
* @Date2024/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);
}
}

@ -0,0 +1,27 @@
package com.supervision.manage.enums;
import lombok.Getter;
/**
* @Authorlongbao
* @Date2024/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;
}
}

@ -0,0 +1,24 @@
package com.supervision.manage.enums;
import lombok.Getter;
/**
* @Authorlongbao
* @Date2024/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;
}
}

@ -0,0 +1,37 @@
package com.supervision.manage.enums;
import lombok.Getter;
/**
* @Authorlongbao
* @Date2024/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);
}
}

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

@ -0,0 +1,24 @@
package com.supervision.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.dto.ClinicalInterviewDTO;
import com.supervision.model.AskTemplateQuestionLibrary;
import java.util.List;
/**
* @author flevance
* @description vp_ask_template_question_library()Service
* @createDate 2023-11-03 11:13:26
*/
public interface AskTemplateQuestionLibraryManageService extends IService<AskTemplateQuestionLibrary> {
public String queryByName(String nameZh);
/**
*
* @param code
*/
void saveSimilarityQuestion(List<ClinicalInterviewDTO> code);
}

@ -1,5 +1,7 @@
package com.supervision.manage.service;
import com.supervision.dto.SupplementaryTestDto;
import com.supervision.model.Disease;
import com.supervision.model.DiseaseAncillary;
import com.supervision.vo.ask.AncillaryItemReqVo;
import com.supervision.vo.ask.ConfigAncillaryItemResVO;
@ -27,4 +29,10 @@ public interface DiseaseAncillaryManageService {
List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo);
/**
*
* @param disease
* @param supplementaryTestDtos
*/
void batchSaveAncillaryExaminationList(Disease disease, List<SupplementaryTestDto> supplementaryTestDtos);
}

@ -1,10 +1,11 @@
package com.supervision.manage.service;
import com.supervision.dto.UploadPhysicalExaminationDTO;
import com.supervision.model.Disease;
import com.supervision.model.DiseasePhysical;
import com.supervision.vo.manage.DiseasePhysicalLocationNodeVo;
import com.supervision.vo.manage.DiseasePhysicalResVo;
import com.supervision.vo.manage.DiseasePhysicalStrResVo;
import com.supervision.vo.manage.PhysicalLocationNode;
import java.util.List;
@ -28,4 +29,11 @@ public interface DiseasePhysicalManageService {
boolean deleteByDiseaseId(String diseaseId);
List<DiseasePhysicalLocationNodeVo> queryTree(String diseaseId, String toolId);
/**
*
* @param diseaseList
* @param uploadPhysicalExaminationDTOS
*/
void batchSavePhysicalExaminationList(Disease diseaseList, List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS);
}

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

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

@ -0,0 +1,128 @@
package com.supervision.manage.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.dto.ClinicalInterviewDTO;
import com.supervision.dto.QaKnowledgeDTO;
import com.supervision.manage.service.AskTemplateQuestionLibraryManageService;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.mapper.AskTemplateQuestionLibraryMapper;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.supervision.model.ConfigAncillaryItem;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.service.*;
import com.supervision.util.RedisSequenceUtil;
import com.supervision.vo.manage.AskQuestionLibraryReqVo;
import com.supervision.vo.manage.AskQuestionLibraryResVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author flevance
* @description vp_ask_template_question_library()Service
* @createDate 2023-11-03 11:13:26
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<AskTemplateQuestionLibraryMapper, AskTemplateQuestionLibrary>
implements AskTemplateQuestionLibraryManageService {
private final ConfigPhysicalToolService configPhysicalToolService;
private final ConfigAncillaryItemService configAncillaryItemService;
private final AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
@Autowired
private CommonDicService commonDicService;
private QaKnowledgeManageService qaKnowledgeService;
@Override
public String queryByName(String nameZh) {
return this.baseMapper.queryByName(nameZh);
}
public String getMaxCode() {
AskTemplateQuestionLibrary askTemplateQuestionLibrary = super.getBaseMapper()
.selectOne(new QueryWrapper<AskTemplateQuestionLibrary>().select("max(code) as code"));
if (Objects.isNull(askTemplateQuestionLibrary)) {
return null;
}
return askTemplateQuestionLibrary.getCode();
}
/**
* -
*
* @param clinicalInterviewDTOS
*/
@Override
public void saveSimilarityQuestion(List<ClinicalInterviewDTO> clinicalInterviewDTOS) {
// 1.判定条件集合是否存在
ArrayList<String> consultationList = new ArrayList();
for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) {
String consultationI = clinicalInterviewDTO.getConsultationI().trim();
String consultationII = clinicalInterviewDTO.getConsultationII().trim();
String consultation = "'" + consultationI + "/" + consultationII + "'";
consultationList.add(consultation);
}
Long queryCommonDictTreeByCode = commonDicService.queryCommonDictTreeByCode(consultationList);
Assert.isTrue(queryCommonDictTreeByCode != clinicalInterviewDTOS.size(), "请检查临床问诊中的问诊1和2是否存在");
// 2.插入问题
// 标准问题存在:增加问题为相似问题
// 标准问题不存在:增加问题为标准问题并更新问题库
for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) {
String consultationII = clinicalInterviewDTO.getConsultationII().trim();
String questionIntentRecognition = clinicalInterviewDTO.getQuestionIntentRecognition();
if (StringUtils.isNotEmpty(questionIntentRecognition)) {
String libraryId = queryByName(questionIntentRecognition);
if (StringUtils.isNotEmpty(libraryId)) {
AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestionByNameZhAndSimilarityQuestion(consultationII, questionIntentRecognition);
if (null == askTemplateQuestionSimilarity) {
AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
similarity.setSimilarityQuestion(questionIntentRecognition);
similarity.setLibraryId(libraryId);
askTemplateQuestionSimilarityService.save(similarity);
}
} else {
// 获取nexCode 获取的是redis中的问题库
String nextCode = RedisSequenceUtil.getQuestionLibraryCode(() -> {
String maxCode = getMaxCode();
if (StrUtil.isNotEmpty(maxCode)) {
return Long.parseLong(StrUtil.removePrefix(maxCode, "Q"));
}
return null;
});
AskTemplateQuestionLibrary askTemplateQuestionLibrary = new AskTemplateQuestionLibrary();
askTemplateQuestionLibrary.setCode(nextCode);
askTemplateQuestionLibrary.setStandardQuestion(questionIntentRecognition);
save(askTemplateQuestionLibrary);
qaKnowledgeService.saveOrUpdateQuestionLibrary(CollUtil.newArrayList(askTemplateQuestionLibrary.getId()));
}
}
}
}
}

@ -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 {
@ -144,4 +151,58 @@ public class DiseaseAncillaryManageServiceImpl implements DiseaseAncillaryManage
}
return list.get(0);
}
/**
*
*
* @param disease
* @param supplementaryTestDtos
*/
@Override
public void batchSaveAncillaryExaminationList(Disease disease, List<SupplementaryTestDto> supplementaryTestDtos) {
List<DiseaseAncillary> diseaseAncillaries = new ArrayList<>();
for (SupplementaryTestDto supplementaryTestDto : supplementaryTestDtos) {
String firstLevelCategory = supplementaryTestDto.getFirstLevelCategory();
String secondLevelCategory = supplementaryTestDto.getSecondLevelCategory();
int preliminaryDiagnosisBasis = supplementaryTestDto.getPreliminaryDiagnosisBasis().equals("否") ? 0 : 1;
int confirmedDiagnosisBasis = supplementaryTestDto.getConfirmedDiagnosisBasis().equals("否") ? 0 : 1;
int differentialDiagnosisBasis = supplementaryTestDto.getDifferentialDiagnosisBasis().equals("否") ? 0 : 1;
int status = supplementaryTestDto.getStatus().equals("正常") ? 0 : 1;
int isRequiredCheck = supplementaryTestDto.getIsRequiredCheck().equals("否") ? 0 : 1;
String normalTestResult = supplementaryTestDto.getNormalTestResult();
String patientTestResult = supplementaryTestDto.getPatientTestResult();
ConfigAncillaryItem configAncillaryItem = configAncillaryItemService.queryAncillaryItem(firstLevelCategory, secondLevelCategory);
Assert.isTrue((null != configAncillaryItem), "辅助检查工具未找到:{}", secondLevelCategory);
DiseaseAncillary diseaseAncillary = new DiseaseAncillary();
diseaseAncillary.setDiseaseId(disease.getId());
// 工具id
diseaseAncillary.setItemId(configAncillaryItem.getId());
// 初步诊断依据
diseaseAncillary.setPrimarilyDiagnosisCriteriaFlag(preliminaryDiagnosisBasis);
// 证实诊断依据
diseaseAncillary.setBasisConfirmFlag(confirmedDiagnosisBasis);
//鉴别依据
diseaseAncillary.setBasisIdentificationFlag(differentialDiagnosisBasis);
diseaseAncillary.setExpectedDiagnosisResult(status);
diseaseAncillary.setRequireCheckFlag(isRequiredCheck);
diseaseAncillary.setNormalResult(normalTestResult);
diseaseAncillary.setResult(patientTestResult);
diseaseAncillary.setCreateUserId(UserUtil.getUser().getCreateUserId());
diseaseAncillary.setUpdateUserId(UserUtil.getUser().getCreateUserId());
diseaseAncillaries.add(diseaseAncillary);
}
diseaseAncillaryService.saveBatch(diseaseAncillaries);
}
}

@ -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 {
@ -135,7 +134,6 @@ public class DiseaseManageServiceImpl implements DiseaseManageService {
}
private List<Disease> queryByAnyCondition(String code, String diseaseName, String diseaseNameAlias) {
return diseaseService.lambdaQuery().eq(StrUtil.isNotEmpty(code), Disease::getCode, code).or()
@ -144,6 +142,7 @@ public class DiseaseManageServiceImpl implements DiseaseManageService {
.list();
}
private List<Disease> queryByCode(String code) {
if (Objects.isNull(code)) {
throw new BusinessException("code is not allow empty");
@ -169,6 +168,7 @@ public class DiseaseManageServiceImpl implements DiseaseManageService {
/**
* 使
*
* @param diseaseId id
*/
private void assertDiseaseIsUsed(String diseaseId) {

@ -4,26 +4,29 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.supervision.dto.UploadPhysicalExaminationDTO;
import com.supervision.manage.enums.DiseasePhysicalEnum;
import com.supervision.manage.service.DiseasePhysicalManageService;
import com.supervision.manage.service.PhysicalLocationManageService;
import com.supervision.model.ConfigPhysicalLocation;
import com.supervision.model.DefaultPhysicalIndicator;
import com.supervision.model.DiseasePhysical;
import com.supervision.model.*;
import com.supervision.service.ConfigPhysicalLocationService;
import com.supervision.service.ConfigPhysicalToolService;
import com.supervision.service.DefaultPhysicalIndicatorService;
import com.supervision.service.DiseasePhysicalService;
import com.supervision.util.UserUtil;
import com.supervision.vo.manage.DiseasePhysicalLocationNodeVo;
import com.supervision.vo.manage.DiseasePhysicalResVo;
import com.supervision.vo.manage.DiseasePhysicalStrResVo;
import com.supervision.vo.manage.PhysicalLocationNode;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import static cn.hutool.core.lang.Assert.*;
@Service
@RequiredArgsConstructor
public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageService {
@ -34,13 +37,15 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
private final ConfigPhysicalLocationService configPhysicalLocationService;
private final ConfigPhysicalToolService configPhysicalToolService;
private final DefaultPhysicalIndicatorService defaultPhysicalIndicatorService;
@Override
public List<DiseasePhysicalResVo> queryListByDiseaseId(String diseaseId) {
Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空");
isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空");
List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId);
diseasePhysicalResVos.forEach(DiseasePhysicalResVo::populateOther);
@ -50,7 +55,7 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
@Override
public List<DiseasePhysicalStrResVo> queryListToStringByDiseaseId(String diseaseId) {
Assert.isTrue(StrUtil.isNotEmpty(diseaseId),"id不能为空");
isTrue(StrUtil.isNotEmpty(diseaseId), "id不能为空");
List<DiseasePhysicalStrResVo> diseasePhysicalResVos = diseasePhysicalService.queryListStrByDiseaseId(diseaseId);
diseasePhysicalResVos.forEach(DiseasePhysicalStrResVo::populateOther);
@ -69,14 +74,14 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
@Override
public boolean deletePhysical(String id) {
Assert.isTrue(StrUtil.isNotEmpty(id),"id不能为空");
isTrue(StrUtil.isNotEmpty(id), "id不能为空");
return diseasePhysicalService.removeById(id);
}
@Override
public boolean updatePhysical(DiseasePhysical diseasePhysical) {
Assert.isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()),"疾病id不能为空");
isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()), "疾病id不能为空");
return diseasePhysicalService.updateById(diseasePhysical);
}
@ -84,7 +89,7 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
@Override
public boolean deleteByDiseaseId(String diseaseId) {
Assert.notEmpty(diseaseId,"疾病id不能为空");
notEmpty(diseaseId, "疾病id不能为空");
return diseasePhysicalService.lambdaUpdate().eq(DiseasePhysical::getDiseaseId, diseaseId).remove();
}
@ -153,20 +158,69 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
private void assertDiseasePhysical(DiseasePhysical diseasePhysical) {
Assert.isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()),"疾病id不能为空");
isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()), "疾病id不能为空");
Assert.notNull(diseasePhysical.getPrimarilyDiagnosisCriteriaFlag(),"初步诊断依据不能为空");
notNull(diseasePhysical.getPrimarilyDiagnosisCriteriaFlag(), "初步诊断依据不能为空");
Assert.notNull(diseasePhysical.getBasisConfirmFlag(),"证实诊断依据不能为空");
notNull(diseasePhysical.getBasisConfirmFlag(), "证实诊断依据不能为空");
Assert.notNull(diseasePhysical.getBasisIdentificationFlag(),"鉴别诊断依据不能为空");
notNull(diseasePhysical.getBasisIdentificationFlag(), "鉴别诊断依据不能为空");
Assert.notNull(diseasePhysical.getFullCheckFlag(),"全面诊断不能为空");
notNull(diseasePhysical.getFullCheckFlag(), "全面诊断不能为空");
Assert.notNull(diseasePhysical.getRequireCheckFlag(),"是否必查不能为空");
notNull(diseasePhysical.getRequireCheckFlag(), "是否必查不能为空");
Assert.notNull(diseasePhysical.getExpectedDiagnosisResult(),"预期诊断结果不能为空");
notNull(diseasePhysical.getExpectedDiagnosisResult(), "预期诊断结果不能为空");
}
@Override
public void batchSavePhysicalExaminationList(Disease diseaseId, List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS) {
List<DiseasePhysical> diseasePhysicals = new ArrayList<>();
for (UploadPhysicalExaminationDTO uploadDiseaseDTO : uploadPhysicalExaminationDTOS) {
String iLevelClassification = uploadDiseaseDTO.getILevelClassification();
String iiLevelClassification = uploadDiseaseDTO.getIiLevelClassification();
String humanBodyPartIi = uploadDiseaseDTO.getHumanBodyPartIi();
String normalExamResult = uploadDiseaseDTO.getNormalExamResult();
String patientExamResult = uploadDiseaseDTO.getPatientExamResult();
Integer status = uploadDiseaseDTO.getStatus().equals("正常") ? 0 : 1;
Integer preliminaryDiagnosisBasis = uploadDiseaseDTO.getPreliminaryDiagnosisBasis().equals("否") ? 0 : 1;
Integer confirmedDiagnosisBasis = uploadDiseaseDTO.getConfirmedDiagnosisBasis().equals("否") ? 0 : 1;
Integer differentialDiagnosisBasis = uploadDiseaseDTO.getDifferentialDiagnosisBasis().equals("否") ? 0 : 1;
Integer isNecessaryExamDefaultYes = uploadDiseaseDTO.getIsNecessaryExamDefaultYes().equals("否") ? 0 : 1;
// 查询工具和位置
ConfigPhysicalTool configPhysicalTool = configPhysicalToolService.queryPhysicalToolByTypeAndToolName(iLevelClassification, iiLevelClassification);
ConfigPhysicalLocation configPhysicalLocation = configPhysicalLocationService.queryLocationTreeForLocationName(humanBodyPartIi, "1");
Assert.isTrue((null != configPhysicalTool), "体格检查工具未找到:{}", iiLevelClassification);
Assert.isTrue((null != configPhysicalLocation), "体格检查位置未找到:{}", humanBodyPartIi);
DiseasePhysical diseasePhysical = new DiseasePhysicalResVo();
diseasePhysical.setDiseaseId(diseaseId.getId());
// 工具id
diseasePhysical.setToolId(configPhysicalTool.getId());
// 检查部位ID
diseasePhysical.setLocationId(configPhysicalLocation.getId());
// 正常結果
diseasePhysical.setNormalResult(normalExamResult);
// 一場結果
diseasePhysical.setResult(patientExamResult);
// 预期结果
diseasePhysical.setExpectedDiagnosisResult(status);
// 初步
diseasePhysical.setPrimarilyDiagnosisCriteriaFlag(preliminaryDiagnosisBasis);
// 证实
diseasePhysical.setBasisConfirmFlag(confirmedDiagnosisBasis);
// 鉴别
diseasePhysical.setBasisIdentificationFlag(differentialDiagnosisBasis);
// 是否必查
diseasePhysical.setRequireCheckFlag(isNecessaryExamDefaultYes);
diseasePhysical.setCreateUserId(UserUtil.getUser().getCreateUserId());
diseasePhysical.setUpdateUserId(UserUtil.getUser().getCreateUserId());
diseasePhysicals.add(diseasePhysical);
}
diseasePhysicalService.saveBatch(diseasePhysicals);
}
}

@ -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
@ -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不能为空");

@ -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;
@ -142,6 +158,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
askPatientAnswer.insert();
}
}
@Override
public List<DiseaseAncillaryResVo> queryDiseaseAncillaryByCreat(String diseaseId) {
// 辅助检查
@ -414,4 +431,309 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
return medicalRecService.lambdaUpdate().eq(MedicalRec::getId, medicalRecId).set(MedicalRec::getStatus, status).update();
}
@Override
public void downloadMedicalTemplate(HttpServletResponse response) throws Exception {
Resource resource = resourceLoader.getResource(CASE_TEMPLATE_TEMPLATE_EXCEL_PATH);
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=" +
URLEncoder.encode("虚拟病例信息模板v3.0.xlsx", "UTF-8"));
IoUtil.copy(resource.getInputStream(), outputStream);
}
@Transactional(rollbackFor = Exception.class)
@Override
public UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception {
InputStream inputStream = multipartFile.getInputStream();
TimeInterval timer = DateUtil.timer();
ExcelReader reader = ExcelUtil.getReader(inputStream);
log.info("uploadQuestionLibrary : 读取文件耗时:{} s", timer.intervalSecond());
// 校验sheet
assertTemplate(reader);
// 疾病
Disease disease = null;
// 病人
MedicalRec medicalRec = null;
// 遍历sheet
List<Sheet> sheets = reader.getSheets();
for (int i = 0; i < 6; i++) {
String sheetName = sheets.get(i).getSheetName();
ExcelReader excelReader = reader.setSheet(i);
String virtualSheetNameEnum = VirtualSheetNameEnum.fromCode(sheetName);
Assert.isTrue(StringUtils.isNoneBlank(virtualSheetNameEnum), "未查询到sheet" + sheetName);
switch (sheetName) {
case "基本信息":
assertTitle(excelReader, "基本信息");
List<UploadDiseaseDTO> uploadDiseaseResVos = excelReader.readAll(UploadDiseaseDTO.class);
assertSheetDataBasicInfo(uploadDiseaseResVos);
disease = diseaseService.saveDisease(uploadDiseaseResVos);
medicalRec = batchSaveMedicalRec(uploadDiseaseResVos, disease);
continue;
case "临床问诊":
assertTitle(excelReader, "临床问诊");
List<ClinicalInterviewDTO> clinicalInterviewDTOS = excelReader.readAll(ClinicalInterviewDTO.class);
if (null == clinicalInterviewDTOS || clinicalInterviewDTOS.isEmpty()) {
continue;
}
assertSheetDataClinicalInterview(clinicalInterviewDTOS);
askTemplateQuestionLibraryManageService.saveSimilarityQuestion(clinicalInterviewDTOS);
continue;
case "体格检查":
assertTitle(excelReader, "体格检查");
List<UploadPhysicalExaminationDTO> uploadPhysicalExaminationDTOS = excelReader.readAll(UploadPhysicalExaminationDTO.class);
if (null == uploadPhysicalExaminationDTOS || uploadPhysicalExaminationDTOS.isEmpty()) {
continue;
}
assertSheetDataPhysicalExamination(uploadPhysicalExaminationDTOS);
diseasePhysicalManageService.batchSavePhysicalExaminationList(disease, uploadPhysicalExaminationDTOS);
continue;
case "辅助检查":
assertTitle(excelReader, "辅助检查");
List<SupplementaryTestDto> supplementaryTestDtos = excelReader.readAll(SupplementaryTestDto.class);
if (null == supplementaryTestDtos || supplementaryTestDtos.isEmpty()) {
continue;
}
assertSheetDataSupplementaryTest(supplementaryTestDtos);
diseaseAncillaryManageService.batchSaveAncillaryExaminationList(disease, supplementaryTestDtos);
continue;
case "处置计划":
assertTitle(excelReader, "处置计划");
List<HandlingPlanDto> handlingPlanDtos = excelReader.readAll(HandlingPlanDto.class);
System.out.println(handlingPlanDtos);
continue;
case "评估结果概述":
assertTitle(excelReader, "评估结果概述");
List<OverviewEvaluationResultsDto> overviewEvaluationResultsDtos = excelReader.readAll(OverviewEvaluationResultsDto.class);
if (null == overviewEvaluationResultsDtos || overviewEvaluationResultsDtos.isEmpty()) {
continue;
}
updateMedicalRec(medicalRec.getId(), overviewEvaluationResultsDtos);
continue;
default:
Assert.isTrue(true, "未查询到sheet" + sheetName);
break;
}
}
return null;
}
/**
* sheet
*/
private void assertTemplate(ExcelReader excelReader) {
List<Sheet> sheets = excelReader.getSheets();
for (int i = 0; i < 6; i++) {
Sheet sheet = sheets.get(i);
String virtualSheetNameEnum = VirtualSheetNameEnum.fromCode(sheet.getSheetName());
Assert.isTrue(virtualSheetNameEnum != null, "请检查sheet名称" + sheet.getSheetName());
}
// 保证第一个sheet必须为病例信息
String sheetName = sheets.get(0).getSheetName();
Assert.isTrue(sheetName.equals("基本信息"), "模板错误,请更换模板,sheet {} " + "必须为第一个" + sheetName);
}
@Transactional
public MedicalRec batchSaveMedicalRec(List<UploadDiseaseDTO> uploadDiseaseResVos, Disease disease) {
UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0);
// 保存病历
String name = uploadDiseaseDTO.getName();
String sex = uploadDiseaseDTO.getSex();
String ageStar = uploadDiseaseDTO.getAgeStar();
String maritalStatus = uploadDiseaseDTO.getMaritalStatus();
String occupation = uploadDiseaseDTO.getOccupation();
String nation = uploadDiseaseDTO.getNation();
String birthPlaceOrOrigin = uploadDiseaseDTO.getBirthPlaceOrOrigin();
String address = uploadDiseaseDTO.getAddress();
String birthPlace = uploadDiseaseDTO.getBirthPlace();
String mainSymptom = uploadDiseaseDTO.getMainSymptom();
MedicalRec medicalRec = new MedicalRec();
medicalRec.setDigitalHumanType(1);
medicalRec.setPatientName(name);
medicalRec.setPatientGender(sex);
medicalRec.setPatientAge(Integer.parseInt(ageStar));
medicalRec.setPatientMarriage(maritalStatus);
medicalRec.setPatientProfession(occupation);
medicalRec.setNativePlace(birthPlaceOrOrigin);
medicalRec.setPatientNation(nation);
medicalRec.setPatientBirthplace(birthPlace);
medicalRec.setPatientHabitation(address);
medicalRec.setDiseaseId(disease.getId());
medicalRec.setPatientSelfDesc(mainSymptom);
medicalRec.setStatus(1);
medicalRec.setCreateUserId(UserUtil.getUser().getId());
medicalRec.setUpdateUserId(UserUtil.getUser().getId());
medicalRec.setMedicalStatus(MedicalStatusEnum.CREATE.getCode());
medicalRec.setMedicalImportType(MedicalTypeEnum.TEMPLATE_IMPORT.getCode());
medicalRecService.save(medicalRec);
medicalRecService.updateMedicalRecNo("QL", "男".equals(sex) ? "M" : "F", medicalRec.getId());
return medicalRec;
}
/**
*
*
* @param id id
* @param overviewEvaluationResultsDtos
*/
private void updateMedicalRec(String id, List<OverviewEvaluationResultsDto> overviewEvaluationResultsDtos) {
MedicalRec medicalRec = new MedicalRec();
medicalRec.setId(id);
for (OverviewEvaluationResultsDto overviewEvaluationResultsDto : overviewEvaluationResultsDtos) {
String assessmentItem = overviewEvaluationResultsDto.getAssessmentItem();
switch (assessmentItem) {
case "*预期诊断结果":
String assessmentOverview = overviewEvaluationResultsDto.getAssessmentOverview();
medicalRec.setFullCheck(assessmentOverview);
continue;
case "*初步诊断依据":
String assessmentOverview1 = overviewEvaluationResultsDto.getAssessmentOverview();
medicalRec.setPrimarilyDiagnosisCriteria(assessmentOverview1);
continue;
case "*证实诊断依据":
String assessmentOverview2 = overviewEvaluationResultsDto.getAssessmentOverview();
medicalRec.setConfirmDiagnosisCriteria(assessmentOverview2);
continue;
case "*鉴别依据":
String assessmentOverview3 = overviewEvaluationResultsDto.getAssessmentOverview();
medicalRec.setDifferentialDiagnosisCriteria(assessmentOverview3);
continue;
default:
Assert.isTrue(true, "请检查评估结果概述sheet第一列是否正确");
}
}
medicalRecService.updateById(medicalRec);
}
/**
*
* todo sheetcase
*
* @param reader
* @param sheetName
*/
private void assertTitle(ExcelReader reader, String sheetName) {
List<Object> titleList = reader.readRow(0);
Assert.isTrue(CollUtil.isNotEmpty(titleList), "表头格式有误,请重新导入");
switch (sheetName) {
case "基本信息":
for (int i = 0; i < UploadDiseaseDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) {
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
Assert.isTrue(UploadDiseaseDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
}
break;
case "临床问诊":
for (int i = 0; i < ClinicalInterviewDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) {
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
Assert.isTrue(ClinicalInterviewDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
}
break;
case "体格检查":
for (int i = 0; i < UploadPhysicalExaminationDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) {
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
Assert.isTrue(UploadPhysicalExaminationDTO.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
}
break;
case "辅助检查":
for (int i = 0; i < SupplementaryTestDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) {
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
Assert.isTrue(SupplementaryTestDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
}
break;
case "评估结果概述":
for (int i = 0; i < OverviewEvaluationResultsDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.size(); i++) {
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
Assert.isTrue(OverviewEvaluationResultsDto.CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
}
break;
}
}
/**
*
*
* @param uploadDiseaseResVos
*/
private void assertSheetDataBasicInfo(List<UploadDiseaseDTO> uploadDiseaseResVos) {
Assert.notEmpty(uploadDiseaseResVos, "病例基本信息数据数据为空");
Assert.isTrue(uploadDiseaseResVos.size() != 1, "目前仅限传一个病例");
uploadDiseaseResVos.forEach(this::assertDiseaseQuestion);
}
/**
*
*
* @param uploadDiseaseResVos
*/
private void assertSheetDataClinicalInterview(List<ClinicalInterviewDTO> uploadDiseaseResVos) {
uploadDiseaseResVos.forEach(this::assertClinicalInterview);
}
private void assertSheetDataPhysicalExamination(List<UploadPhysicalExaminationDTO> uploadDiseaseResVos) {
uploadDiseaseResVos.forEach(this::assertPhysicalExamination);
}
private void assertSheetDataSupplementaryTest(List<SupplementaryTestDto> uploadDiseaseResVos) {
uploadDiseaseResVos.forEach(this::supplementaryTestDto);
}
private void assertDiseaseQuestion(UploadDiseaseDTO diseaseQuestion) {
Assert.notEmpty(diseaseQuestion.getSex(), "性别不能为空");
Assert.notEmpty(diseaseQuestion.getAgeStar(), "年龄不能为空");
Assert.isTrue(StrUtil.isNotEmpty(diseaseQuestion.getDiseaseClassificationName()), "疾病分类名称不能为空");
Assert.notEmpty(diseaseQuestion.getCommonName(), "通用名不能为空");
Assert.notEmpty(diseaseQuestion.getCategoryCode(), "疾病代码不能为空");
Assert.notEmpty(diseaseQuestion.getMainSymptom(), "主诉不能为空");
}
private void assertClinicalInterview(ClinicalInterviewDTO clinicalInterviewDTO) {
Assert.notEmpty(clinicalInterviewDTO.getConsultationI(), "问诊I不能为空");
Assert.notEmpty(clinicalInterviewDTO.getConsultationII(), "问诊Ⅱ不能为空");
}
private void assertPhysicalExamination(UploadPhysicalExaminationDTO uploadPhysicalExaminationDTO) {
// Assert.isTrue(StrUtil.isEmpty(uploadPhysicalExaminationDTO.getIiLevelClassification()), "Ⅰ级分类不能为空");
// Assert.notEmpty(uploadPhysicalExaminationDTO.getIiLevelClassification(), "Ⅱ级分类不能为空");
// Assert.notEmpty(uploadPhysicalExaminationDTO.getHumanBodyPartI(), "人体部位Ⅰ不能为空");
// Assert.notEmpty(uploadPhysicalExaminationDTO.getHumanBodyPartIi(), "人体部位Ii不能为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getNormalExamResult(), "正常检查结果不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getStatus(), "状态不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getIsNecessaryExamDefaultYes(), "*是否必查(默认是)不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getPreliminaryDiagnosisBasis(), "初步诊断依据不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getConfirmedDiagnosisBasis(), "证实诊断依据不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getDifferentialDiagnosisBasis(), "鉴别依据不可为空");
}
private void supplementaryTestDto(SupplementaryTestDto uploadPhysicalExaminationDTO) {
// Assert.isTrue(StrUtil.isEmpty(uploadPhysicalExaminationDTO.getFirstLevelCategory()), "Ⅰ级分类不能为空");
// Assert.notEmpty(uploadPhysicalExaminationDTO.getSecondLevelCategory(), "Ⅱ级分类不能为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getNormalTestResult(), "正常检查结果不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getPatientTestResult(), "病人检查结果不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getIsRequiredCheck(), "*是否必查(默认是)不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getPreliminaryDiagnosisBasis(), "初步诊断依据不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getConfirmedDiagnosisBasis(), "证实诊断依据不可为空");
Assert.notEmpty(uploadPhysicalExaminationDTO.getDifferentialDiagnosisBasis(), "鉴别依据不可为空");
}
}

@ -1,6 +1,7 @@
package com.supervision.manage;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.supervision.exception.BusinessException;
import com.supervision.manage.service.FileManageService;
import com.supervision.manage.service.MaterialLibraryManageService;
@ -16,13 +17,40 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import java.util.*;
@Slf4j
@SpringBootTest
public class MedicalAiAnswerSetter {
@Test
public void sd(){
String s = "现病史 发病时间\n" +
"现病史 现病史2 发病时间\n";
String[] split = s.split("\n");
for (String string : split) {
String[] split1 = string.split(" ");
Assert.isTrue(split1.length ==2, "数据格式错误");
Map<String, String> map = new HashMap<>();
map.put("item1", split1[0]);
map.put("item2", split1[1]);
}
}
public static int countChar(String str, char targetChar) {
return (int) Arrays.stream(str.split(""))
.filter(s -> s.charAt(0) == targetChar)
.count();
}
@Autowired
private MaterialLibraryManageService materialLibraryManageService;

@ -0,0 +1,33 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/10/29 10:00
* @Description: excel
*/
@Data
public class ClinicalInterviewDTO {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("问诊Ⅰ", "问诊Ⅱ", "*问题(可不选择具体问题,根据问诊类目系统识别问诊意图)","患者回复(必填-模拟专业度较高问诊场景需要 获取有效的问诊回复)");
@Alias(value = "问诊Ⅰ")
private String ConsultationI;
@Alias(value = "问诊Ⅱ")
private String ConsultationII;
@Alias(value = "问题")
private String QuestionIntentRecognition;
@Alias(value = "患者回复")
private String PatientResponseRequired;
}

@ -0,0 +1,33 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/11/5 11:09
* @Description:
*/
@Data
public class HandlingPlanDto {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("*处置方案(请选择)","* 一级措施(请选择)","* 二级措施(请选择)", "* 说明");
@Alias(value = "处置方案")
private String disposalScheme;
@Alias(value = "一级措施")
private String firstLevelMeasure;
@Alias(value = "二级措施")
private String secondLevelMeasure;
@Alias(value = "说明")
private String description;
}

@ -0,0 +1,30 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/11/5 11:09
* @Description:
*/
@Data
public class OverviewEvaluationResultsDto {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("NO.","评估项目","评估概述(需医生提供,以下为示例 可删除)", "填写说明");
@Alias(value = "评估项目")
private String assessmentItem;
@Alias(value = "评估概述(需医生提供,以下为示例 可删除)")
private String assessmentOverview;
@Alias(value = "填写说明")
private String fillingInstructions;
}

@ -0,0 +1,54 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/11/4 21:34
* @Description:
*/
@Data
public class SupplementaryTestDto {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("1级分类","Ⅱ级分类","*正常检测结果", "*病人检查结果", "状态", "*初步诊断依据", "*证实诊断依据", "*鉴别依据", "*是否必查\n默认是",
"补充项1", "补充项2");
@Alias(value = "1级分类")
private String firstLevelCategory;
@Alias(value = "Ⅱ级分类")
private String secondLevelCategory;
@Alias(value = "*正常检测结果")
private String normalTestResult;
@Alias(value = "*病人检查结果")
private String patientTestResult;
@Alias(value = "状态")
private String status;
@Alias(value = "*初步诊断依据")
private String preliminaryDiagnosisBasis;
@Alias(value = "*证实诊断依据")
private String confirmedDiagnosisBasis;
@Alias(value = "*鉴别依据")
private String differentialDiagnosisBasis;
@Alias(value = "*是否必查\n默认是")
private String isRequiredCheck;
@Alias(value = "补充项1")
private String supplementaryItem1;
@Alias(value = "补充项2")
private String supplementaryItem2;
}

@ -0,0 +1,63 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/10/29 10:00
* @Description: excel
*/
@Data
public class UploadDiseaseDTO {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("姓名","*性别","*年龄", "婚姻状态", "职业", "民族", "出生地/籍贯", "住址", "出生地","*疾病代码", "*疾病分类名称", "*通用名", "最终诊断", "*(主诉)主要症状");
@Alias(value = "姓名")
private String name;
@Alias(value = "*性别")
private String sex;
@Alias(value = "*年龄")
private String ageStar;
@Alias(value = "婚姻状态")
private String maritalStatus;
@Alias(value = "职业")
private String occupation;
@Alias(value = "民族")
private String nation;
@Alias(value = "出生地/籍贯")
private String birthPlaceOrOrigin;
@Alias(value = "住址")
private String address;
@Alias(value = "出生地")
private String birthPlace;
@Alias(value = "*疾病代码")
private String categoryCode;
@Alias(value = "*疾病分类名称")
private String diseaseClassificationName;
@Alias(value = "*通用名")
private String commonName;
// @Alias(value = "最终诊断")
// private String finalDiagnosis;
@Alias(value = "*(主诉)主要症状")
private String mainSymptom;
}

@ -0,0 +1,60 @@
package com.supervision.dto;
import cn.hutool.core.annotation.Alias;
import cn.hutool.core.collection.CollUtil;
import lombok.Data;
import java.util.List;
/**
* @Authorlongbao
* @Date2024/10/29 11:00
* @Description: excel
*/
@Data
public class UploadPhysicalExaminationDTO {
public static final List<String> CASE_TEMPLATE_SHEET_SINGLE_DISEASE_TITLE = CollUtil.newArrayList
("Ⅰ级分类", "Ⅱ级分类", "人体部位Ⅰ", "人体部位Ⅱ", "*正常检查结果",
"病人检查结果", "*状态", "*初步诊断依据", "*证实诊断依据", "*鉴别依据", "*是否必查\n默认是", "补充项1", "补充项2");
@Alias(value = "Ⅰ级分类")
private String iLevelClassification;
@Alias(value = "Ⅱ级分类")
private String iiLevelClassification;
@Alias(value = "人体部位Ⅰ")
private String humanBodyPartI;
@Alias(value = "人体部位Ⅱ")
private String humanBodyPartIi;
@Alias(value = "*正常检查结果")
private String normalExamResult;
@Alias(value = "病人检查结果")
private String patientExamResult;
@Alias(value = "*状态")
private String status;
@Alias(value = "*初步诊断依据")
private String preliminaryDiagnosisBasis;
@Alias(value = "*证实诊断依据")
private String confirmedDiagnosisBasis;
@Alias(value = "*鉴别依据")
private String differentialDiagnosisBasis;
@Alias(value = "*是否必查\n默认是")
private String isNecessaryExamDefaultYes;
private String supplementItem1;
private String supplementItem2;
}

@ -0,0 +1,32 @@
package com.supervision.enums;
/**
* @Authorlongbao
* @Date2024/10/31 16:59
* @Description:
*/
public enum EnumMedicalRec {
DIGITAL_HUMAN_CREATED("已创建病例", "00"),
ESTABLISHED_RECORD("数字人生成中", "01"),
MEDICAL_RECORD_ESTABLISHED("已生成数字人", "02"),
COMPLETE("完成", "03"),
;
private String description;
private String code;
EnumMedicalRec(String description, String code) {
this.description = description;
this.code = code;
}
public String getDescription() {
return description;
}
public String getCode() {
return code;
}
}

@ -23,6 +23,10 @@ public interface AskTemplateQuestionLibraryMapper extends BaseMapper<AskTemplate
Page<AskQuestionLibraryResVo> queryPageList(IPage<AskQuestionLibraryResVo> page,
@Param("askQuestionLibrary") AskQuestionLibraryReqVo askQuestionLibrary);
String queryByName(@Param("askQuestionLibrary") String nameZh);
}

@ -11,6 +11,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface AskTemplateQuestionSimilarityMapper extends BaseMapper<AskTemplateQuestionSimilarity> {
/**
*
* @param nameZh
* @param similarityQuestion
* @return
*/
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
}

@ -27,13 +27,6 @@ public class Disease implements Serializable {
private String id;
@Schema(description = "疾病名称")
private String diseaseName;
@Schema(description = "疾病分类别名")
private String diseaseNameAlias;
/**
*
*/
@ -41,10 +34,11 @@ public class Disease implements Serializable {
private String code;
@Schema(description = "包含的疾病id")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> containDiseaseIds;
@Schema(description = "疾病名称")
private String diseaseName;
@Schema(description = "疾病分类别名")
private String diseaseNameAlias;
/**
* 0 1
*/
@ -54,6 +48,11 @@ public class Disease implements Serializable {
@Schema(description = "疾病类型 0单一疾病 1 复合疾病")
private Integer diseaseType;
@Schema(description = "包含的疾病id")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> containDiseaseIds;
@Schema(description = "症状")
private String symptom;

@ -125,7 +125,8 @@ public class MedicalRec extends Model<MedicalRec> implements Serializable {
@Schema(description = "鉴别诊断依据")
private String differentialDiagnosisCriteria;
@Schema(description = "全面检查")
// 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果
@Schema(description = "预期诊断结果")
private String fullCheck;
@Schema(description = "提交给大模型的病历")
@ -158,6 +159,19 @@ public class MedicalRec extends Model<MedicalRec> implements Serializable {
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
*
*/
@Schema(description = "病例生成状态")
private String medicalStatus;
/**
*
*/
@Schema(description = "病例创建类型")
private String medicalImportType;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@ -1,5 +1,6 @@
package com.supervision.service;
import com.supervision.dto.ClinicalInterviewDTO;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.baomidou.mybatisplus.extension.service.IService;
@ -30,4 +31,14 @@ public interface AskTemplateQuestionSimilarityService extends IService<AskTempla
*/
Map<String, List<String>> querySimilarityQuestionMapByLibraryLists(List<AskTemplateQuestionLibrary> libraryList);
/**
*
* @param nameZh
* @param similarityQuestion
* @return
*/
AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
}

@ -4,6 +4,7 @@ import com.supervision.dto.CommonDictTreeDTO;
import com.supervision.model.CommonDic;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.ArrayList;
import java.util.List;
/**
@ -19,4 +20,12 @@ public interface CommonDicService extends IService<CommonDic> {
*/
List<CommonDictTreeDTO> queryCommonDictTree(String groupCode);
/**
*
* @param code
* @return
*/
public Long queryCommonDictTreeByCode(ArrayList<String> code);
}

@ -19,4 +19,13 @@ public interface ConfigAncillaryItemService extends IService<ConfigAncillaryItem
List<ConfigAncillaryItemVo> queryVoList(AncillaryItemReqVo ancillaryItemReqVo);
List<ConfigAncillaryItemResVO> queryAncillaryItemList(AncillaryItemReqVo ancillaryItemReqVo);
/**
*
* @param name1
* @param name2
* @return
*/
ConfigAncillaryItem queryAncillaryItem( String name1,String name2);
}

@ -10,4 +10,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ConfigPhysicalLocationService extends IService<ConfigPhysicalLocation> {
/**
* locationName
* @param locationName
* @param level
* @return
*/
ConfigPhysicalLocation queryLocationTreeForLocationName(String locationName, String level);
}

@ -15,4 +15,12 @@ public interface ConfigPhysicalToolService extends IService<ConfigPhysicalTool>
List<ConfigPhysicalToolResVO> queryPhysicalToolList();
/**
*
* @param type
* @param toolName
* @return
*/
ConfigPhysicalTool queryPhysicalToolByTypeAndToolName(String type, String toolName);
}

@ -1,6 +1,7 @@
package com.supervision.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.dto.UploadDiseaseDTO;
import com.supervision.model.Disease;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.vo.manage.DiseaseReqVo;
@ -33,4 +34,21 @@ public interface DiseaseService extends IService<Disease> {
List<String> queryAllDiseaseListByDiseaseId(List<String> diseaseId);
/**
*
*
* @param codeId
* @return
*/
List<String> queryDiseaseListByDiseaseCode(List<String> codeId);
/**
*
* @param uploadDiseaseResVos
* @return
*/
Disease saveDisease(List<UploadDiseaseDTO> uploadDiseaseResVos);
}

@ -50,6 +50,18 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTem
}
return querySimilarityQuestionMapByLibraryIds(libraryIdList);
}
/**
*
*
* @param nameZh
* @param similarityQuestion
* @return
*/
@Override
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion) {
return this.baseMapper.querySimilarityQuestionByNameZhAndSimilarityQuestion(nameZh, similarityQuestion);
}
}

@ -58,6 +58,22 @@ public class CommonDicServiceImpl extends ServiceImpl<CommonDicMapper, CommonDic
}
}
/**
*
* @param code
* @return
*/
public Long queryCommonDictTreeByCode(ArrayList<String> code) {
return this.lambdaQuery()
.eq(CommonDic::getGroupCode, "AQT")
.ne(CommonDic::getParentId, "179")
.in(CommonDic::getCode, code)
.isNotNull(CommonDic::getParentId)
.count();
}
}

@ -91,6 +91,15 @@ public class ConfigAncillaryItemServiceImpl extends ServiceImpl<ConfigAncillaryI
return super.lambdaQuery().like(StrUtil.isNotEmpty(keyWord), ConfigAncillaryItem::getItemName, keyWord)
.or().like(StrUtil.isNotEmpty(keyWord), ConfigAncillaryItem::getType, keyWord).list();
}
@Override
public ConfigAncillaryItem queryAncillaryItem(String name1, String name2) {
return this.lambdaQuery()
.eq(ConfigAncillaryItem::getType, name1)
.eq(ConfigAncillaryItem::getItemName, name2)
.one();
}
}

@ -15,6 +15,14 @@ import org.springframework.stereotype.Service;
public class ConfigPhysicalLocationServiceImpl extends ServiceImpl<ConfigPhysicalLocationMapper, ConfigPhysicalLocation>
implements ConfigPhysicalLocationService {
@Override
public ConfigPhysicalLocation queryLocationTreeForLocationName(String locationName, String level) {
return this.lambdaQuery()
.eq(ConfigPhysicalLocation::getLocationName, locationName)
.ne(ConfigPhysicalLocation::getLevel, level)
.one();
}
}

@ -40,6 +40,16 @@ public class ConfigPhysicalToolServiceImpl extends ServiceImpl<ConfigPhysicalToo
return tool;
}).sorted(Comparator.comparingInt(ConfigPhysicalToolResVO::getPriority)).collect(Collectors.toList());
}
@Override
public ConfigPhysicalTool queryPhysicalToolByTypeAndToolName(String type, String toolName) {
ConfigPhysicalTool configPhysicalTool = this.lambdaQuery()
.eq(ConfigPhysicalTool::getType, type)
.eq(ConfigPhysicalTool::getToolName, toolName)
.one();
return configPhysicalTool;
}
}

@ -5,13 +5,17 @@ import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.dto.UploadDiseaseDTO;
import com.supervision.model.Disease;
import com.supervision.service.DiseaseService;
import com.supervision.mapper.DiseaseMapper;
import com.supervision.util.StringChartUtil;
import com.supervision.util.UserUtil;
import com.supervision.vo.manage.DiseaseReqVo;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@ -50,6 +54,7 @@ public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease>
/**
*
*
* @param disease
* @return true false
*/
@ -68,6 +73,49 @@ public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease>
return Integer.valueOf(1).equals(integer);
}
@Override
public List<String> queryDiseaseListByDiseaseCode(List<String> codeId) {
List<String> diseaseIdList = new ArrayList<>();
List<Disease> diseaseList = this.lambdaQuery()
.select(Disease::getId)
.in(Disease::getCode, codeId)
.list();
for (Disease disease : diseaseList) {
String diseaseId = disease.getId();
diseaseIdList.add(diseaseId);
}
return diseaseIdList;
}
@Override
public Disease saveDisease(List<UploadDiseaseDTO> uploadDiseaseResVos) {
UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0);
// 保存疾病
String categoryCode = uploadDiseaseDTO.getCategoryCode();
String diseaseClassificationName = uploadDiseaseDTO.getDiseaseClassificationName();
String commonName = uploadDiseaseDTO.getCommonName();
String mainSymptom = uploadDiseaseDTO.getMainSymptom();
int diseaseType = StringChartUtil.countChar(categoryCode, '/') > 0 ? 1 : 0;
Disease disease = new Disease();
disease.setCode(categoryCode);
disease.setDiseaseName(diseaseClassificationName);
disease.setDiseaseNameAlias(commonName);
disease.setStatus(0);
disease.setDiseaseType(diseaseType);
if (diseaseType == 1) {
List<String> codeIdList = Arrays.stream(categoryCode.split("/")).toList();
List<String> listByDiseaseCode = queryDiseaseListByDiseaseCode(codeIdList);
Assert.isTrue(listByDiseaseCode.size() != codeIdList.size(), "请检查复合疾病中的单一疾病是否存在");
disease.setContainDiseaseIds(listByDiseaseCode);
}
disease.setSymptom(mainSymptom);
disease.setCreateUserId(UserUtil.getUser().getId());
disease.setUpdateUserId(UserUtil.getUser().getId());
save(disease);
return disease;
}
}

@ -0,0 +1,24 @@
package com.supervision.util;
import java.util.Arrays;
/**
* @Authorlongbao
* @Date2024/11/1 13:52
* @Description:
*/
public class StringChartUtil {
/**
*
* @param str
* @param targetChar
* @return
*/
public static int countChar(String str, char targetChar) {
return (int) Arrays.stream(str.split(""))
.filter(s -> s.charAt(0) == targetChar)
.count();
}
}

@ -73,4 +73,17 @@
<select id="queryPageList" resultMap="askQuestionLibraryResultMap" resultType="com.supervision.vo.manage.AskQuestionLibraryResVo">
<include refid="queryListsql"></include>
</select>
<select id="queryByName" resultType="java.lang.String"
parameterType="java.lang.String">
select l.id
from vp_ask_template_question_library l
where l.dict_id = (select id
from vp_common_dic d
where d.parent_id IS NOT NULL
and d.group_code = 'AQT'
and d.parent_id != '179'
and d.name_zh = (#{nameZh}))
</select>
</mapper>

@ -15,8 +15,27 @@
</resultMap>
<sql id="Base_Column_List">
id,library_id,similarity_question,
id
,library_id,similarity_question,
create_user_id,create_time,update_user_id,
update_time
</sql>
<select id="querySimilarityQuestionByNameZhAndSimilarityQuestion" resultMap="BaseResultMap"
resultType="java.lang.String">
select *
from vp_ask_template_question_similarity s
where s.library_id = (select l.id
from vp_ask_template_question_library l
where l.dict_id = (select id
from vp_common_dic d
where d.parent_id IS NOT NULL
and d.group_code = 'AQT'
and d.parent_id != '179'
and d.name_zh = (#{nameZh})))
and similarity_question = #{similarityQuestion};
</select>
</mapper>

@ -90,10 +90,10 @@
da.item_id as itemId,
cai.item_name as itemName,
cai.type as itemType,
da.primarily_diagnosis_criteria_flag as primarilyDiagnosisCriteriaFlag,
da.basis_confirm_flag as basisConfirmFlag,
da.basis_identification_flag as basisIdentificationFlag,
da.full_check_flag as fullCheckFlag,
case ifnull(da.primarily_diagnosis_criteria_flag,0) when 0 then null when 1 then '初步诊断依据' end as primarilyDiagnosisCriteriaFlag,
case ifnull(da.basis_confirm_flag,0) when 0 then null when 1 then '证实诊断依据' end as basisConfirmFlag,
case ifnull(da.basis_identification_flag,0) when 0 then null when 1 then '鉴别依据' end as basisIdentificationFlag,
case ifnull(da.full_check_flag,0) when 0 then null when 1 then '全面依据' end as fullCheckFlag,
da.diagnosis_assessment_flag as diagnosisAssessmentFlag,
da.expected_diagnosis_result as expectedDiagnosisResult,
da.require_check_flag as requireCheckFlag,

@ -70,10 +70,10 @@
cpl.location_name as locationName,
cpt.tool_name as toolName,
cpt.type as toolType,
dp.primarily_diagnosis_criteria_flag as primarilyDiagnosisCriteriaFlag,
dp.basis_confirm_flag as basisConfirmFlag,
dp.basis_identification_flag as basisIdentificationFlag,
dp.full_check_flag as fullCheckFlag,
case ifnull(dp.primarily_diagnosis_criteria_flag,0) when 0 then null when 1 then '初步诊断依据' end as primarilyDiagnosisCriteriaFlag,
case ifnull(dp.basis_confirm_flag,0) when 0 then null when 1 then '证实诊断依据' end as basisConfirmFlag,
case ifnull(dp.basis_identification_flag,0) when 0 then null when 1 then '鉴别依据' end as basisIdentificationFlag,
case ifnull(dp.full_check_flag,0) when 0 then null when 1 then '全面依据' end as fullCheckFlag,
dp.diagnosis_assessment_flag as diagnosisAssessmentFlag,
dp.location_diagnosis_flag as locationDiagnosisFlag,
dp.expected_diagnosis_result as expectedDiagnosisResult,

@ -21,8 +21,11 @@ public class DiagnosisResultResVO {
@Schema(description = "鉴别诊断依据")
private BasisIdentificationResultResVO basisIdentificationResult;
@Schema(description = "全面检查-(暂无相关数据)")
private FullCheckResVO fullCheck;
// @Schema(description = "全面检查-(暂无相关数据)")
// private FullCheckResVO fullCheck;
// 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果
@Schema(description = "预期诊断结果")
private String fullCheck;
@Schema(description = "处置方案")
private DealPlanResVO dealPlan;

@ -62,6 +62,12 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
private final DiseaseAncillaryService diseaseAncillaryService;
public static <K> Predicate<K> distinctPredicateNotNull(Function<K, Object> function) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
// 根据key进行去重,并排除为null的数据
return t -> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true);
}
@Override
public DiagnosisResultResVO queryDiagnosisResult(String processId) {
@ -79,7 +85,8 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
// 4.生成鉴别诊断依据
diagnosisResultResVO.setBasisIdentificationResult(createBasisIdentificationResult(medicalRec, processId));
// 5.全面检查-(暂无相关数据) 后面再看
diagnosisResultResVO.setFullCheck(null);
// 2024.11.05:与周霞沟通后修改全面检查字段为 *预期诊断结果
diagnosisResultResVO.setFullCheck(medicalRec.getFullCheck());
// 6.处置方案
diagnosisResultResVO.setDealPlan(createDealPlan(process.getDiseaseId(), processId));
return diagnosisResultResVO;
@ -194,7 +201,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
return basisPrimaryResultResVO;
}
private List<BasisDiagnosisNodeResVO> qaRecordMergeListsBasisPrimary(List<DiagnosisQaRecord> qaRecordList, List<AskPatientAnswer> list) {
BiFunction<DiagnosisQaRecord, AskPatientAnswer, Boolean> biFunction = (qaRecord, qa) -> qa.getLibraryQuestionId().equals(qaRecord.getQuestionLibraryId());
@ -209,7 +215,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
return mergeListsBasedOnCondition(qaRecordList, list, biFunction, t1, t2);
}
private List<BasisDiagnosisNodeResVO> physicalRecordMergeLists(List<PhysicalRecordByResultDTO> physicalRecordList,
List<DiseasePhysicalResVo> diseasePhysicalResVos,
Function<PhysicalRecordByResultDTO, Integer> functionCorrect) {
@ -290,7 +295,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
AncillaryRecordByResultDTO::getPrimarilyDiagnosisCriteriaFlag);
}
private List<BasisDiagnosisNodeResVO> ancillaryRecordMergeListsConfirm(List<AncillaryRecordByResultDTO> ancillaryRecordList,
List<DiseaseAncillaryResVo> diseaseAncillaryResVos) {
@ -391,14 +395,6 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
return expertDiagnosisResultResVO;
}
public static <K> Predicate<K> distinctPredicateNotNull(Function<K, Object> function) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
// 根据key进行去重,并排除为null的数据
return t -> null != function.apply(t) && null == map.putIfAbsent(function.apply(t), true);
}
/**
*
* <p>

Loading…
Cancel
Save