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

dev_2.1.0
xueqingkun 1 year ago
commit 28e458f5c1

@ -47,6 +47,7 @@ public class WebConfig implements WebMvcConfigurer {
paths.add("/fileManage/downloadFile");
paths.add("/aqLibrary/downloadQuestionLibraryTemplate");
paths.add("/medicalRecManage/downloadMedicalAnswerTemplate");
paths.add("/qaKnowledge/**");
// 开发环境,放开不校验token.每次修改这里需要重启(热部署不行)
// paths.add("/**");
return paths;

@ -1,41 +1,41 @@
package com.supervision.enums;
public enum TagEnum {
medical_rec("病例", 1, "#00B8F5"),
medical_rec("病例", 1, "#2F7CFF"),
process_medical("电子病历", 2, "#00B8F5"),
process_medical("电子病历", 2, "#55CBAD"),
self_desc("主诉", 3, "#00B8F5"),
self_desc("主诉", 3, "#55CBAD"),
previous_history("既往病史", 3, "#00B8F5"),
previous_history("既往病史", 3, "#55CBAD"),
illness_history("现病史", 3, "#00B8F5"),
illness_history("现病史", 3, "#55CBAD"),
personal_history("个人史", 3, "#00B8F5"),
personal_history("个人史", 3, "#55CBAD"),
allergy_history("过敏史", 3, "#00B8F5"),
allergy_history("过敏史", 3, "#55CBAD"),
family_history("家族史", 3, "#00B8F5"),
family_history("家族史", 3, "#55CBAD"),
marriage_child_history("婚育史", 3, "#00B8F5"),
marriage_child_history("婚育史", 3, "#55CBAD"),
operation_history("手术史", 3, "#00B8F5"),
operation_history("手术史", 3, "#55CBAD"),
symptoms("症状", 2, "#00B8F5"),
symptoms("症状", 2, "#55CBAD"),
patient("患者信息", 2, "#00B8F5"),
patient("患者信息", 2, "#55CBAD"),
physical("体格检查", 2, "#00B8F5"),
physical("体格检查", 2, "#8D8BFF"),
physical_result("体格检查结果", 2, "#00B8F5"),
physical_result("体格检查结果", 2, "#8D8BFF"),
ancillary("辅助检查", 2, "#00B8F5"),
ancillary("辅助检查", 2, "#4E8CFF"),
ancillary_result("辅助检查结果", 2, "#00B8F5"),
ancillary_result("辅助检查结果", 2, "#4E8CFF"),
treatment_plan("处置计划", 2, "#00B8F5"),
treatment_plan("处置计划", 2, "#2BCCFF"),
diagnosis("诊断", 2, "#00B8F5");
diagnosis("诊断", 2, "#FF6667");
private final String type;

@ -7,7 +7,7 @@ import java.util.List;
public interface GraphNebulaService {
void creatGraphByNebula(String processId);
String creatGraphByNebula(String processId);
GraphVO queryGraph(String processId, Integer level);

@ -4,10 +4,12 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
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 com.alibaba.nacos.common.utils.UuidUtils;
import cn.hutool.json.JSONUtil;
import com.supervision.dao.*;
import com.supervision.domain.*;
import com.supervision.enums.TagEnum;
@ -78,7 +80,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
private AncillaryResultDao ancillaryResultDao;
@Override
public void creatGraphByNebula(String processId) {
public String creatGraphByNebula(String processId) {
Process process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到流程,创建图谱失败"));
// 根据processId找到对应的诊疗计划,如果没有找到,说明治疗流程未完成,诊断失败
List<TreatmentPlanRecord> treatmentPlanRecordList = treatmentPlanRecordService.lambdaQuery().eq(TreatmentPlanRecord::getProcessId, processId).list();
@ -242,6 +244,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
}
log.info("病历图谱ID:{}", medicalRecVertex.getId());
processService.lambdaUpdate().set(Process::getGraphId, medicalRecVertex.getId()).eq(Process::getId, processId).update();
return medicalRecVertex.getId();
}
@ -250,8 +253,8 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
Process process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到对应的问诊流程"));
// 如果图谱ID为空,则创建图谱
if (StrUtil.isEmpty(process.getGraphId())) {
creatGraphByNebula(processId);
process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到对应的问诊流程"));
String graphId = creatGraphByNebula(processId);
process.setGraphId(graphId);
}
List<NgSubgraph<String>> subgraphList = medicalRecDao.selectSubgraph(process.getGraphId());
@ -279,8 +282,15 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
Map<?, ?> map = (Map<?, ?>) value;
Object nodeValue = map.get("nodeValue");
if (ObjectUtil.isNotEmpty(nodeValue)) {
// 判断是不是富文本,如果是富文本,则desc放数据值
if (StrUtil.startWith(String.valueOf(nodeValue), "<")) {
nodeVO.setNodeDesc(String.valueOf(nodeValue));
nodeVO.setNodeValue(tagEnum.getType());
} else {
nodeVO.setNodeValue(String.valueOf(nodeValue));
}
}
map.forEach((k, v) -> {
if (ObjectUtil.isNotEmpty(k)) {
nodeVO.getParams().put(String.valueOf(k), v);
@ -337,22 +347,27 @@ public class GraphNebulaServiceImpl implements GraphNebulaService {
recursionBuildTree(nodeVO, treeNodeMap, graphVO.getEdges());
}
// 为所有节点分配新的唯一ID(前端需要ID字段为唯一ID)
recursionGenerateSingleId(firstNodeList);
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) {
private void recursionGenerateSingleId(List<TreeNodeVO> firstNodeList, Snowflake snowflake) {
for (TreeNodeVO treeNodeVO : firstNodeList) {
String uuid = UuidUtils.generateUuid();
if (StrUtil.isBlank(treeNodeVO.getGraphId())) {
treeNodeVO.setGraphId(treeNodeVO.getId());
}
treeNodeVO.setId(uuid);
String nextId = snowflake.nextIdStr() + "-id";
treeNodeVO.setId(nextId);
if (CollUtil.isNotEmpty(treeNodeVO.getChildren())) {
recursionGenerateSingleId(treeNodeVO.getChildren());
recursionGenerateSingleId(treeNodeVO.getChildren(), snowflake);
}
}
}

@ -0,0 +1,34 @@
package com.supervision.manage.controller.qaKnowledge;
import com.supervision.dto.QaKnowledgeDTO;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("qaKnowledge")
@RequiredArgsConstructor
public class QaKnowledgeManageController {
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final QaKnowledgeManageService qaKnowledgeManageService;
@ApiOperation("获取问答知识库")
@GetMapping("queryQaKnowledge")
public List<QaKnowledgeDTO> queryQaKnowledge() {
return askTemplateQuestionLibraryService.queryQaKnowledge();
}
@ApiOperation("手动刷新知识库")
@GetMapping("refreshQaKnowledge")
public void refreshQaKnowledge() {
qaKnowledgeManageService.refreshQaKnowledge();
}
}

@ -0,0 +1,18 @@
package com.supervision.manage.feign;
import com.supervision.dto.QaKnowledgeDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "qaKnowledgeManageClient", url = "${qaSimilarity}")
public interface QaKnowledgeManageClient {
@PostMapping("updateDatabase")
void refreshQuestionList(@RequestBody List<QaKnowledgeDTO> qaKnowledgeVOList);
}

@ -0,0 +1,13 @@
package com.supervision.manage.pojo.vo;
import lombok.Data;
import java.util.List;
@Data
public class QaKnowledgeVO {
private String questionCode;
private List<String> questionList;
}

@ -0,0 +1,6 @@
package com.supervision.manage.service;
public interface QaKnowledgeManageService {
void refreshQaKnowledge();
}

@ -15,7 +15,10 @@ import com.supervision.manage.dto.UploadQuestionLibraryDTO;
import com.supervision.manage.pojo.vo.UploadQuestionLibraryResVo;
import com.supervision.manage.service.AskQuestionLibraryManageService;
import com.supervision.manage.service.FileManageService;
import com.supervision.model.*;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.CommonDic;
import com.supervision.model.FileResource;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.service.CommonDicService;
import com.supervision.util.RedisSequenceUtil;
@ -53,8 +56,11 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
private final FileManageService fileManageService;
private final QaKnowledgeManageService qaKnowledgeManageService;
private final String ASK_QUESTION_LIBRARY_TEMPLATE_ERROR_EXCEL_PATH = "classpath:template/ask_question_library_template_error.xlsx";
private final String ASK_QUESTION_LIBRARY_TEMPLATE_EXCEL_PATH = "classpath:template/ask_question_library_template.xlsx";
@Override
public List<AskQuestionLibraryResVo> queryList(AskQuestionLibraryReqVo askQuestionLibraryReqVo) {
@ -101,6 +107,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
}
one.setQuestion(question);
askTemplateQuestionLibraryService.updateById(one);
// 对问题库进行更新操作
qaKnowledgeManageService.refreshQaKnowledge();
return one.getId();
}else {
// 新增数据
@ -131,6 +139,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
askTemplateQuestionLibrary.setDefaultAnswerCode(nextDefaultCode);
askTemplateQuestionLibraryService.save(askTemplateQuestionLibrary);
// 对问题库进行更新操作
qaKnowledgeManageService.refreshQaKnowledge();
return askTemplateQuestionLibrary.getId();
}
}
@ -146,6 +156,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
Assert.isTrue(askTemplateQuestionLibrary.getDictId().equals(library.getDictId()), "不允许修改类目");
this.saveQuestionLibrary(askTemplateQuestionLibrary);
// 对问题库进行更新操作
qaKnowledgeManageService.refreshQaKnowledge();
return true;
}
@ -153,7 +165,10 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
public boolean deleteQuestionLibrary(String id) {
Assert.notEmpty(id, "id不能为空");
return askTemplateQuestionLibraryService.removeById(id);
askTemplateQuestionLibraryService.removeById(id);
// 对问题库进行更新操作
qaKnowledgeManageService.refreshQaKnowledge();
return true;
}
@Override
@ -184,6 +199,8 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
questionLibrary.setDefaultAnswer(currentDTO.getAnswer());
this.saveQuestionLibrary(questionLibrary);
}
// 对问题库进行更新操作
qaKnowledgeManageService.refreshQaKnowledge();
}
timer.restart();
@ -261,6 +278,7 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
// 查询类目字段
List<CommonDic> questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
uploadQuestionLibraryDTOS.forEach(dto->dto.doAction(questionLibraryList,questionTypeDicList));
}
/**

@ -0,0 +1,26 @@
package com.supervision.manage.service.impl;
import com.supervision.dto.QaKnowledgeDTO;
import com.supervision.manage.feign.QaKnowledgeManageClient;
import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.service.AskTemplateQuestionLibraryService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
@Slf4j
public class QaKnowledgeManageServiceImpl implements QaKnowledgeManageService {
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final QaKnowledgeManageClient qaKnowledgeManageClient;
public void refreshQaKnowledge() {
List<QaKnowledgeDTO> queryQaKnowledge = askTemplateQuestionLibraryService.queryQaKnowledge();
qaKnowledgeManageClient.refreshQuestionList(queryQaKnowledge);
}
}

@ -1,5 +1,5 @@
spring:
profiles:
active: test
active: dev
application:
name: virtual-patient-manage

@ -0,0 +1,13 @@
package com.supervision.dto;
import lombok.Data;
import java.util.List;
@Data
public class QaKnowledgeDTO {
private String questionCode;
private List<String> questionList;
}

@ -1,8 +1,9 @@
package com.supervision.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.dto.QaKnowledgeDTO;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.vo.manage.AskQuestionLibraryReqVo;
import com.supervision.vo.manage.AskQuestionLibraryResVo;
@ -23,4 +24,11 @@ public interface AskTemplateQuestionLibraryService extends IService<AskTemplateQ
String getMaxCode();
String getMaxDefaultAnswerCode();
/**
* ,ID,便使
*
* @return
*/
List<QaKnowledgeDTO> queryQaKnowledge();
}

@ -1,15 +1,24 @@
package com.supervision.service.impl;
import cn.hutool.core.collection.CollUtil;
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.QaKnowledgeDTO;
import com.supervision.mapper.AskTemplateQuestionLibraryMapper;
import com.supervision.model.AskTemplateQuestionLibrary;
import com.supervision.model.ConfigAncillaryItem;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.service.AskTemplateQuestionLibraryService;
import com.supervision.mapper.AskTemplateQuestionLibraryMapper;
import com.supervision.service.ConfigAncillaryItemService;
import com.supervision.service.ConfigPhysicalToolService;
import com.supervision.vo.manage.AskQuestionLibraryReqVo;
import com.supervision.vo.manage.AskQuestionLibraryResVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@ -18,10 +27,16 @@ import java.util.Objects;
* @description vp_ask_template_question_library()Service
* @createDate 2023-11-03 11:13:26
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTemplateQuestionLibraryMapper, AskTemplateQuestionLibrary>
implements AskTemplateQuestionLibraryService {
private final ConfigPhysicalToolService configPhysicalToolService;
private final ConfigAncillaryItemService configAncillaryItemService;
@Override
public List<AskQuestionLibraryResVo> queryList(AskQuestionLibraryReqVo askQuestionLibraryReqVo) {
@ -44,6 +59,7 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
}
return askTemplateQuestionLibrary.getCode();
}
@Override
public String getMaxDefaultAnswerCode() {
AskTemplateQuestionLibrary askTemplateQuestionLibrary = super.getBaseMapper()
@ -54,6 +70,58 @@ public class AskTemplateQuestionLibraryServiceImpl extends ServiceImpl<AskTempla
}
return askTemplateQuestionLibrary.getDefaultAnswerCode();
}
@Override
public List<QaKnowledgeDTO> queryQaKnowledge() {
// 查询所有的问题,忽略错误和静默视频
List<AskTemplateQuestionLibrary> libraryList = this.lambdaQuery()
.ne(AskTemplateQuestionLibrary::getDictId, 180).ne(AskTemplateQuestionLibrary::getDictId, 182).list();
List<QaKnowledgeDTO> knowledgeList = new ArrayList<>();
for (AskTemplateQuestionLibrary library : libraryList) {
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(library.getId());
qaKnowledgeDTO.setQuestionList(library.getQuestion());
knowledgeList.add(qaKnowledgeDTO);
}
// 这里处理呼出体格检查的问题
List<ConfigPhysicalTool> physicalToolList = configPhysicalToolService.lambdaQuery()
.isNotNull(ConfigPhysicalTool::getCode)
.isNotNull(ConfigPhysicalTool::getCallOutQuestion).list();
for (ConfigPhysicalTool tool : physicalToolList) {
if (CollUtil.isEmpty(tool.getCallOutQuestion())) {
log.warn("getIntentCodeAndIdMap: toolId:{},toolName:{},tool.getCallOutQuestion() is empty", tool.getId(), tool.getToolName());
continue;
}
// 把呼出的问题全部加进去
String toolIntent = "tool_" + tool.getCode();
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(toolIntent);
qaKnowledgeDTO.setQuestionList(tool.getCallOutQuestion());
knowledgeList.add(qaKnowledgeDTO);
}
// 生成呼出的辅助检查的问题
List<ConfigAncillaryItem> ancillaryItemList = configAncillaryItemService.lambdaQuery()
.isNotNull(ConfigAncillaryItem::getCode)
.isNotNull(ConfigAncillaryItem::getCallOutQuestion).list();
for (ConfigAncillaryItem ancillary : ancillaryItemList) {
if (CollUtil.isEmpty(ancillary.getCallOutQuestion())) {
log.warn("getIntentCodeAndIdMap: ancillaryId:{},itemName:{},ancillary.getCallOutQuestion() is empty", ancillary.getId(), ancillary.getItemName());
continue;
}
// 把辅助问诊的问题全部加进去
String ancillaryIntent = "ancillary_" + ancillary.getCode();
QaKnowledgeDTO qaKnowledgeDTO = new QaKnowledgeDTO();
qaKnowledgeDTO.setQuestionCode(ancillaryIntent);
qaKnowledgeDTO.setQuestionList(ancillary.getCallOutQuestion());
knowledgeList.add(qaKnowledgeDTO);
}
return knowledgeList;
}
}

@ -0,0 +1,19 @@
package com.supervision.feign;
import com.supervision.domain.GlobalResult;
import com.supervision.pojo.qaSimilarity.QaSimilarityQuestion;
import com.supervision.pojo.qaSimilarity.QaSimilarityQuestionAnswer;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "askQaSimilarityFeignClient", url = "${qaSimilarity}")
public interface AskQaSimilarityFeignClient {
@PostMapping("matchQuestion")
GlobalResult<List<QaSimilarityQuestionAnswer>> askQuestionSimilarityAnswer(@RequestBody QaSimilarityQuestion question);
}

@ -0,0 +1,11 @@
package com.supervision.pojo.qaSimilarity;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class QaSimilarityQuestion {
private String question;
}

@ -0,0 +1,13 @@
package com.supervision.pojo.qaSimilarity;
import lombok.Data;
@Data
public class QaSimilarityQuestionAnswer {
private String matchQuestion;
private String matchQuestionCode;
private Double matchScore;
}

@ -9,17 +9,21 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import com.supervision.domain.GlobalResult;
import com.supervision.exception.BusinessException;
import com.supervision.feign.AskQaSimilarityFeignClient;
import com.supervision.feign.RasaManageFeignClient;
import com.supervision.model.Process;
import com.supervision.model.*;
import com.supervision.pojo.qaSimilarity.QaSimilarityQuestion;
import com.supervision.pojo.qaSimilarity.QaSimilarityQuestionAnswer;
import com.supervision.pojo.vo.TalkResultResVO;
import com.supervision.pojo.vo.TalkVideoReqVO;
import com.supervision.service.*;
import com.supervision.util.*;
import com.supervision.util.AsrUtil;
import com.supervision.util.MinioUtil;
import com.supervision.util.UserUtil;
import com.supervision.vo.rasa.RasaTalkVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -46,6 +50,8 @@ public class AskServiceImpl implements AskService {
private final RasaManageFeignClient rasaManageFeignClient;
private final AskQaSimilarityFeignClient askQaSimilarityFeignClient;
private final CommonDicService commonDicService;
@Override
@ -117,12 +123,13 @@ public class AskServiceImpl implements AskService {
// 根据processId找到对应的病人
Process process = Optional.ofNullable(processService.getById(talkReqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到诊疗进程"));
String talkResult = talkQaSimilarity(talkReqVO.getText(), UserUtil.getUser().getId());
// 调用rasa获取文字内容
String rasaResult = talkRasa(talkReqVO.getText(), UserUtil.getUser().getId());
log.info("rasa的回复是:{}", rasaResult);
//String rasaResult = talkRasa(talkReqVO.getText(), UserUtil.getUser().getId());
log.info("调用对话的回复是:{}", talkResult);
TalkResultResVO talkResultResVO = new TalkResultResVO();
// 如果rasa没有识别出来,则返回默认值
if (StrUtil.isBlank(rasaResult)) {
if (StrUtil.isBlank(talkResult)) {
AskPatientAnswer medicalRecErrorAnswer = getMedicalRecErrorAnswer(process.getMedicalRecId());
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecErrorAnswer.getAnswerResourceId()));
talkResultResVO.setAnswerMessage(medicalRecErrorAnswer.getAnswer());
@ -134,20 +141,20 @@ public class AskServiceImpl implements AskService {
// 这里校验,rasa回复的结果是不是action
// 这里设置的模板,对于action的动作全部是用ancillary_ | tool_进行标记,详情看生成rasa的yml的代码:RasaServiceImpl.generateDomain
// ancillary_ | tool_
if (rasaResult.startsWith("ancillary_") || rasaResult.startsWith("tool_")) {
log.info("呼出语句:{}", rasaResult);
List<String> actionList = StrUtil.split(rasaResult, '_');
if (talkResult.startsWith("ancillary_") || talkResult.startsWith("tool_")) {
log.info("呼出语句:{}", talkResult);
List<String> actionList = StrUtil.split(talkResult, '_');
if (actionList.size() > 1) {
// 在这里给socket回复,设置为动作
// 在这里设置为动作
talkResultResVO.setActionId(actionList.get(1));
talkResultResVO.setType("ancillary".equals(actionList.get(0)) ? 3 : 2);
setActionRelation(talkResultResVO);
return talkResultResVO;
}
} else {
AskTemplateQuestionLibrary library = askTemplateQuestionLibraryService.getById(rasaResult);
AskTemplateQuestionLibrary library = askTemplateQuestionLibraryService.getById(talkResult);
if (ObjectUtil.isEmpty(library)) {
log.info("{}:未从问题库中找到,回答未识别语句", rasaResult);
log.info("{}:未从问题库中找到,回答未识别语句", talkResult);
AskPatientAnswer medicalRecErrorAnswer = getMedicalRecErrorAnswer(process.getMedicalRecId());
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecErrorAnswer.getAnswerResourceId()));
talkResultResVO.setAnswerMessage(medicalRecErrorAnswer.getAnswer());
@ -159,13 +166,13 @@ public class AskServiceImpl implements AskService {
if (ObjectUtil.isNotEmpty(askPatientAnswer) && StrUtil.isNotEmpty(askPatientAnswer.getAnswerResourceId())) {
String resText = askPatientAnswer.getAnswer();
log.info("{}:找到了病历配置的回答语句:{},回答内容:{}", rasaResult, askPatientAnswer.getId(), resText);
log.info("{}:找到了病历配置的回答语句:{},回答内容:{}", talkResult, askPatientAnswer.getId(), resText);
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(askPatientAnswer.getAnswerResourceId()));
talkResultResVO.setAnswerMessage(askPatientAnswer.getAnswer());
// 保存记录
saveQaRecord(talkReqVO.getProcessId(), "patient", askPatientAnswer.getId(), talkReqVO.getText(), library, resText);
} else {
log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复未识别到语句", rasaResult);
log.info("{}:病历配置,从AskPatientAnswer中未找到回答结果,回复未识别到语句", talkResult);
AskPatientAnswer medicalRecErrorAnswer = getMedicalRecErrorAnswer(process.getMedicalRecId());
talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(medicalRecErrorAnswer.getAnswerResourceId()));
talkResultResVO.setAnswerMessage(medicalRecErrorAnswer.getAnswer());
@ -196,6 +203,14 @@ public class AskServiceImpl implements AskService {
return null;
}
public String talkQaSimilarity(String question, String sessionId) {
GlobalResult<List<QaSimilarityQuestionAnswer>> result = askQaSimilarityFeignClient.askQuestionSimilarityAnswer(new QaSimilarityQuestion(question));
if (200 != result.getCode()) {
throw new BusinessException("相似度匹配失败");
}
return CollUtil.getFirst(result.getData()).getMatchQuestionCode();
}
private AskPatientAnswer getMedicalRecErrorAnswer(String medicalRecId) {
//Optional.ofNullable(medicalRecErrorAnswer).orElseGet(() ->new AskPatientAnswer()).getAnswer()
Assert.notEmpty(medicalRecId, "病历id不能为空");

Loading…
Cancel
Save