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

dev_2.1.0
xueqingkun 1 year ago
commit 3f8f4ac2a9

@ -3,12 +3,9 @@ package com.supervision.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
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.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.supervision.dao.*;
import com.supervision.domain.*;
import com.supervision.enums.TagEnum;
@ -175,7 +172,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
processMedicalDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("体格检查"), physicalVertex);
// 获取查询结果,增加到结果节点中
PhysicalResultVertex physicalResultVertex = new PhysicalResultVertex();
physicalResultVertex.setNodeValue(physicalRecord.getResult());
physicalResultVertex.setNodeValue(StrUtil.blankToDefault(physicalRecord.getResult(), "无相关资讯"));
physicalResultDao.insert(physicalResultVertex);
physicalResultDao.insertEdge(physicalVertex, new SinglePropertyEdge("结果"), physicalResultVertex);
// 如果是证实诊断依据,添加到证实诊断依据里面去
@ -198,7 +195,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
medicalRecDao.insertEdge(medicalRecVertex, new SinglePropertyEdge("辅助检查"), ancillaryVertex);
// 结果节点
AncillaryResultVertex ancillaryResultVertex = new AncillaryResultVertex();
ancillaryResultVertex.setNodeValue(diagnosisAncillaryRecord.getResult());
ancillaryResultVertex.setNodeValue(StrUtil.blankToDefault(diagnosisAncillaryRecord.getResult(), "无相关资讯"));
ancillaryResultDao.insert(ancillaryResultVertex);
// 保存检查结果连线
ancillaryDao.insertEdge(ancillaryVertex, new SinglePropertyEdge("结果"), ancillaryResultVertex);
@ -362,30 +359,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
for (TreeNodeVO nodeVO : firstNodeList) {
recursionBuildTree(nodeVO, treeNodeMap, graphVO.getEdges());
}
// 为所有节点分配新的唯一ID(前端需要ID字段为唯一ID)
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);
}
}
return firstNodeList;
}
private void recursionBuildTree(TreeNodeVO preNode, Map<String, TreeNodeVO> treeNodeMap, List<EdgeVO> edgeList) {

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

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

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

@ -173,11 +173,12 @@ public class AskServiceImpl implements AskService {
// 保存记录
saveQaRecord(talkReqVO.getProcessId(), "patient", askPatientAnswer.getId(), talkReqVO.getText(), library, resText);
} else {
log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复未识别到语句", talkResult);
AskPatientAnswer medicalRecErrorAnswer = getMedicalRecErrorAnswer(process.getMedicalRecId());
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecErrorAnswer.getAnswerResourceId()));
talkResultResVO.setAnswerMessage(medicalRecErrorAnswer.getAnswer());
saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), library, medicalRecErrorAnswer.getAnswer());
// 临时解决方案,回答没有,在问题库中内置这个回答
log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复 默认回复", talkResult);
AskPatientAnswer medicalRecDefaultAnswer = getMedicalRecDefaultAnswer(process.getMedicalRecId());
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecDefaultAnswer.getAnswerResourceId()));
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));
log.info("调用talkQaSimilarity结束,问题:{},返回结果:{}", question, JSONUtil.toJsonStr(result));
return CollUtil.getFirst(result.getData()).getMatchQuestionCode();
}catch (Exception e){
} catch (Exception e) {
log.error("调用talkQaSimilarity error ", e);
return null;
}
@ -232,6 +233,18 @@ public class AskServiceImpl implements AskService {
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

Loading…
Cancel
Save