【流程自动化】

1.修改文件导入生成复合病历编号
2.修改病历数字人状态字段
3.创建病历时新增默认系统问题和病历问题
4.修改模板中性别问题
5.修改MedicalRecQaVO的包路径
6.修改前台未生成成数字人时提示
jinan_dev_by_release_3.0.0
longbao 6 months ago
parent ca91e2969b
commit e393c89816

@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.manage.pojo.vo.*;
import com.supervision.manage.service.MedicalRecManageService;
import com.supervision.model.Disease;
import com.supervision.vo.manage.DiseaseAncillaryResVo;
import com.supervision.vo.manage.DiseasePhysicalResVo;
import com.supervision.vo.manage.DiseaseTreatmentPlanResVo;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.model.MedicalRec;
import com.supervision.vo.manage.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -147,21 +145,7 @@ public class MedicalRecManageController {
@Operation(summary = "导入病例信息")
@PostMapping("/uploadMedical")
public UploadDiseaseResVo uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception {
return medicalRecManageService.uploadMedical(multipartFile);
public void uploadDisease(@Parameter(name = "file", description = "文件") MultipartFile multipartFile) throws Exception {
medicalRecManageService.uploadMedical(multipartFile);
}
@Operation(summary = "生成数字人")
@PostMapping("/generateDigitalHuman")
public UploadDiseaseResVo uploadDisease() throws Exception {
// 数字人状态才可以生成数字人
// 1.判断病例是否存在
// 2.判断是否已经创建数字人
// 3.创建数字人 :数字人创建返回 sid 绑定sid和病例id
// 4.查询数字人生成状态
return null;
}
}

@ -1,6 +1,7 @@
package com.supervision.manage.pojo.vo;
import com.supervision.vo.manage.MedicalRecQaVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@ -1,6 +1,7 @@
package com.supervision.manage.pojo.vo;
import com.supervision.model.MedicalRec;
import com.supervision.vo.manage.MedicalRecQaVO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

@ -17,8 +17,10 @@ public interface AskTemplateQuestionLibraryManageService extends IService<AskTem
public String queryByName(String nameZh);
/**
*
* = + +
*
* @param code
* @param medicalRecId
*/
void saveSimilarityQuestion(List<ClinicalInterviewDTO> code);
void saveSimilarityQuestion(List<ClinicalInterviewDTO> code, String medicalRecId);
}

@ -3,10 +3,8 @@ package com.supervision.manage.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.manage.pojo.vo.*;
import com.supervision.model.Disease;
import com.supervision.vo.manage.DiseaseAncillaryResVo;
import com.supervision.vo.manage.DiseasePhysicalResVo;
import com.supervision.vo.manage.DiseaseTreatmentPlanResVo;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.model.MedicalRec;
import com.supervision.vo.manage.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
@ -48,9 +46,22 @@ public interface MedicalRecManageService {
Boolean updateMedicalStatus(String medicalRecId, Integer status);
/**
*
* @param response
* @throws Exception
*/
void downloadMedicalTemplate(HttpServletResponse response) throws Exception;
UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception;
/**
*
* @param multipartFile
* @throws Exception
*/
void uploadMedical(MultipartFile multipartFile) throws Exception;
}

@ -4,21 +4,16 @@ 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 com.supervision.vo.manage.MedicalRecQaVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -27,7 +22,6 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@ -49,8 +43,10 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
@Autowired
private CommonDicService commonDicService;
@Autowired
private QaKnowledgeManageService qaKnowledgeService;
@Autowired
private MedicalRecService medicalRecService;
@Override
@ -68,12 +64,16 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
}
/**
* -
*
*
* @param clinicalInterviewDTOS
* @param clinicalInterviewDTOS
* @param medicalRecId id
*/
@Override
public void saveSimilarityQuestion(List<ClinicalInterviewDTO> clinicalInterviewDTOS) {
public void saveSimilarityQuestion(List<ClinicalInterviewDTO> clinicalInterviewDTOS, String medicalRecId) {
List<MedicalRecQaVO> medicalRecQaVOList = new ArrayList<>();
// 1.判定条件集合是否存在
ArrayList<String> consultationList = new ArrayList();
for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) {
@ -85,15 +85,26 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
Long queryCommonDictTreeByCode = commonDicService.queryCommonDictTreeByCode(consultationList);
Assert.isTrue(queryCommonDictTreeByCode != clinicalInterviewDTOS.size(), "请检查临床问诊中的问诊1和2是否存在");
// 2.插入问题
// 2.插入问题(对应应答策略功能)
// 标准问题存在:增加问题为相似问题
// 标准问题不存在:增加问题为标准问题并更新问题库
for (ClinicalInterviewDTO clinicalInterviewDTO : clinicalInterviewDTOS) {
String consultationII = clinicalInterviewDTO.getConsultationII().trim();
String questionIntentRecognition = clinicalInterviewDTO.getQuestionIntentRecognition();
String patientResponseRequired = clinicalInterviewDTO.getPatientResponseRequired();
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
if (StringUtils.isNotEmpty(questionIntentRecognition)) {
String libraryId = queryByName(questionIntentRecognition);
// 病历问题
medicalRecQaVO.setMedicalRecAnswer(patientResponseRequired);
// 标准问题是否存在
if (StringUtils.isNotEmpty(libraryId)) {
medicalRecQaVO.setLibraryQuestionId(libraryId);
List<String> askTemplateQuestionSimilarities = askTemplateQuestionSimilarityService.queryAskTemplateQuestionSimilarityByLibraryId(libraryId);
medicalRecQaVO.setQuestionList(askTemplateQuestionSimilarities);
AskTemplateQuestionSimilarity askTemplateQuestionSimilarity = askTemplateQuestionSimilarityService.querySimilarityQuestionByNameZhAndSimilarityQuestion(consultationII, questionIntentRecognition);
if (null == askTemplateQuestionSimilarity) {
AskTemplateQuestionSimilarity similarity = new AskTemplateQuestionSimilarity();
@ -115,12 +126,16 @@ public class AskTemplateQuestionLibraryManageServiceImpl extends ServiceImpl<Ask
askTemplateQuestionLibrary.setStandardQuestion(questionIntentRecognition);
save(askTemplateQuestionLibrary);
qaKnowledgeService.saveOrUpdateQuestionLibrary(CollUtil.newArrayList(askTemplateQuestionLibrary.getId()));
medicalRecQaVO.setLibraryQuestionId(askTemplateQuestionLibrary.getId());
}
}
medicalRecQaVOList.add(medicalRecQaVO);
}
}
// 3.保存闻讯问题和系统默认问题
medicalRecService.saveAskPatientAnswerListByMedicalRec(medicalRecQaVOList, medicalRecId);
}
}

@ -155,6 +155,7 @@ public class FileManageServiceImpl implements FileManageService {
@Override
public String loadFileBase64(String fileId) throws Exception {
Assert.isTrue(StrUtil.isEmpty(fileId),"请在后台生成数字人后再进行问答");
File file = downloadFile(fileId);
return Base64.encode(new FileInputStream(file));

@ -446,7 +446,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
@Transactional(rollbackFor = Exception.class)
@Override
public UploadDiseaseResVo uploadMedical(MultipartFile multipartFile) throws Exception {
public void uploadMedical(MultipartFile multipartFile) throws Exception {
InputStream inputStream = multipartFile.getInputStream();
TimeInterval timer = DateUtil.timer();
@ -480,7 +480,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
continue;
}
assertSheetDataClinicalInterview(clinicalInterviewDTOS);
askTemplateQuestionLibraryManageService.saveSimilarityQuestion(clinicalInterviewDTOS);
askTemplateQuestionLibraryManageService.saveSimilarityQuestion(clinicalInterviewDTOS, medicalRec.getId());
continue;
case "体格检查":
assertTitle(excelReader, "体格检查");
@ -519,7 +519,6 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
}
}
return null;
}
/**
@ -543,7 +542,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
UploadDiseaseDTO uploadDiseaseDTO = uploadDiseaseResVos.get(0);
// 保存病历
String name = uploadDiseaseDTO.getName();
String sex = uploadDiseaseDTO.getSex();
String sex = uploadDiseaseDTO.getSex().equals("女性") ? "女" : "男";
String ageStar = uploadDiseaseDTO.getAgeStar();
String maritalStatus = uploadDiseaseDTO.getMaritalStatus();
String occupation = uploadDiseaseDTO.getOccupation();

@ -11,13 +11,13 @@ import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.supervision.manage.dto.MedicalRecAnswerExcelDTO;
import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo;
import com.supervision.manage.pojo.vo.MedicalRecQaVO;
import com.supervision.manage.service.AnswerVideoResourceService;
import com.supervision.manage.service.AskQuestionLibraryManageService;
import com.supervision.manage.service.FileManageService;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.model.*;
import com.supervision.service.*;
import com.supervision.vo.manage.MedicalRecQaVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ResourceLoader;
@ -67,7 +67,7 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
TimeInterval timer = DateUtil.timer();
ExcelReader reader = ExcelUtil.getReader(inputStream);
log.info("generationMedicalAnswerVideo : 读取文件耗时:{} s" , timer.intervalSecond());
log.info("generationMedicalAnswerVideo : 读取文件耗时:{} s", timer.intervalSecond());
// 校验模板是否正确
assertTitle(reader);
@ -80,19 +80,19 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
timer.restart();
medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isEmpty(dto.getErrorCodeEnums()))
.forEach(dto -> {
String questionLibraryId = askQuestionLibraryManageService.saveQuestionLibrary(dto.toAskTemplateQuestionLibrary(),false);
String questionLibraryId = askQuestionLibraryManageService.saveQuestionLibrary(dto.toAskTemplateQuestionLibrary(), false);
dto.setLibraryQuestionId(questionLibraryId);
});
log.info("generationMedicalAnswerVideo : 扩充知识库耗时:{} s" , timer.intervalSecond());
log.info("generationMedicalAnswerVideo : 扩充知识库耗时:{} s", timer.intervalSecond());
timer.restart();
qaKnowledgeManageService.refreshQaKnowledge();
log.info("generationMedicalAnswerVideo : 刷新知识库耗时:{} s" , timer.intervalSecond());
log.info("generationMedicalAnswerVideo : 刷新知识库耗时:{} s", timer.intervalSecond());
timer.restart();
// 生成错误信息excel
File file = writeExcel(medicalRecAnswerExcelDTOS);
log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时{} s" , timer.intervalSecond());
log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时{} s", timer.intervalSecond());
FileResource fileResource;
try {
@ -101,12 +101,13 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
FileUtil.del(file);
}
return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS,fileResource.getId());
return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS, fileResource.getId());
}
/**
*
* @param medicalId id
*
* @param medicalId id
* @param medicalRecAnswerExcelDTOS
*/
private void medicalRecAnswerExcelDoAction(String medicalId, List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS) {
@ -123,28 +124,28 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
// 查询类目字段
List<CommonDic> questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction(
questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList,questionMap));
medicalRecAnswerExcelDTOS.forEach(dto -> dto.doAction(
questionLibraryList, askPatientAnswerList, materialLibraryList, questionTypeDicList, questionMap));
}
public void updateAskPatientAnswer(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS,String medicalId){
public void updateAskPatientAnswer(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS, String medicalId) {
if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){
if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)) {
return;
}
for (MedicalRecAnswerExcelDTO dto : medicalRecAnswerExcelDTOS) {
if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())){
if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())) {
// 校验不通过,不进行入库处理
continue;
}
String askPatientAnswerId = dto.getAskPatientAnswerId();
if (StrUtil.isNotEmpty(askPatientAnswerId)){
if (StrUtil.isNotEmpty(askPatientAnswerId)) {
//更新操作
AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer();
askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId,askPatientAnswerId)
.set(AskPatientAnswer::getAnswerResourceId,askPatientAnswer.getAnswerResourceId())
askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId, askPatientAnswerId)
.set(AskPatientAnswer::getAnswerResourceId, askPatientAnswer.getAnswerResourceId())
.update();
}else {
} else {
//新增操作
AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer();
askPatientAnswer.setMedicalId(medicalId);
@ -155,11 +156,12 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
/**
*
*
* @param medicalRecAnswerExcelDTOS
* @param fileId id
* @param fileId id
* @return MedicalAnswerVideoResVo
*/
private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS,String fileId) {
private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS, String fileId) {
MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo();
@ -193,8 +195,8 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
File templateFile = FileUtil.writeFromStream(
resourceLoader.getResource(MEDICAL_ANSWER_TEMPLATE_ERROR_EXCEL_PATH).getInputStream(),
FileUtil.createTempFile("导入详情",".xlsx",true), true);
try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){
FileUtil.createTempFile("导入详情", ".xlsx", true), true);
try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)) {
writer.setHeaderAlias(MedicalRecAnswerExcelDTO.WRITE_HEADER_ALIAS);
writer.setOnlyAlias(true);
writer.write(errorList, true);
@ -206,9 +208,10 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
/**
*
*
* @param reader
*/
private void assertTitle(ExcelReader reader){
private void assertTitle(ExcelReader reader) {
List<Object> titleList = reader.readRow(0);
Assert.isTrue(CollUtil.isNotEmpty(titleList), "表头格式有误,请重新导入");
for (int i = 0; i < MedicalRecAnswerExcelDTO.READ_ANSWER_VIDEO_TITLE.size(); i++) {

@ -3,6 +3,8 @@ package com.supervision.mapper;
import com.supervision.model.AskTemplateQuestionSimilarity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @author Administrator
* @description vp_ask_template_question_similarity()Mapper
@ -19,6 +21,13 @@ public interface AskTemplateQuestionSimilarityMapper extends BaseMapper<AskTempl
* @return
*/
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
/**
*
* @param libraryId id
* @return
*/
List<String> queryAskTemplateQuestionSimilarityByLibraryId(String libraryId);
}

@ -41,4 +41,11 @@ public interface AskTemplateQuestionSimilarityService extends IService<AskTempla
AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion);
/**
*
* @param libraryId id
* @return
*/
List<String> queryAskTemplateQuestionSimilarityByLibraryId(String libraryId);
}

@ -5,6 +5,9 @@ import com.supervision.model.MedicalRec;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.vo.manage.MedicalRecPageReqVO;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.vo.manage.MedicalRecQaVO;
import java.util.List;
/**
* @author flevance
@ -15,6 +18,7 @@ public interface MedicalRecService extends IService<MedicalRec> {
/**
*
*
* @param medicalRecPageReqVO
* @param pageNum
* @param pageSize
@ -24,10 +28,20 @@ public interface MedicalRecService extends IService<MedicalRec> {
/**
* ,+1
* @param code
*
* @param code
* @param gender M F
* @param id ID
*/
void updateMedicalRecNo(String code,String gender,String id);
void updateMedicalRecNo(String code, String gender, String id);
/**
*
*
* @param qaList
* @param medicalRecId id
*/
void saveAskPatientAnswerListByMedicalRec(List<MedicalRecQaVO> qaList, String medicalRecId);
}

@ -62,6 +62,17 @@ public class AskTemplateQuestionSimilarityServiceImpl extends ServiceImpl<AskTem
public AskTemplateQuestionSimilarity querySimilarityQuestionByNameZhAndSimilarityQuestion(String nameZh, String similarityQuestion) {
return this.baseMapper.querySimilarityQuestionByNameZhAndSimilarityQuestion(nameZh, similarityQuestion);
}
/**
*
* @param libraryId id
* @return
*/
@Override
public List<String> queryAskTemplateQuestionSimilarityByLibraryId(String libraryId) {
return this.baseMapper.queryAskTemplateQuestionSimilarityByLibraryId(libraryId);
}
}

@ -9,6 +9,7 @@ import com.supervision.dto.UploadDiseaseDTO;
import com.supervision.model.Disease;
import com.supervision.service.DiseaseService;
import com.supervision.mapper.DiseaseMapper;
import com.supervision.util.RedisSequenceUtil;
import com.supervision.util.StringChartUtil;
import com.supervision.util.UserUtil;
import com.supervision.vo.manage.DiseaseReqVo;
@ -99,16 +100,18 @@ public class DiseaseServiceImpl extends ServiceImpl<DiseaseMapper, Disease>
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) {
disease.setCode(RedisSequenceUtil.getComplexDiseaseNo());
List<String> codeIdList = Arrays.stream(categoryCode.split("/")).toList();
List<String> listByDiseaseCode = queryDiseaseListByDiseaseCode(codeIdList);
Assert.isTrue(listByDiseaseCode.size() != codeIdList.size(), "请检查复合疾病中的单一疾病是否存在");
disease.setContainDiseaseIds(listByDiseaseCode);
}else {
disease.setCode(categoryCode);
}
disease.setSymptom(mainSymptom);
disease.setCreateUserId(UserUtil.getUser().getId());

@ -1,27 +1,56 @@
package com.supervision.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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.exception.BusinessException;
import com.supervision.model.AskPatientAnswer;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.CommonDic;
import com.supervision.model.MedicalRec;
import com.supervision.service.MedicalRecService;
import com.supervision.service.*;
import com.supervision.mapper.MedicalRecMapper;
import com.supervision.vo.manage.MedicalRecPageReqVO;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.vo.manage.MedicalRecQaVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author flevance
* @description vp_medical_rec()Service
* @createDate 2023-11-03 11:25:43
*/
* @author flevance
* @description vp_medical_rec()Service
* @createDate 2023-11-03 11:25:43
*/
@Service
public class MedicalRecServiceImpl extends ServiceImpl<MedicalRecMapper, MedicalRec>
implements MedicalRecService{
implements MedicalRecService {
@Autowired
private CommonDicService commonDicService;
@Autowired
private AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
@Autowired
private AskPatientAnswerService askPatientAnswerService;
@Autowired
private AskTemplateQuestionSimilarityService askTemplateQuestionSimilarityService;
/**
* -
*
* @param medicalRecPageReqVO
* @param pageNum
* @param pageSize
@ -29,19 +58,114 @@ public class MedicalRecServiceImpl extends ServiceImpl<MedicalRecMapper, Medical
*/
@Override
public IPage<MedicalRecPageResVO> queryMedicalRecManagePage(MedicalRecPageReqVO medicalRecPageReqVO, Integer pageNum, Integer pageSize) {
return this.baseMapper.queryMedicalRecManagePage(medicalRecPageReqVO, new Page<>(pageNum,pageSize));
return this.baseMapper.queryMedicalRecManagePage(medicalRecPageReqVO, new Page<>(pageNum, pageSize));
}
/**
* ,+1
* @param code
*
* @param code
* @param gender M F
* @param id ID
* @param id ID
*/
@Override
public void updateMedicalRecNo(String code,String gender,String id) {
public void updateMedicalRecNo(String code, String gender, String id) {
this.baseMapper.updateMedicalRecNo(code, gender, id);
}
/**
*
*
* @param qaList
* @param medicalRecId id
* answerType 01
*/
@Override
public void saveAskPatientAnswerListByMedicalRec(List<MedicalRecQaVO> qaList, String medicalRecId) {
List<MedicalRecQaVO> medicalRecQaVOS = queryMedicalDefaultAnswer(null);
saveAskPatientAnswer(qaList, medicalRecId, 1);
saveAskPatientAnswer(medicalRecQaVOS, medicalRecId, 0);
}
private void saveAskPatientAnswer(List<MedicalRecQaVO> qaList, String medicalRecId, Integer answerType) {
if (CollUtil.isEmpty(qaList)) {
return;
}
for (MedicalRecQaVO medicalRecQaVO : qaList) {
if (StrUtil.isBlank(medicalRecQaVO.getLibraryQuestionId())) {
throw new BusinessException("问题ID不能为空");
}
AskPatientAnswer askPatientAnswer = new AskPatientAnswer();
askPatientAnswer.setLibraryQuestionId(medicalRecQaVO.getLibraryQuestionId());
askPatientAnswer.setAnswer(medicalRecQaVO.getMedicalRecAnswer());
askPatientAnswer.setMedicalId(medicalRecId);
askPatientAnswer.setAnswerType(answerType);
askPatientAnswer.setQuestion(CollUtil.getFirst(medicalRecQaVO.getQuestionList()));
askPatientAnswer.insert();
}
}
public List<MedicalRecQaVO> queryMedicalDefaultAnswer(String medicalRecId) {
CommonDic systemDic = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, "system").one();
Assert.notNull(systemDic, "未找到系统问题");
List<CommonDic> childCommonDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT")
.eq(CommonDic::getParentId, systemDic.getId()).list();
Assert.notNull(childCommonDicList, "未找到系统问题下的子问题");
Map<Long, CommonDic> childCommonDicMap = childCommonDicList.stream().collect(Collectors.toMap(CommonDic::getId, Function.identity()));
final Map<String, List<String>> libraryMapQuestion = new HashMap<>();
// 从疾病问题记录中查询数据
if (StrUtil.isNotEmpty(medicalRecId)) {
List<AskPatientAnswer> askPatientAnswerList = askPatientAnswerService.lambdaQuery()
.eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getAnswerType, 0).list();
final Map<String, AskTemplateQuestionLibrary> libraryMap = new HashMap<>();
if (CollUtil.isNotEmpty(askPatientAnswerList)) {
// 查询问题库信息
List<String> questionIds = askPatientAnswerList.stream()
.map(AskPatientAnswer::getLibraryQuestionId).filter(Objects::nonNull).collect(Collectors.toList());
Map<String, List<String>> libraryMapQuestionTmp = askTemplateQuestionSimilarityService.querySimilarityQuestionMapByLibraryIds(questionIds);
libraryMapQuestion.putAll(libraryMapQuestionTmp);
Map<String, AskTemplateQuestionLibrary> libraryMapTemp = askTemplateQuestionLibraryService.listByIds(questionIds)
.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity()));
libraryMap.putAll(libraryMapTemp);
}
return askPatientAnswerList.stream().map(e -> {
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
medicalRecQaVO.setId(e.getId());
medicalRecQaVO.setLibraryQuestionId(e.getLibraryQuestionId());
medicalRecQaVO.setMedicalRecAnswer(e.getAnswer());
// 组装问题列表 和 字典数据
AskTemplateQuestionLibrary askTemplateQuestionLibrary = libraryMap.get(e.getLibraryQuestionId());
if (Objects.nonNull(askTemplateQuestionLibrary)) {
medicalRecQaVO.setQuestionList(libraryMapQuestion.get(e.getLibraryQuestionId()));
Long dictId = askTemplateQuestionLibrary.getDictId();
if (Objects.nonNull(dictId)) {
medicalRecQaVO.setDictId(dictId);
medicalRecQaVO.setDictNamePath(childCommonDicMap.getOrDefault(dictId, new CommonDic()).getNameZhPath());
}
}
return medicalRecQaVO;
}).collect(Collectors.toList());
}
// 从问题库中查询数据
List<Long> commonDicIdList = childCommonDicList.stream().map(CommonDic::getId).collect(Collectors.toList());
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.lambdaQuery().in(AskTemplateQuestionLibrary::getDictId, commonDicIdList).list();
return askTemplateQuestionLibraryList.stream().map(e -> {
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
medicalRecQaVO.setLibraryQuestionId(e.getId());
medicalRecQaVO.setDictNamePath(childCommonDicMap.getOrDefault(e.getDictId(), new CommonDic()).getNameZhPath());
medicalRecQaVO.setQuestionList(libraryMapQuestion.get(e.getId()));
return medicalRecQaVO;
}).collect(Collectors.toList());
}
}

@ -33,4 +33,8 @@ public class MedicalRecPageResVO {
@Schema(description = "病历状态 1未上线 2上线")
private String medicalStatus;
@Schema(description = "病历状态导入00创建病历 01数字人生成中 02 完成")
private String medicalDataStatus;
}

@ -1,4 +1,4 @@
package com.supervision.manage.pojo.vo;
package com.supervision.vo.manage;
import io.swagger.v3.oas.annotations.media.Schema;

@ -38,4 +38,15 @@
</select>
<select id="queryAskTemplateQuestionSimilarityByLibraryId" resultType="java.lang.String"
parameterType="java.lang.String">
select s.similarity_question as similarityQuestion
from vp_ask_template_question_similarity s
where s.library_id = (select l.id
from vp_ask_template_question_library l
where l.id = #{libraryId})
</select>
</mapper>

@ -69,6 +69,7 @@
t1.patient_head_pic as patientHeadPic,
t1.patient_self_desc as patientSelfDesc,
t1.status as medicalStatus,
t1.medical_status as medicalDataStatus,
if(t1.update_time is null, t1.create_time, t1.update_time) as time
from vp_medical_rec t1
left join vp_disease t3 on t1.disease_id = t3.id

Loading…
Cancel
Save