添加代码 QueryTemplateProcessor.process

main
xueqingkun 11 months ago
parent 890258e1fc
commit 3d4519db5b

@ -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);
}
}

@ -44,6 +44,11 @@ public class IrKnowledge implements Serializable {
*/
private String resultTemplate;
/**
* 1Map<String,Object> 2:List<Map<String,Object>> 3: bytea
*/
private Integer resultType;
/**
*
*/

@ -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<IrSqlParam> paramsList = sqlParamService.lambdaQuery().eq(IrSqlParam::getKnowledgeId, templateId).eq(IrSqlParam::getParamRequire, 1).list();
List<IrSqlParam> paramsList = sqlParamService.lambdaQuery().eq(IrSqlParam::getKnowledgeId, templateId).list();
// 校验必填参数
List<IrSessionParam> sessionParams = sessionParamService.lambdaQuery().eq(IrSessionParam::getSessionId, sessionId).list();
Set<String> 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<String, Object> params = sessionParams.stream().collect(Collectors.toMap(IrSessionParam::getParamName, v->converter.convert(v.getParamType(),v.getParamValue()), (v1, v2) -> v1));
List<Map<String, Object>> maps = rowSqlMapper.selectList(knowledge.getSqlTemplate(), params);
List<Map<String, Object>> 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<String, Object> getParams(List<IrSqlParam> paramsList, List<IrSessionParam> sessionParams) {
Map<String, Object> params = new HashMap<>();
ParamTypeConverter converter = ParamTypeConverter.getInstance();
for (IrSqlParam param : paramsList) {
Optional<IrSessionParam> 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;
}
}

@ -130,6 +130,8 @@ public class ParamTypeConverter {
typeMap.put("Optional", Optional.class);
typeMap.put("Opt", Opt.class);
typeMap.put("List", List.class);
}
}

@ -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<Map<String, Object>> data) throws IOException, TemplateException {
Map<String, Object> dataModel = new HashMap<String, Object>(){};
dataModel.put("dataList", data);
return process(content, dataModel);
}
public String process(String content, Map<String, Object> 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<String, Object> 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();
}

@ -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;
/**
* mybatissql
*/
@Slf4j
@Component
public class RowSqlMapper {
@ -113,6 +115,7 @@ public class RowSqlMapper {
* @return
*/
public List<Map<String, Object>> 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);

@ -10,6 +10,7 @@
<result property="state" column="state" jdbcType="INTEGER"/>
<result property="sqlTemplate" column="sql_template" jdbcType="VARCHAR"/>
<result property="resultTemplate" column="result_template" jdbcType="VARCHAR"/>
<result property="resultType" column="result_type" jdbcType="INTEGER"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
@ -18,7 +19,7 @@
<sql id="Base_Column_List">
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
</sql>

Loading…
Cancel
Save