"...net/mingsoft/cms/git@ustchcs.com:gujinli1118/MCMS.git" did not exist on "82f7af690941b6004c57d2999c6065bafddb6b0a"
Commit a3d658f6 authored by trumansdo's avatar trumansdo
Browse files

完成结果集映射。


待完善:结果集中间处理结果应该进行缓存,实现可重复利用
待提交:结果集映射的设计思路文档
Signed-off-by: default avatartrumansdo <1012243881@qq.com>
parent 6499375c
DELIMITER_PLACEHOLDER_START=#
DELIMITER_PLACEHOLDER_END=#
DELIMITER_STATEMENT_START=--:
DELIMITER_STATEMENT_END=--
DELIMITER_STATEMENT_END=
#\u51FD\u6570\u6CE8\u518C
FN.isEmpty=org.beetl.ext.fn.EmptyExpressionFunction
FN.isNotEmpty=org.beetl.ext.fn.IsNotEmptyExpressionFunction
......
package com.ibeetl.admin.core.util.beetl;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.ibeetl.admin.core.util.CacheUtil;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import org.beetl.core.Context;
import org.beetl.core.Function;
import org.beetl.core.GroupTemplate;
import org.beetl.core.ResourceLoader;
import org.beetl.core.resource.StringTemplateResourceLoader;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.SQLResult;
public class MappingFunction implements Function {
private static final StringWriter STRING_WRITER = new StringWriter();
private static final StringTemplateResourceLoader STRING_TEMPLATE_RESOURCE_LOADER = new StringTemplateResourceLoader();
@Override
public Object call(Object[] paras, Context ctx) {
Object sqlid = ctx.getGlobal("_id");
if (ObjectUtil.isNull(CacheUtil.get(sqlid))){
throw new RuntimeException(StrUtil.format("【{}】只能存在唯一一个映射", sqlid));
String sqlSegmentId = (String) paras[0];
Map inputParas = ctx.globalVar;
if (paras.length == 2) {
Map map = (Map) paras[1];
map.putAll(inputParas);
inputParas = map;
}
SQLManager sm = (SQLManager) ctx.getGlobal("_manager");
// 保留,免得被覆盖
List list = (List) ctx.getGlobal("_paras");
/*获取参数指定的sqlid所在的md文件名*/
String file = this.getParentId(ctx);
SQLResult result;
if(sqlSegmentId.indexOf(".")==-1){
/*证明是同一个md文件的sql段*/
result = sm.getSQLResult(file + "." + sqlSegmentId, inputParas, ctx);
}else {
/*另一个md文件的sql段*/
result = sm.getSQLResult(sqlSegmentId, inputParas, ctx);
}
Map json = JSONUtil.parseObj(paras[0]);
CacheUtil.put(sqlid, json);
// 追加参数
list.addAll(result.jdbcPara);
ctx.set("_paras", list);
GroupTemplate groupTemplate = sm.getBeetl().getGroupTemplate();
Map rsMap =
groupTemplate.runScript(
result.jdbcSql, inputParas, STRING_WRITER, STRING_TEMPLATE_RESOURCE_LOADER);
if (MapUtil.isNotEmpty(rsMap)) {
String currentSqlId = ctx.getGlobal("_id").toString();
CacheUtil.put(currentSqlId, rsMap.values().stream().findFirst().get());
}
return StrUtil.EMPTY;
}
private String getParentId(Context ctx) {
String id = (String) ctx.getGlobal("_id");
int index = id.lastIndexOf(".");
String file = id.substring(0, index);
return file;
}
}
getAllRoutes
===
select router.id,
router.PARENT_ID,
ifnull(router.ACCESS_URL, '/error/404') path,
router.NAME,
menu.NAME title,
menu.ICON,
ifnull(menu.SEQ, 999999) seq,
crm.ROLE_ID
from core_function router
left join core_menu menu on menu.FUNCTION_ID = router.ID
left join core_role_menu crm on crm.MENU_ID = menu.id
order by router.ID
--:
var route_mapping={
```sql
select router.id,
router.PARENT_ID,
ifnull(router.ACCESS_URL, '/error/404') path,
router.NAME,
menu.NAME title,
menu.ICON,
ifnull(menu.SEQ, 999999) seq,
crm.ROLE_ID
from core_function router
left join core_menu menu on menu.FUNCTION_ID = router.ID
left join core_role_menu crm on crm.MENU_ID = menu.id
order by router.ID #text(mapping("RouteMapping"))#
```
RouteMapping
===
```javascript
var route_mapping_var={
"mapping": {
"path": "path",
"meta": {
......@@ -35,6 +41,7 @@ var route_mapping={
},
"id": "core_route_map"
};
mapping(route_mapping);
--
```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment