Merge remote-tracking branch 'origin/dev_2.1.0' into dev_2.1.0

dev_2.1.0
xueqingkun
commit 3f8f4ac2a9

@ -3,12 +3,9 @@ package com.supervision.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.supervision.dao.*; import com.supervision.dao.*;
import com.supervision.domain.*; import com.supervision.domain.*;
import com.supervision.enums.TagEnum; import com.supervision.enums.TagEnum;
@ -175,7 +172,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
processMedicalDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("体格检查"), physicalVertex); processMedicalDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("体格检查"), physicalVertex);
// 获取查询结果,增加到结果节点中 // 获取查询结果,增加到结果节点中
PhysicalResultVertex physicalResultVertex = new PhysicalResultVertex(); PhysicalResultVertex physicalResultVertex = new PhysicalResultVertex();
physicalResultVertex.setNodeValue(physicalRecord.getResult()); physicalResultVertex.setNodeValue(StrUtil.blankToDefault(physicalRecord.getResult(), "无相关资讯"));
physicalResultDao.insert(physicalResultVertex); physicalResultDao.insert(physicalResultVertex);
physicalResultDao.insertEdge(physicalVertex, new SinglePropertyEdge("结果"), physicalResultVertex); physicalResultDao.insertEdge(physicalVertex, new SinglePropertyEdge("结果"), physicalResultVertex);
// 如果是证实诊断依据,添加到证实诊断依据里面去 // 如果是证实诊断依据,添加到证实诊断依据里面去
@ -198,7 +195,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
medicalRecDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("辅助检查"), ancillaryVertex); medicalRecDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("辅助检查"), ancillaryVertex);
// 结果节点 // 结果节点
AncillaryResultVertex ancillaryResultVertex = new AncillaryResultVertex(); AncillaryResultVertex ancillaryResultVertex = new AncillaryResultVertex();
ancillaryResultVertex.setNodeValue(diagnosisAncillaryRecord.getResult()); ancillaryResultVertex.setNodeValue(StrUtil.blankToDefault(diagnosisAncillaryRecord.getResult(), "无相关资讯"));
ancillaryResultDao.insert(ancillaryResultVertex); ancillaryResultDao.insert(ancillaryResultVertex);
// 保存检查结果连线 // 保存检查结果连线
ancillaryDao.insertEdge(ancillaryVertex, new SinglePropertyEdge("结果"), ancillaryResultVertex); ancillaryDao.insertEdge(ancillaryVertex, new SinglePropertyEdge("结果"), ancillaryResultVertex);
@ -362,30 +359,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
for (TreeNodeVO nodeVO : firstNodeList) { for (TreeNodeVO nodeVO : firstNodeList) {
recursionBuildTree(nodeVO, treeNodeMap, graphVO.getEdges()); recursionBuildTree(nodeVO, treeNodeMap, graphVO.getEdges());
} }
// 为所有节点分配新的唯一ID(前端需要ID字段为唯一ID) return firstNodeList;
Snowflake snowflake = IdUtil.getSnowflake(1);
// 先转JSON,再转回去.为了避免出现对象复用的情况,导致ID不能分配为唯一ID
String jsonStr = JSONUtil.toJsonStr(firstNodeList);
List<TreeNodeVO> newTreeNodeList = JSONUtil.toList(jsonStr, TreeNodeVO.class);
recursionGenerateSingleId(newTreeNodeList, snowflake);
return newTreeNodeList;
}
/**
* ID,IDGraphId
*/
private void recursionGenerateSingleId(List<TreeNodeVO> firstNodeList, Snowflake snowflake) {
for (TreeNodeVO treeNodeVO : firstNodeList) {
if (StrUtil.isBlank(treeNodeVO.getGraphId())) {
treeNodeVO.setGraphId(treeNodeVO.getId());
}
String nextId = snowflake.nextIdStr() + "-id";
treeNodeVO.setId(nextId);
if (CollUtil.isNotEmpty(treeNodeVO.getChildren())) {
recursionGenerateSingleId(treeNodeVO.getChildren(), snowflake);
}
}
} }
private void recursionBuildTree(TreeNodeVO preNode, Map<String, TreeNodeVO> treeNodeMap, List<EdgeVO> edgeList) { private void recursionBuildTree(TreeNodeVO preNode, Map<String, TreeNodeVO> treeNodeMap, List<EdgeVO> edgeList) {

@ -12,10 +12,8 @@ import java.util.Map;
@ApiModel @ApiModel
public class TreeNodeVO { public class TreeNodeVO {
@ApiModelProperty("重新分配的唯一ID")
private String id;
@ApiModelProperty("图谱ID") @ApiModelProperty("图谱ID")
private String graphId; private String id;
@ApiModelProperty("节点值") @ApiModelProperty("节点值")
private String nodeValue; private String nodeValue;

@ -96,7 +96,7 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
continue; continue;
} }
// 把呼出的问题全部加进去 // 把呼出的问题全部加进去
String toolIntent = "tool_" + tool.getCode(); String toolIntent = "tool_" + tool.getId();
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO(); QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(toolIntent); qaKnowledgeDTO.setQuestionCode(toolIntent);
qaKnowledgeDTO.setQuestionList(tool.getCallOutQuestion()); qaKnowledgeDTO.setQuestionList(tool.getCallOutQuestion());
@ -114,7 +114,7 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
continue; continue;
} }
// 把辅助问诊的问题全部加进去 // 把辅助问诊的问题全部加进去
String ancillaryIntent = "ancillary_" + ancillary.getCode(); String ancillaryIntent = "ancillary_" + ancillary.getId();
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO(); QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(ancillaryIntent); qaKnowledgeDTO.setQuestionCode(ancillaryIntent);
qaKnowledgeDTO.setQuestionList(ancillary.getCallOutQuestion()); qaKnowledgeDTO.setQuestionList(ancillary.getCallOutQuestion());

@ -452,6 +452,7 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
// 查询用户填写的治疗计划(包含处置计划和用药计划) // 查询用户填写的治疗计划(包含处置计划和用药计划)
List<TreatmentPlanRecord> userTreatmentPlanRecordList = treatmentPlanRecordService.lambdaQuery().eq(TreatmentPlanRecord::getProcessId, process.getId()).list(); List<TreatmentPlanRecord> userTreatmentPlanRecordList = treatmentPlanRecordService.lambdaQuery().eq(TreatmentPlanRecord::getProcessId, process.getId()).list();
int userTreatmentPlanCount = userTreatmentPlanRecordList.size(); int userTreatmentPlanCount = userTreatmentPlanRecordList.size();
// 2. 查询出疾病处置计划(疾病配置的处置计划) // 2. 查询出疾病处置计划(疾病配置的处置计划)
List<DiseaseTreatmentPlanResVo> diseaseTreatmentPlanResVos = diseaseTreatmentPlanService.queryListByDiseaseId(process.getDiseaseId()); List<DiseaseTreatmentPlanResVo> diseaseTreatmentPlanResVos = diseaseTreatmentPlanService.queryListByDiseaseId(process.getDiseaseId());
Set<String> treatmentPlanIdSet = diseaseTreatmentPlanResVos.stream().map(DiseaseTreatmentPlanResVo::getTreatmentPlanId).collect(Collectors.toSet()); Set<String> treatmentPlanIdSet = diseaseTreatmentPlanResVos.stream().map(DiseaseTreatmentPlanResVo::getTreatmentPlanId).collect(Collectors.toSet());
@ -459,9 +460,12 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
// 3. 查出疾病处置计划用药(疾病配置的用药计划) // 3. 查出疾病处置计划用药(疾病配置的用药计划)
List<DiseaseTreatmentPlanDrug> diseaseTreatmentPlanDrugList = diseaseTreatmentPlanDrugService.lambdaQuery().eq(DiseaseTreatmentPlanDrug::getDiseaseId, process.getDiseaseId()).list(); List<DiseaseTreatmentPlanDrug> diseaseTreatmentPlanDrugList = diseaseTreatmentPlanDrugService.lambdaQuery().eq(DiseaseTreatmentPlanDrug::getDiseaseId, process.getDiseaseId()).list();
Set<String> drugIdSet = diseaseTreatmentPlanDrugList.stream().map(DiseaseTreatmentPlanDrug::getDrugId).collect(Collectors.toSet()); Set<String> drugIdSet = diseaseTreatmentPlanDrugList.stream().map(DiseaseTreatmentPlanDrug::getDrugId).collect(Collectors.toSet());
// 疾病配置的治疗计划总数
// 计算总数时,只看疾病配置的处置计划(用药计划来自于处置计划)
int medicalCount = diseaseTreatmentPlanResVos.size();
// 疾病配置的治疗计划ID集合,用来计算命中的数量
Collection<String> planIdSet = CollUtil.union(treatmentPlanIdSet, drugIdSet); Collection<String> planIdSet = CollUtil.union(treatmentPlanIdSet, drugIdSet);
int medicalCount = planIdSet.size();
int hitPlanCount = 0; int hitPlanCount = 0;
for (TreatmentPlanRecord treatmentPlanRecord : userTreatmentPlanRecordList) { for (TreatmentPlanRecord treatmentPlanRecord : userTreatmentPlanRecordList) {
// 需要分别看是否是药物计划 // 需要分别看是否是药物计划

@ -173,11 +173,12 @@ public class AskServiceImpl implements AskService {
// 保存记录 // 保存记录
saveQaRecord(talkReqVO.getProcessId(), "patient", askPatientAnswer.getId(), talkReqVO.getText(), library, resText); saveQaRecord(talkReqVO.getProcessId(), "patient", askPatientAnswer.getId(), talkReqVO.getText(), library, resText);
} else { } else {
log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复未识别到语句", talkResult); // 临时解决方案,回答没有,在问题库中内置这个回答
AskPatientAnswer medicalRecErrorAnswer = getMedicalRecErrorAnswer(process.getMedicalRecId()); log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复 默认回复", talkResult);
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecErrorAnswer.getAnswerResourceId())); AskPatientAnswer medicalRecDefaultAnswer = getMedicalRecDefaultAnswer(process.getMedicalRecId());
talkResultResVO.setAnswerMessage(medicalRecErrorAnswer.getAnswer()); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecDefaultAnswer.getAnswerResourceId()));
saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), library, medicalRecErrorAnswer.getAnswer()); talkResultResVO.setAnswerMessage(medicalRecDefaultAnswer.getAnswer());
saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), library, medicalRecDefaultAnswer.getAnswer());
} }
} }
} }
@ -214,7 +215,7 @@ public class AskServiceImpl implements AskService {
GlobalResult<List<QaSimilarityQuestionAnswer>> result = askQaSimilarityFeignClient.askQuestionSimilarityAnswer(new QaSimilarityQuestion(question)); GlobalResult<List<QaSimilarityQuestionAnswer>> result = askQaSimilarityFeignClient.askQuestionSimilarityAnswer(new QaSimilarityQuestion(question));
log.info("调用talkQaSimilarity结束,问题:{},返回结果:{}", question, JSONUtil.toJsonStr(result)); log.info("调用talkQaSimilarity结束,问题:{},返回结果:{}", question, JSONUtil.toJsonStr(result));
return CollUtil.getFirst(result.getData()).getMatchQuestionCode(); return CollUtil.getFirst(result.getData()).getMatchQuestionCode();
}catch (Exception e){ } catch (Exception e) {
log.error("调用talkQaSimilarity error ", e); log.error("调用talkQaSimilarity error ", e);
return null; return null;
} }
@ -232,6 +233,18 @@ public class AskServiceImpl implements AskService {
return askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getLibraryQuestionId, askTemplateQuestionLibrary.getId()).one(); return askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getLibraryQuestionId, askTemplateQuestionLibrary.getId()).one();
} }
private AskPatientAnswer getMedicalRecDefaultAnswer(String medicalRecId) {
//Optional.ofNullable(medicalRecErrorAnswer).orElseGet(() ->new AskPatientAnswer()).getAnswer()
Assert.notEmpty(medicalRecId, "病历id不能为空");
CommonDic commonDic = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").eq(CommonDic::getCode, "system_default").one();
Assert.notNull(commonDic, "字典未配置默认回答场景");
AskTemplateQuestionLibrary askTemplateQuestionLibrary = askTemplateQuestionLibraryService.lambdaQuery().eq(AskTemplateQuestionLibrary::getDictId, commonDic.getId()).one();
Assert.notNull(askTemplateQuestionLibrary, "知识库未配置系统内置异常识别场景");
return askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getLibraryQuestionId, askTemplateQuestionLibrary.getId()).one();
}
/** /**
* base64 * base64

Loading…
Cancel
Save