diff --git a/src/main/java/com/supervision/controller/TestController.java b/src/main/java/com/supervision/controller/TestController.java index c01666c..5ffd875 100644 --- a/src/main/java/com/supervision/controller/TestController.java +++ b/src/main/java/com/supervision/controller/TestController.java @@ -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 hello() { - return irRobotConfigService.list(); + @PostMapping("freemarkerTest") + public String freemarkerTest(@RequestBody Map params) throws TemplateException, IOException { + + return StringTemplateConfig.getInstance().process((String) params.get("template"),params); } @GetMapping("process") diff --git a/src/main/java/com/supervision/dto/QueryProcessDTO.java b/src/main/java/com/supervision/dto/QueryProcessDTO.java index 1d8f6e0..bf94e3f 100644 --- a/src/main/java/com/supervision/dto/QueryProcessDTO.java +++ b/src/main/java/com/supervision/dto/QueryProcessDTO.java @@ -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; } diff --git a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java index a85da50..900e8c4 100644 --- a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java +++ b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java @@ -78,7 +78,7 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor { Set 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 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 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 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> maps, QueryProcessDTO queryProcessDTO) { + // 先处理文件类型的数据,如果文件为空,则修改处理类型位文本 + if (Integer.valueOf(3).equals(knowledge.getResultType())) { + // 如果存在byte类型的数据,数据key统一命名为 byteContent + queryProcessDTO.setContentType(3); + Map 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())); diff --git a/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java b/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java index 384c4b6..49921e7 100644 --- a/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java +++ b/src/main/java/com/supervision/service/impl/RobotTalkServiceImpl.java @@ -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); } diff --git a/src/main/java/com/supervision/service/impl/VoiceServiceImpl.java b/src/main/java/com/supervision/service/impl/VoiceServiceImpl.java index e2eca18..e721a9f 100644 --- a/src/main/java/com/supervision/service/impl/VoiceServiceImpl.java +++ b/src/main/java/com/supervision/service/impl/VoiceServiceImpl.java @@ -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);