diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java index c4d51a0e..2425d6ec 100644 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java @@ -149,7 +149,7 @@ public class RasaCmdServiceImpl implements RasaCmdService { // 3. 尝试停止原先的程序 boolean runIsSuccess = runIsSuccess(outMessageList); RasaModelInfo dbRasaModelInfo = rasaModeService.queryByModelId(argument.getModelId()); - if (null != dbRasaModelInfo.getPort() && runIsSuccess){ + if (null != dbRasaModelInfo.getPort() && !dbRasaModelInfo.getPort().equals(port) && runIsSuccess){ log.info("runExec server is up and dbRasaModelInfo is: {}, start kill old server ....",dbRasaModelInfo.getPort()); // 3.1 如果原本的程序已经运行且本次成功启动,杀掉原本的进程 execCmd(ListUtil.toList(shellEnv, getShellPath(RasaConstant.KILL_SHELL), String.valueOf(dbRasaModelInfo.getPort())), s -> false, 20); diff --git a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/TalkResultResVO.java b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/TalkResultResVO.java index f105bfac..93ceaf03 100644 --- a/virtual-patient-web/src/main/java/com/supervision/pojo/vo/TalkResultResVO.java +++ b/virtual-patient-web/src/main/java/com/supervision/pojo/vo/TalkResultResVO.java @@ -32,7 +32,8 @@ public class TalkResultResVO { @ApiModelProperty("视频base64位编码") private String videoBase64; - + @ApiModelProperty("回复的消息内容,用于调试视频资料内容") + private String answerMessage; } diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java index 58623f12..54d1a76b 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java @@ -49,6 +49,9 @@ public class AskServiceImpl implements AskService { @Value("${answer.defaultNoMatchId}") private String defaultNoMatchId; + @Value("${answer.defaultNoMatchAnswerMessage:}") + private String defaultNoMatchAnswerMessage; + @Override public String receiveVoiceFile(MultipartFile file) { if (file.getSize() <= 0) { @@ -206,6 +209,7 @@ public class AskServiceImpl implements AskService { // 如果rasa没有识别出来,则返回默认值 if (StrUtil.isBlank(rasaResult)) { talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(defaultNoMatchId)); + talkResultResVO.setVideoBase64(defaultNoMatchAnswerMessage); saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), null, "您好,我没有听懂您说什么"); } @@ -227,6 +231,7 @@ public class AskServiceImpl implements AskService { if (ObjectUtil.isEmpty(library)) { log.info("{}:未从问题库中找到,回答未识别语句", rasaResult); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(defaultNoMatchId)); + talkResultResVO.setAnswerMessage(defaultNoMatchAnswerMessage); saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), null, "您好,我没有听懂您说什么"); } else { AskPatientAnswer askPatientAnswer = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, process.getMedicalRecId()) @@ -238,12 +243,14 @@ public class AskServiceImpl implements AskService { if (StrUtil.isNotEmpty(library.getDefaultAnswer()) && StrUtil.isNotBlank(library.getDefaultAnswerResourceId())) { String resText = library.getDefaultAnswer(); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(library.getDefaultAnswerResourceId())); + talkResultResVO.setAnswerMessage(library.getDefaultAnswer()); // 保存记录 saveQaRecord(talkReqVO.getProcessId(), "default", library.getId(), talkReqVO.getText(), library, resText); log.info("{}:找到了默认答案:{}", rasaResult, talkReqVO.getText()); } else { log.info("{}:没有从默认答案中找到找到默认内容,回复未识别语句", rasaResult); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(library.getDefaultAnswerResourceId())); + talkResultResVO.setAnswerMessage(library.getDefaultAnswer()); saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), library, "您好,我没有听懂您说什么"); } } else { @@ -254,11 +261,13 @@ public class AskServiceImpl implements AskService { log.info("{}:病历配置的回答:{}:不为空,但在获取的时候,答案为空,开始回复默认语句,默认语句内容:{}", rasaResult, askPatientAnswer.getId(), resText); // 这里返回视频 talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(library.getDefaultAnswerResourceId())); + talkResultResVO.setAnswerMessage(library.getDefaultAnswer()); // 保存记录 saveQaRecord(talkReqVO.getProcessId(), "default", library.getId(), talkReqVO.getText(), library, resText); } else { log.info("{}:病历配置的回答:{}:不为空,但在获取的时候,答案为空,但是获取默认语句也为空,那么回复未识别语句", rasaResult, askPatientAnswer.getId()); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(defaultNoMatchId)); + talkResultResVO.setAnswerMessage(defaultNoMatchAnswerMessage); saveQaRecord(talkReqVO.getProcessId(), "default", null, talkReqVO.getText(), library, "您好,我没有听懂您说什么"); } @@ -266,6 +275,7 @@ public class AskServiceImpl implements AskService { String resText = askPatientAnswer.getAnswer(); log.info("{}:找到了病历配置的回答语句:{},回答内容:{}", rasaResult, askPatientAnswer.getId(), resText); talkResultResVO.setVideoBase64(getAnswerVideoBase64OrDefault(askPatientAnswer.getAnswerResourceId())); + talkResultResVO.setAnswerMessage(askPatientAnswer.getAnswer()); // 保存记录 saveQaRecord(talkReqVO.getProcessId(), "patient", askPatientAnswer.getId(), talkReqVO.getText(), library, resText); } @@ -301,4 +311,22 @@ public class AskServiceImpl implements AskService { } } + + private String getAnswerMessageOrDefault(String fileResourceId) { + if (StrUtil.isBlank(fileResourceId)) { + fileResourceId = defaultNoMatchId; + } + FileResource fileResource = fileResourceService.getById(fileResourceId); + if (ObjectUtil.isEmpty(fileResource)) { + log.info("未找到视频,走默认视频"); + fileResource = fileResourceService.getById(defaultNoMatchId); + } + try (InputStream inputStream = MinioUtil.download(fileResource.getMinioId())) { + return Base64Encoder.encode(IoUtil.readBytes(inputStream)); + } catch (Exception e) { + log.error("获取视频失败", e); + throw new BusinessException("未找到回复视频"); + } + + } } diff --git a/virtual-patient-web/src/test/java/com/supervision/VideoUpdateTest.java b/virtual-patient-web/src/test/java/com/supervision/VideoUpdateTest.java index 9a6e5822..354209c5 100644 --- a/virtual-patient-web/src/test/java/com/supervision/VideoUpdateTest.java +++ b/virtual-patient-web/src/test/java/com/supervision/VideoUpdateTest.java @@ -5,7 +5,10 @@ import cn.hutool.core.io.file.PathUtil; import com.supervision.model.AskPatientAnswer; import com.supervision.model.AskTemplateQuestionLibrary; import com.supervision.model.FileResource; +import com.supervision.pojo.vo.TalkResultResVO; +import com.supervision.pojo.vo.TalkVideoReqVO; import com.supervision.service.AskPatientAnswerService; +import com.supervision.service.AskService; import com.supervision.service.AskTemplateQuestionLibraryService; import com.supervision.service.FileResourceService; import com.supervision.util.MinioUtil; @@ -91,4 +94,20 @@ public class VideoUpdateTest { } } + + @Autowired + private AskService askService; + @Test + public void talkTest() throws Exception { + + TalkVideoReqVO talkVideoReqVO = new TalkVideoReqVO(); + talkVideoReqVO.setProcessId("1748165303767572481"); + talkVideoReqVO.setText("你哪里不舒服"); + + TalkResultResVO talkResultResVO = askService.talkByVideo(talkVideoReqVO); + + System.out.println(talkResultResVO.getAnswerMessage()); + + + } }