From 3d4519db5b7ad963c61a1a690f6d6476e8d56899 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 26 Mar 2024 15:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81=20QueryTem?= =?UTF-8?q?plateProcessor.process?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TestController.java | 10 ++++++ .../com/supervision/domain/IrKnowledge.java | 5 +++ .../impl/QueryTemplateProcessorImpl.java | 36 ++++++++++++++----- .../supervision/util/ParamTypeConverter.java | 2 ++ .../util/freemark/StringTemplateConfig.java | 22 +++++++----- .../util/mybatis/RowSqlMapper.java | 5 ++- .../resources/mapper/IrKnowledgeMapper.xml | 3 +- 7 files changed, 64 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/supervision/controller/TestController.java b/src/main/java/com/supervision/controller/TestController.java index 5ab0ca1..a510c7c 100644 --- a/src/main/java/com/supervision/controller/TestController.java +++ b/src/main/java/com/supervision/controller/TestController.java @@ -2,12 +2,15 @@ package com.supervision.controller; import com.supervision.domain.IrRobotConfig; import com.supervision.service.IrRobotConfigService; +import com.supervision.service.QueryTemplateProcessor; +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 java.io.IOException; import java.util.List; @@ -19,6 +22,8 @@ public class TestController { private final IrRobotConfigService irRobotConfigService; + private final QueryTemplateProcessor queryTemplateProcessor; + @GetMapping("hello") @@ -26,5 +31,10 @@ public class TestController { return irRobotConfigService.list(); } + @GetMapping("process") + public String process(String templateId,String sessionId) throws TemplateException, IOException { + return queryTemplateProcessor.process(templateId, sessionId); + } + } diff --git a/src/main/java/com/supervision/domain/IrKnowledge.java b/src/main/java/com/supervision/domain/IrKnowledge.java index f848126..28f6f24 100644 --- a/src/main/java/com/supervision/domain/IrKnowledge.java +++ b/src/main/java/com/supervision/domain/IrKnowledge.java @@ -44,6 +44,11 @@ public class IrKnowledge implements Serializable { */ private String resultTemplate; + /** + * 查询结果数据类型:1:Map 2:List> 3: bytea + */ + private Integer resultType; + /** * */ diff --git a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java index 8b48a2a..f10618b 100644 --- a/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java +++ b/src/main/java/com/supervision/service/impl/QueryTemplateProcessorImpl.java @@ -1,5 +1,6 @@ package com.supervision.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.supervision.domain.IrKnowledge; import com.supervision.domain.IrSessionParam; @@ -17,9 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -44,24 +43,43 @@ public class QueryTemplateProcessorImpl implements QueryTemplateProcessor { Assert.notNull(knowledge, "知识不存在!"); Assert.notEmpty(knowledge.getSqlTemplate(), "模板内容不能为空"); Assert.notEmpty(knowledge.getResultTemplate(), "结果模板不能为空"); + Assert.notNull(knowledge.getResultType(), "结果类型不能为空"); // 查询必填的参数 - List paramsList = sqlParamService.lambdaQuery().eq(IrSqlParam::getKnowledgeId, templateId).eq(IrSqlParam::getParamRequire, 1).list(); + List paramsList = sqlParamService.lambdaQuery().eq(IrSqlParam::getKnowledgeId, templateId).list(); // 校验必填参数 List sessionParams = sessionParamService.lambdaQuery().eq(IrSessionParam::getSessionId, sessionId).list(); Set sessionParamsNames = sessionParams.stream().map(IrSessionParam::getParamName).collect(Collectors.toSet()); - paramsList.forEach(param -> Assert.isTrue(sessionParamsNames.contains(param.getParamName()), "参数["+param.getParamName()+"]未设置!")); + paramsList.stream().filter(param -> Integer.valueOf(1).equals(param.getParamRequire())) + .forEach(param -> Assert.isTrue(sessionParamsNames.contains(param.getParamName()), "参数["+param.getParamName()+"]未设置!")); // 执行查询sql - ParamTypeConverter converter = ParamTypeConverter.getInstance(); - Map params = sessionParams.stream().collect(Collectors.toMap(IrSessionParam::getParamName, v->converter.convert(v.getParamType(),v.getParamValue()), (v1, v2) -> v1)); - List> maps = rowSqlMapper.selectList(knowledge.getSqlTemplate(), params); + List> maps = rowSqlMapper.selectList(knowledge.getSqlTemplate(), getParams(paramsList, sessionParams)); // 组装返回结果 - return StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(), maps); + if (Integer.valueOf(1).equals(knowledge.getResultType())){ + return StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(), CollUtil.getFirst(maps)); + } + if (Integer.valueOf(2).equals(knowledge.getResultType())){ + return StringTemplateConfig.getInstance().process(knowledge.getResultTemplate(), maps); + } + // todo:字节类型暂不支持 + if (Integer.valueOf(3).equals(knowledge.getResultType())){ + return null; + } + return null; } + private Map getParams(List paramsList, List sessionParams) { + Map params = new HashMap<>(); + ParamTypeConverter converter = ParamTypeConverter.getInstance(); + for (IrSqlParam param : paramsList) { + Optional sessionParam = sessionParams.stream().filter(v -> v.getParamName().equals(param.getParamName())).findFirst(); + sessionParam.ifPresent(irSessionParam -> params.put(param.getParamName(), converter.convert(param.getParamType(), irSessionParam.getParamValue()))); + } + return params; + } } diff --git a/src/main/java/com/supervision/util/ParamTypeConverter.java b/src/main/java/com/supervision/util/ParamTypeConverter.java index b781430..da2c915 100644 --- a/src/main/java/com/supervision/util/ParamTypeConverter.java +++ b/src/main/java/com/supervision/util/ParamTypeConverter.java @@ -130,6 +130,8 @@ public class ParamTypeConverter { typeMap.put("Optional", Optional.class); typeMap.put("Opt", Opt.class); + typeMap.put("List", List.class); + } } diff --git a/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java b/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java index 5926656..e82fcc8 100644 --- a/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java +++ b/src/main/java/com/supervision/util/freemark/StringTemplateConfig.java @@ -1,12 +1,13 @@ package com.supervision.util.freemark; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.MD5; +import cn.hutool.json.JSONUtil; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.io.StringWriter; @@ -15,6 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +@Slf4j public class StringTemplateConfig { private final Configuration configuration; @@ -57,6 +59,16 @@ public class StringTemplateConfig { } public String process(String content, List> data) throws IOException, TemplateException { + Map dataModel = new HashMap(){}; + dataModel.put("dataList", data); + return process(content, dataModel); + + } + + public String process(String content, Map dataModel) throws IOException, TemplateException { + + log.info("StringTemplateConfig.process:入参data:{} , content:{}", JSONUtil.toJsonStr(dataModel),content); + if (StrUtil.isEmpty(content)) { return null; } @@ -66,14 +78,8 @@ public class StringTemplateConfig { } Template template = this.getTemplate(name); StringWriter out = new StringWriter(); - - Map dataModel = new HashMap<>(); - if (CollUtil.size(data) > 1){ - dataModel.put("list", data); - }else { - dataModel= CollUtil.getFirst(data); - } template.process(dataModel, out); + log.info("StringTemplateConfig.process:计算结果:{}", out); return out.toString(); } diff --git a/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java b/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java index 85794ea..95ab5c4 100644 --- a/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java +++ b/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java @@ -1,6 +1,7 @@ package com.supervision.util.mybatis; -import com.supervision.util.mybatis.RowMapperStatementBuilder; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.exceptions.TooManyResultsException; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Component; @@ -11,6 +12,7 @@ import java.util.Map; /** * 基于mybatis直接执行sql语句的工具类 */ +@Slf4j @Component public class RowSqlMapper { @@ -113,6 +115,7 @@ public class RowSqlMapper { * @return */ public List> selectList(String sql, Object value) { + log.info("selectList sql:{},params:{}", sql, JSONUtil.toJsonStr(value)); Class parameterType = value != null ? value.getClass() : null; String msId = mapperStatementBuilder.selectDynamic(sql, parameterType); return sqlSession.selectList(msId, value); diff --git a/src/main/resources/mapper/IrKnowledgeMapper.xml b/src/main/resources/mapper/IrKnowledgeMapper.xml index a64ced0..7c7995e 100644 --- a/src/main/resources/mapper/IrKnowledgeMapper.xml +++ b/src/main/resources/mapper/IrKnowledgeMapper.xml @@ -10,6 +10,7 @@ + @@ -18,7 +19,7 @@ id,question_code,standard_question, - state,sql_template,result_template, + state,sql_template,result_template,result_type, create_user_id,create_time,update_user_id, update_time