|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.supervision.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
@ -18,6 +19,7 @@ import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.StopWatch;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
@ -73,6 +75,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public TalkVideoTtsResultResVO talkByVideoAndTts(TalkVideoReqVO talkReqVO) {
|
|
|
|
|
|
|
|
|
|
String answer = talkByVideoAndTts(talkReqVO.getProcessId(), talkReqVO.getText());
|
|
|
|
|
TalkVideoTtsResultResVO talkVideoTtsResultResVO = new TalkVideoTtsResultResVO();
|
|
|
|
|
talkVideoTtsResultResVO.setVoiceBase64(TtsUtil.ttsTransform(answer));
|
|
|
|
@ -81,6 +84,8 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String talkByVideoAndTts(String processId, String question) {
|
|
|
|
|
StopWatch stopWatch = new StopWatch();
|
|
|
|
|
stopWatch.start();
|
|
|
|
|
// 流转记录表
|
|
|
|
|
List<AskCirculationDetail> circulationList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
@ -99,7 +104,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
// 记录大模型的流转记录
|
|
|
|
|
buildAiCirculationDetail(circulationList, answer, medicalRec);
|
|
|
|
|
// 保存消息到记录表
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList, stopWatch);
|
|
|
|
|
return answer;
|
|
|
|
|
}
|
|
|
|
|
QaSimilarityQuestionAnswer similarityResult = first.get();
|
|
|
|
@ -115,7 +120,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
String answer = aiService.talk(question, medicalRec.getMedicalRecordAi());
|
|
|
|
|
// 记录流转记录
|
|
|
|
|
buildAiCirculationDetail(circulationList, answer, medicalRec);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList, stopWatch);
|
|
|
|
|
return answer;
|
|
|
|
|
}
|
|
|
|
|
// 根据对应的标准问题,从标准问题表中找到标准问题
|
|
|
|
@ -130,7 +135,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
String answer = aiService.talk(question, medicalRec.getMedicalRecordAi());
|
|
|
|
|
// 记录流转记录
|
|
|
|
|
buildAiCirculationDetail(circulationList, answer, medicalRec);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList, stopWatch);
|
|
|
|
|
return answer;
|
|
|
|
|
}
|
|
|
|
|
// 根据问题找这个病历配置的答案
|
|
|
|
@ -146,7 +151,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
String answer = aiService.talk(question, medicalRec.getMedicalRecordAi());
|
|
|
|
|
// 记录流转记录
|
|
|
|
|
buildAiCirculationDetail(circulationList, answer, medicalRec);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 2, question, null, answer, circulationList, stopWatch);
|
|
|
|
|
return answer;
|
|
|
|
|
}
|
|
|
|
|
// 如果找到了,就走病历配置的内容回答
|
|
|
|
@ -165,7 +170,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
.matchQuestion(similarityResult.getMatchQuestion())
|
|
|
|
|
.successType(1)
|
|
|
|
|
.build());
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 1, question, similarityResult.getLibraryQuestionId(), patientAnswer, circulationList);
|
|
|
|
|
saveQaRecord(process.getId(), medicalRec, 1, question, similarityResult.getLibraryQuestionId(), patientAnswer, circulationList, stopWatch);
|
|
|
|
|
return patientAnswer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -178,7 +183,7 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void saveQaRecord(String processId, MedicalRec medicalRec, Integer matchType, String question, String libraryId, String answer, List<AskCirculationDetail> circulationList) {
|
|
|
|
|
private void saveQaRecord(String processId, MedicalRec medicalRec, Integer matchType, String question, String libraryId, String answer, List<AskCirculationDetail> circulationList, StopWatch stopWatch) {
|
|
|
|
|
DiagnosisQaRecord record = new DiagnosisQaRecord();
|
|
|
|
|
record.setProcessId(processId);
|
|
|
|
|
record.setMatchType(matchType);
|
|
|
|
@ -196,6 +201,11 @@ public class AskServiceImpl implements AskService {
|
|
|
|
|
e.setQuestion(question);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
stopWatch.stop();
|
|
|
|
|
// 记录本次执行耗时
|
|
|
|
|
if (CollUtil.isNotEmpty(circulationList)) {
|
|
|
|
|
circulationList.get(circulationList.size() - 1).setRemark(stopWatch.toString());
|
|
|
|
|
}
|
|
|
|
|
askCirculationDetailService.saveBatch(circulationList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|