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