添加代码 问答功能代码

main
xueqingkun 11 months ago
parent 7859e05d7a
commit 17d0a1d57b

@ -1,16 +1,21 @@
package com.supervision.controller;
import cn.hutool.core.collection.CollUtil;
import com.supervision.domain.IrRobotConfig;
import com.supervision.dto.QueryProcessDTO;
import com.supervision.service.IrRobotConfigService;
import com.supervision.service.QueryTemplateProcessor;
import com.supervision.util.freemark.StringTemplateConfig;
import freemarker.template.TemplateException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@RestController
@ -25,9 +30,10 @@ public class TestController {
@GetMapping("hello")
public List<IrRobotConfig> hello() {
return irRobotConfigService.list();
@PostMapping("freemarkerTest")
public String freemarkerTest(@RequestBody Map<String,Object> params) throws TemplateException, IOException {
return StringTemplateConfig.getInstance().process((String) params.get("template"),params);
}
@GetMapping("process")

@ -54,7 +54,8 @@ public class QueryProcessDTO {
if (CollUtil.isEmpty(paramCheckList)){
return "";
}
return paramCheckList.stream().map(ParamCheckDTO::toMessage).collect(Collectors.joining(","));
String paraDescJoin = paramCheckList.stream().map(ParamCheckDTO::getParamDesc).filter(StrUtil::isNotEmpty).collect(Collectors.joining(","));
return "请设置必要信息:"+paraDescJoin;
}

@ -78,7 +78,7 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
Set<String> sessionParamsNames = sessionParams.stream().filter(param->StrUtil.isNotEmpty(param.getParamValue())).map(IrSessionParam::getParamName).collect(Collectors.toSet());
paramsList.stream().filter(param -> Integer.valueOf(1).equals(param.getParamRequire())).forEach(param -> {
queryProcessDTO.notNullParam(param.getParamName(),
sessionParamsNames.contains(param.getParamName())? true : null, "参数[" + param.getParamName() + "]未设置!");
sessionParamsNames.contains(param.getParamName())? true : null, param.getParamDesc());
});
if (Integer.valueOf(1).equals(queryProcessDTO.getState())) {
// 参数校验不通过,返回结果
@ -90,20 +90,20 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
try {
if (Integer.valueOf(4).equals(knowledge.getResultType())){
Map<String, Object> params = getParams(paramsList, sessionParams);
// todo测试使用
String path = localArchivesFilePath(rootPath, MapUtil.getStr(params, "ajid"),
MapUtil.getStr(params, "khrzjhm"),MapUtil.getStr(params, "khrmc"));
File tempFile = FileUtil.createTempFile();
generateZip(tempFile, FileUtil.loopFiles(path), true);
Map<String, Object> stringHashMap = new HashMap<>();
stringHashMap.put("fileContent", tempFile);
maps = CollUtil.toList(stringHashMap);
if (Objects.nonNull(path)){
File tempFile = FileUtil.createTempFile();
generateZip(tempFile, FileUtil.loopFiles(path), true);
Map<String, Object> stringHashMap = new HashMap<>();
stringHashMap.put("fileContent", tempFile);
maps = CollUtil.toList(stringHashMap);
}
}else {
maps = rowSqlMapper.selectList(knowledge.getSqlTemplate(), getParams(paramsList, sessionParams));
}
} catch (Exception e) {
log.error("执行查询sql失败", e);
log.error("获取数据失败", e);
queryProcessDTO.setState(2);
return queryProcessDTO;
}
@ -123,9 +123,39 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
private void wrapperSqlResult(IrKnowledge knowledge, List<Map<String, Object>> maps, QueryProcessDTO queryProcessDTO) {
// 先处理文件类型的数据,如果文件为空,则修改处理类型位文本
if (Integer.valueOf(3).equals(knowledge.getResultType())) {
// 如果存在byte类型的数据数据key统一命名为 byteContent
queryProcessDTO.setContentType(3);
Map<String, Object> resultMap = CollUtil.getFirst(maps);
if (CollUtil.isNotEmpty(resultMap)){
queryProcessDTO.setByteContent((byte[]) CollUtil.getFirst(maps).get("byte_content"));
}else {
knowledge.setResultType(1);
queryProcessDTO.setByteContent(null);
}
}
if (Integer.valueOf(4).equals(knowledge.getResultType())){
queryProcessDTO.setStringContent(knowledge.getResultTemplate());
if (CollUtil.isNotEmpty(CollUtil.getFirst(maps))){
queryProcessDTO.setFileContent((File) CollUtil.getFirst(maps).get("fileContent"));
}
queryProcessDTO.setContentType(6);
try {
String process = StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(),
Objects.isNull(CollUtil.getFirst(maps)) ? new HashMap<>() : CollUtil.getFirst(maps));
queryProcessDTO.setStringContent(process);
} catch (IOException | TemplateException e) {
log.error("执行结果模板失败", e);
queryProcessDTO.setState(2);
}
}
if (Integer.valueOf(1).equals(knowledge.getResultType())) {
try {
String process = StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(), CollUtil.getFirst(maps));
String process = StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(),
Objects.isNull(CollUtil.getFirst(maps)) ? new HashMap<>() : CollUtil.getFirst(maps));
queryProcessDTO.setStringContent(process);
queryProcessDTO.setContentType(1);
} catch (IOException | TemplateException e) {
@ -144,18 +174,6 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor {
}
}
if (Integer.valueOf(3).equals(knowledge.getResultType())) {
// 如果存在byte类型的数据数据key统一命名为 byteContent
queryProcessDTO.setByteContent((byte[]) CollUtil.getFirst(maps).get("byteContent"));
queryProcessDTO.setContentType(3);
queryProcessDTO.setByteContentId(CollUtil.getFirst(maps).get("byteContentId").toString());
}
if (Integer.valueOf(4).equals(knowledge.getResultType())){
queryProcessDTO.setStringContent(knowledge.getResultTemplate());
queryProcessDTO.setFileContent((File) CollUtil.getFirst(maps).get("fileContent"));
queryProcessDTO.setContentType(6);
}
// 去除回响应字符串中的特殊字符
if (StrUtil.isNotEmpty(queryProcessDTO.getStringContent())){
queryProcessDTO.setStringContent(StrUtil.cleanBlank(queryProcessDTO.getStringContent()));

@ -105,10 +105,10 @@ public class RobotTalkServiceImpl implements RobotTalkService {
if (robotTalkDTO.isDoNext()){
QueryProcessDTO matchAnswer = queryMatchAnswer(sessionId, matchQuestionAnswerDTO, robotTalkDTO, robotTalkReq.getTitleContent());
if (Integer.valueOf(0).equals(matchAnswer.getState()) &&
Integer.valueOf(3).equals(matchAnswer.getContentType())){
Integer.valueOf(3).equals(matchAnswer.getContentType())
&& matchAnswer.getByteContent() != null){
// 查询结果类型为字节数组
robotTalkDTO.getAnswerInfo().setContentType(3);
robotTalkDTO.getAnswerInfo().setByteId(matchAnswer.getByteContentId());
robotTalkDTO.getAnswerInfo().setAnswerByte(matchAnswer.getByteContent());
}else{
robotTalkDTO.getAnswerInfo().setAnswerFile(matchAnswer.getFileContent());
@ -117,7 +117,11 @@ public class RobotTalkServiceImpl implements RobotTalkService {
}
logSessionInfo(robotTalkDTO, matchQuestionAnswerDTO);
// 清除中间数据
robotTalkDTO.getAnswerInfo().setVoiceBase64(null);
robotTalkDTO.getAnswerInfo().setAnswerByte(null);
robotTalkDTO.getAnswerInfo().setAnswerFile(null);
log.info("textTalk2Robot:结束问答,耗时:{}ms",timeInterval.interval("all"));
return robotTalkDTO;
@ -299,7 +303,7 @@ public class RobotTalkServiceImpl implements RobotTalkService {
sessionHistory.setAnswer(answerInfo.getMessage());
sessionHistory.setAnswerType(answerInfo.getContentType());
sessionHistory.setUserQuestion(robotTalkDTO.getAnswerInfo().getMessage());
sessionHistory.setUserQuestion(robotTalkDTO.getAskInfo().getMessage());
sessionHistory.setCreateUserId(UserUtil.getUser().getId());
if (Objects.nonNull(matchQuestionAnswerDTO)){
sessionHistory.setMatchKnowledgeId(matchQuestionAnswerDTO.getMatchQuestionCode());
@ -336,7 +340,7 @@ public class RobotTalkServiceImpl implements RobotTalkService {
if (StrUtil.isNotEmpty(robotTalkDTO.getAskInfo().getAskId())){
sessionService.lambdaUpdate()
.eq(IrSessionHistory::getId,robotTalkDTO.getAskInfo().getAskId())
.set(IrSessionHistory::getAnswerVoiceId,irVoice.getId()).update();
.set(IrSessionHistory::getUserQuestionVoiceId,irVoice.getId()).update();
}
}
@ -371,6 +375,7 @@ public class RobotTalkServiceImpl implements RobotTalkService {
.audioLength(voiceLengthMap.get(sessionHistory.getUserQuestionVoiceId())).build();
if (Integer.valueOf(6).equals(sessionHistory.getAnswerType())){
// 屏蔽弹框记录
return CollUtil.newArrayList(askDiaLog);
}

@ -28,7 +28,7 @@ public class VoiceServiceImpl implements VoiceService {
}
@Override
public String voiceToText(byte[] bytes, String sessionId) throws IOException {
public String voiceToText(byte[] bytes, String sessionId){
log.info("语音转文字开始");
TimeInterval timeInterval = DateUtil.timer();
String transform = AsrUtil.asrTransformByBytes(bytes);

Loading…
Cancel
Save