Browse Source

增加:模型

master
郑根木 2 years ago
parent
commit
532b614c37
26 changed files with 135 additions and 614 deletions
  1. +4
    -3
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java
  2. +1
    -1
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java
  3. +10
    -0
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java
  4. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_card_group.ftl
  5. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_filter.ftl
  6. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_form.ftl
  7. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_grid_opt.ftl
  8. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_dialog.ftl
  9. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_query.ftl
  10. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_table.ftl
  11. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_model.ftl
  12. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_query_sfilters.ftl
  13. +0
    -10
      smtweb-framework/bpm/src/main/resources/static/template/default/index.yaml
  14. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_card.ftl
  15. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_card_bak.ftl
  16. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_group_card.ftl
  17. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_list.ftl
  18. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_list_card.ftl
  19. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_list_list.ftl
  20. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_point_card.ftl
  21. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_simple.ftl
  22. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_step_card.ftl
  23. +0
    -0
      smtweb-framework/bpm/src/main/resources/static/template/default/model_tree_list.ftl
  24. +2
    -0
      smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java
  25. +11
    -3
      smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java
  26. +107
    -597
      smtweb-framework/core/src/main/resources/demo.json

+ 4
- 3
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java View File

@@ -1,5 +1,6 @@
package cc.smtweb.system.bpm.util;

import cc.smtweb.framework.core.common.SwConsts;
import cc.smtweb.framework.core.exception.SwException;
import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.db.DbEngine;
@@ -38,7 +39,7 @@ public class CodeGenerator {

protected CodeGenerator() {
// templatesDir = this.getClass().getResource("/static/template").getPath();
mapTemplate = YamlUtil.readValue(this.getClass().getResourceAsStream("/static/template/index.yaml"), SwMap.class);
mapTemplate = YamlUtil.readValue(this.getClass().getResourceAsStream("/static/template/" + SwConsts.modelPath + "/index.yaml"), SwMap.class);
configuration = new Configuration(Configuration.VERSION_2_3_31);
try {
configuration.setClassForTemplateLoading(this.getClass(), "/static/template/");
@@ -97,7 +98,7 @@ public class CodeGenerator {

public String generate(Map<String, Object> model, String templateName) {
StringWriter out = new StringWriter();
generate(model, templateName + ".ftl", out);
generate(model, SwConsts.modelPath + "/" + templateName + ".ftl", out);
return out.getBuffer().toString();
}

@@ -195,7 +196,7 @@ public class CodeGenerator {

map.put("title", "thisIsATest!");
map.put("newId", new PKGenerator());
CodeGenerator.getInstance().generate(map, "model_card.ftl", out);
CodeGenerator.getInstance().generate(map, SwConsts.modelPath + "/model_card.ftl", out);
System.out.println(out.getBuffer().toString());
}
}

+ 1
- 1
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java View File

@@ -52,7 +52,7 @@ public class DynPageLoadHandler extends AbstractDynPageHandler {
SwMap data = new SwMap();
afterAddBean(dataSet, data);
mapRet.put(dataSet.name, DynRetBean.createBean(data));
} else if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type)) {//非枚举
} else {//非枚举 if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type))
SwListData listData = SwListData.create(null, 0);
afterAddList(dataSet, listData);
mapRet.put(dataSet.name, DynRetBean.createList(listData));


+ 10
- 0
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java View File

@@ -0,0 +1,10 @@
package cc.smtweb.system.bpm.web.engine.model.listcard.single;

import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService;

/**
* Created by Akmm at 2022-08-12 15:37
* 单页面简单列表卡片服务类
*/
public class LCSingleService extends DynPageService {
}

smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_card_group.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_card_group.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_filter.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_filter.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_form.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_form.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_grid_opt.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_list_dialog.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_dialog.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_list_query.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_query.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_list_table.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_list_table.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_model.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_model.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/incModel/inc_query_sfilters.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/incModel/inc_query_sfilters.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/index.yaml → smtweb-framework/bpm/src/main/resources/static/template/default/index.yaml View File

@@ -37,16 +37,6 @@ model:
# 变量
param:
-
name: 'queryDs'
type: 'ds'
label: '列表数据集'
desc: '请选择列表数据集'
-
name: 'editDs'
type: 'ds'
label: '卡片数据集'
desc: '请选择弹窗卡片数据集'
-
name: 'editTitle'
type: 'input'
label: '卡片标题'

smtweb-framework/bpm/src/main/resources/static/template/model_card.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_card.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_card_bak.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_card_bak.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_group_card.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_group_card.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_list.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_list.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_list_card.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_list_card.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_list_list.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_list_list.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_point_card.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_point_card.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_simple.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_simple.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_step_card.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_step_card.ftl View File


smtweb-framework/bpm/src/main/resources/static/template/model_tree_list.ftl → smtweb-framework/bpm/src/main/resources/static/template/default/model_tree_list.ftl View File


+ 2
- 0
smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java View File

@@ -12,6 +12,8 @@ public interface SwConsts {
//默认根节点
String DEF_ROOT_ID = "-1";
long DEF_ROOT_ID_LONG = -1;
//模型模板对应的路径,待扩展
String modelPath = "default";

//列表分页的页码和每页记录数
String PARAM_PAGE = "page";


+ 11
- 3
smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java View File

@@ -263,11 +263,11 @@ public interface SwEnum {
class DatasetType extends StrEnum {
public static DatasetType instance = new DatasetType();

public static StrEnumBean LIST = instance.addEnum("list", "查询列表");
public static StrEnumBean LIST = instance.addEnum("list", "列表");
public static StrEnumBean FORM = instance.addEnum("form", "表单");
public static StrEnumBean ITEM = instance.addEnum("item", "子表编辑");
// public static StrEnumBean ITEM = instance.addEnum("item", "子表编辑");
public static StrEnumBean TREE = instance.addEnum("tree", "树");
public static StrEnumBean ENUM = instance.addEnum("enum", "枚举");
// public static StrEnumBean ENUM = instance.addEnum("enum", "枚举");
}

/**
@@ -322,6 +322,14 @@ public interface SwEnum {
}
}

/**
* 模型
*/
class ModelType extends StrEnum {
public static ModelType instance = new ModelType();
public static StrEnumBean LC_SINGLE = instance.addEnum("LC_SINGLE", "简单列表(含卡片)");
}

// 权限类型
class MenuRightType extends StrEnum {
public static MenuFuncRight instance = new MenuFuncRight();


+ 107
- 597
smtweb-framework/core/src/main/resources/demo.json View File

@@ -1,602 +1,112 @@
{
"type": "workflow",
"version": 3,
"flows": [
"fields": [
{
"widget": {
"type": "flow-chart",
"props": {
"title": "并行流程测试"
}
},
"graph": {
"cells": [
{
"position": {
"x": 240,
"y": -450
},
"size": {
"width": 60,
"height": 50
},
"attrs": {
"icon": {
"xlink:href": "/src/assets/images/svg/play.svg"
}
},
"shape": "flow-end",
"id": "node173c6e891c8",
"data": {
"id": "node173c6e891c8",
"type": "flow-node-begin",
"props": {
"label": "开始"
}
},
"zIndex": 1
},
{
"position": {
"x": 210,
"y": -305.99999999999966
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"text": {
"text": "任务1"
},
"icon": {
"xlink:href": "/src/assets/images/svg/people.svg"
}
},
"shape": "flow-action",
"id": "node173c6eb453c",
"data": {
"id": "node173c6eb453c",
"type": "flow-node-manual",
"props": {
"label": "任务1",
"users": [
{
"type": "userGroup",
"target": {
"ugId": 21222,
"ugName": "部门经理",
"ugCreateAt": "2020-07-26 10:42:43",
"ugUpdateAt": "2020-07-26 10:42:43"
},
"notNull": true,
"filter": ""
}
],
"fields": [
{
"id": "column-172fda7eb90",
"name": "id",
"label": "ID",
"perm": "read",
"notNull": false
},
{
"id": "col-173284e59df",
"name": "name",
"label": "数据字段",
"perm": "write",
"notNull": false
}
],
"actionReturn": true,
"actionTransmit": true
}
},
"zIndex": 1
},
{
"position": {
"x": 210,
"y": -174.99999999999966
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"icon": {
"xlink:href": "/src/assets/images/svg/add-one.svg"
}
},
"shape": "flow-choice",
"id": "node173c6eb4542",
"data": {
"id": "node173c6eb4542",
"type": "flow-node-split",
"props": {
"label": "任务分支"
}
},
"zIndex": 1
},
{
"position": {
"x": 210,
"y": 104
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"icon": {
"xlink:href": "/src/assets/images/svg/reduce.svg"
}
},
"shape": "flow-choice",
"id": "node173c6eb4545",
"data": {
"id": "node173c6eb4545",
"type": "flow-node-merge",
"props": {
"label": "任务聚合"
}
},
"zIndex": 1
},
{
"position": {
"x": 110,
"y": -29.999999999999716
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"text": {
"text": "任务2-1"
},
"icon": {
"xlink:href": "/src/assets/images/svg/people.svg"
}
},
"shape": "flow-action",
"id": "node173c6eb4547",
"data": {
"id": "node173c6eb4547",
"type": "flow-node-manual",
"props": {
"label": "任务2-1",
"fields": [
{
"id": "column-172fda7eb90",
"name": "id",
"label": "ID",
"perm": "read",
"notNull": false
},
{
"id": "col-173284e59df",
"name": "name",
"label": "数据字段",
"perm": "write",
"notNull": false
}
],
"users": [
{
"type": "userGroup",
"target": {
"ugId": 21222,
"ugName": "部门经理",
"ugCreateAt": "2020-07-26 10:42:43",
"ugUpdateAt": "2020-07-26 10:42:43"
},
"notNull": true,
"filter": ""
}
],
"actionReturn": true,
"actionTransmit": true
}
},
"zIndex": 1
},
{
"position": {
"x": 307,
"y": -29.999999999999716
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"text": {
"text": "任务2-2"
},
"icon": {
"xlink:href": "/src/assets/images/svg/people.svg"
}
},
"shape": "flow-action",
"id": "node173c6eb454c",
"data": {
"id": "node173c6eb454c",
"type": "flow-node-manual",
"props": {
"label": "任务2-2",
"fields": [
{
"id": "column-172fda7eb90",
"name": "id",
"label": "ID",
"perm": "write",
"notNull": false
},
{
"id": "col-173284e59df",
"name": "name",
"label": "数据字段",
"perm": "read",
"notNull": false
}
],
"users": [
{
"type": "userGroup",
"target": {
"ugId": 21222,
"ugName": "部门经理",
"ugCreateAt": "2020-07-26 10:42:43",
"ugUpdateAt": "2020-07-26 10:42:43"
},
"notNull": true,
"filter": ""
}
],
"actionReturn": true,
"actionTransmit": true
}
},
"zIndex": 1
},
{
"position": {
"x": 210,
"y": 230
},
"size": {
"width": 120,
"height": 50
},
"attrs": {
"text": {
"text": "任务3"
},
"icon": {
"xlink:href": "/src/assets/images/svg/people.svg"
}
},
"shape": "flow-action",
"id": "node173c7c0d14e",
"data": {
"id": "node173c7c0d14e",
"type": "flow-node-manual",
"props": {
"label": "任务3",
"users": [
{
"type": "userGroup",
"target": {
"ugId": 21222,
"ugName": "部门经理",
"ugCreateAt": "2020-07-26 10:42:43",
"ugUpdateAt": "2020-07-26 10:42:43"
},
"notNull": true,
"filter": ""
}
],
"actionReturn": true,
"actionTransmit": true
}
},
"zIndex": 1
},
{
"position": {
"x": 240,
"y": 340
},
"size": {
"width": 60,
"height": 50
},
"attrs": {
"icon": {
"xlink:href": "/src/assets/images/svg/stop.svg"
}
},
"shape": "flow-end",
"id": "node173c7dfe36c",
"data": {
"id": "node173c7dfe36c",
"type": "flow-node-end",
"props": {
"label": "结束"
}
},
"zIndex": 1
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4541",
"data": {
"id": "conn173c6eb4541",
"type": "flow-edge",
"props": {
"label": "启动"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6e891c8"
},
"target": {
"cell": "node173c6eb453c"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4544",
"data": {
"id": "conn173c6eb4544",
"type": "flow-edge",
"props": {
"label": "提交"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb453c"
},
"target": {
"cell": "node173c6eb4542"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4551",
"data": {
"id": "conn173c6eb4551",
"type": "flow-edge",
"props": {
"label": "执行"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb4542"
},
"target": {
"cell": "node173c6eb4547"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4553",
"data": {
"id": "conn173c6eb4553",
"type": "flow-edge",
"props": {
"label": "执行2"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb4542"
},
"target": {
"cell": "node173c6eb454c"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c7dfe36b",
"data": {
"id": "conn173c7dfe36b",
"type": "flow-edge",
"props": {
"label": "执行"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb4545"
},
"target": {
"cell": "node173c7c0d14e"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4555",
"data": {
"id": "conn173c6eb4555",
"type": "flow-edge",
"props": {
"label": "提交"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb4547"
},
"target": {
"cell": "node173c6eb4545"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c6eb4554",
"data": {
"id": "conn173c6eb4554",
"type": "flow-edge",
"props": {
"label": "提交"
}
},
"zIndex": 1,
"source": {
"cell": "node173c6eb454c"
},
"target": {
"cell": "node173c6eb4545"
}
},
{
"shape": "edge",
"attrs": {
"line": {
"stroke": "#4D5B62",
"strokeWidth": 1
}
},
"id": "conn173c7dfe36d",
"data": {
"id": "conn173c7dfe36d",
"type": "flow-edge",
"props": {
"label": "提交"
}
},
"zIndex": 1,
"source": {
"cell": "node173c7c0d14e"
},
"target": {
"cell": "node173c7dfe36c"
}
}
]
}
"locked": 1,
"name": "bp_id",
"title": "主键",
"fieldType": 1,
"dataType": "id",
"null": 1,
"default": -1
},
{
"name": "bp_number",
"editor": "num",
"title": "第几届",
"remark": "第几届",
"dataType": "int",
"default": "",
"null": 1
},
{
"name": "bp_name",
"editor": "input",
"title": "届别名称",
"dataType": "name",
"default": "",
"remark": "根据第几届自动生成",
"null": 1
},
{
"name": "bp_start_time",
"editor": "datetime",
"title": "届别开始时间",
"dataType": "datetime",
"default": "0",
"remark": "届别开始时间",
"null": 1
},
{
"name": "bp_end_time",
"editor": "datetime",
"title": "届别结束时间",
"dataType": "datetime",
"default": "0",
"remark": "届别结束时间",
"null": 1
},
{
"name": "bp_create_uid",
"editor": "input",
"title": "创建人",
"fieldType": 7,
"dataType": "id",
"default": "",
"remark": "创建人",
"null": 1
},
{
"name": "bp_create_time",
"editor": "datetime",
"title": "创建时间",
"fieldType": 8,
"dataType": "datetime",
"default": "",
"remark": "创建时间",
"null": 1
},
{
"name": "bp_update_uid",
"editor": "input",
"title": "更新人",
"fieldType": 9,
"dataType": "id",
"default": "",
"remark": "更新人",
"null": 1
},
{
"name": "bp_update_time",
"editor": "datetime",
"title": "更新时间",
"fieldType": 10,
"dataType": "datetime",
"default": "",
"remark": "更新时间",
"null": 1
},
{
"name": "bp_state",
"editor": "combo",
"title": "状态",
"dataType": "bool",
"default": "0",
"remark": "1启用0无效",
"null": 1
}
],
"model": {
"page": "默认表单定义",
"canEditOther": "bool是否允许编辑非本人单据",
"rejectToMake": "bool True-驳回到制单 False-逐级驳回",
"activities": [
{
"id": "唯一标识",
"type": "类别:1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务",
"code": "活动编号,代码可调用",
"label": "活动名称",
"page": "表单定义",
"canEdit": "是否可编辑",
"needSign": "是否需要会签",
"buttons": [
{
"type": "submit",
"label": "提交",
"valid": "是否允许,bool"
},
{
"type": "reject",
"label": "驳回",
"valid": "是否允许,bool"
},
{
"type": "retake",
"label": "取回",
"valid": "是否允许,bool"
},
{
"type": "cancel",
"label": "作废",
"valid": "是否允许,bool"
},
{
"type": "delete",
"label": "删除",
"valid": "是否允许,bool"
}
],
"eidtFields": [
"可编辑的字段"
],
"disableFields": [
"不可查看的字段"
],
"handler": {
"userGroup": "主办人分组",
"filter": "主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门",
"ignore": "主办人过滤:上一步提交人/过滤制单人"
},
"sign": {
"minSign": "最少会签人数",
"minAgree": "最少会签同意人数",
"minAgreeUnit": "最少会签同意人数单位:0-人数 1-会签同意占比",
"userGroup": "会签人分组",
"filter": "会签人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门",
"ignore": "会签人过滤:上一步提交人/过滤制单人"
}
}
],
"trans": [
{
"id": "唯一标识",
"seq": "序号",
"expr": "条件表达式",
"src": "源活动",
"dst": "目标活动",
"desc": "说明"
}
]
}
"indexes": [
{
"locked": 1,
"fields": "bp_id",
"type": "P"
}
],
"caches": [
{
"name": "n",
"fields": "bp_name",
"type": "M"
}
]
}

Loading…
Cancel
Save