From 3bd471a256f2cb294d6e6ce166be9e286abef6be Mon Sep 17 00:00:00 2001 From: zhenggm Date: Thu, 9 Jun 2022 16:05:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/bpm/web/design/form/ModelForm.java | 66 +++++++++++++++++++++ .../system/bpm/web/design/form/ModelFormCache.java | 13 ++++ .../bpm/web/design/form/ModelFormHelper.java | 69 ++++++++++++++-------- .../bpm/web/design/form/ModelFormLoadHandler.java | 4 +- .../bpm/web/design/form/ModelFormSaveHandler.java | 7 +-- .../bpm/web/design/form/define/PageDataset.java | 45 +++++++++----- .../web/design/form/define/PageDatasetField.java | 1 - .../bpm/web/design/form/define/PageDatasets.java | 11 ++++ .../web/engine/dynPage/AbstractDynPageHandler.java | 8 ++- .../bpm/web/engine/dynPage/DynPageHelper.java | 2 +- .../static/template/incModel/inc_dataset.ftl | 22 ------- .../static/template/incModel/inc_filter.ftl | 6 +- .../static/template/incModel/inc_form.ftl | 6 +- .../static/template/incModel/inc_grid_opt.ftl | 2 +- .../static/template/incModel/inc_model.ftl | 28 +++++++++ .../resources/static/template/model_simple.ftl | 3 +- .../cc/smtweb/system/bpm/test/ModelFormTest.java | 30 +--------- 17 files changed, 216 insertions(+), 107 deletions(-) delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl create mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java index 000f082..8c6f51d 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java @@ -1,7 +1,10 @@ package cc.smtweb.system.bpm.web.design.form; import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; +import cc.smtweb.system.bpm.web.design.form.define.PageModel; /** * Created by Akmm at 2022/4/15 17:26 @@ -9,6 +12,66 @@ import cc.smtweb.framework.core.db.impl.DefaultEntity; @SwTable("ASP_MODEL_FORM") public class ModelForm extends DefaultEntity { public static final String ENTITY_NAME = "ASP_MODEL_FORM"; + //将相关信息缓存起来 + private transient long masterTableId = -1; + private transient PageDatasets datasets; + private transient SwMap opts; + + public void clearEx() { + masterTableId = -1L; + datasets = null; + opts = null; + } + + public long getMasterTableId() { + if (masterTableId < 0) { + synchronized (ModelForm.class) { + if (masterTableId < 0) { + datasets = ModelFormHelper.parsePageDataset(getDataset()); + if (datasets == null) { + masterTableId = 0; + } else { + masterTableId = datasets.findMasterTableId(); + } + } + } + } + return masterTableId; + } + + public void setMasterTableId(long masterTableId) { + this.masterTableId = masterTableId; + } + + public PageDatasets getDatasets() { + if (datasets == null) { + synchronized (ModelForm.class) { + if (datasets == null) { + datasets = ModelFormHelper.parsePageDataset(getDataset()); + } + } + } + return datasets; + } + + public void setDatasets(PageDatasets datasets) { + this.datasets = datasets; + } + + public SwMap getOpts() { + if (opts == null) { + synchronized (ModelForm.class) { + if (opts == null) { + opts = ModelFormHelper.parseFormOption(getOption()); + } + } + } + return opts; + } + + public void setOpts(SwMap opts) { + this.opts = opts; + } public ModelForm() { super(ENTITY_NAME); @@ -84,6 +147,7 @@ public class ModelForm extends DefaultEntity { public void setOption(String mf_option) { put("mf_option", mf_option); + opts = null; } public String getTmpl() { @@ -100,6 +164,8 @@ public class ModelForm extends DefaultEntity { public void setDataset(String mf_dataset) { put("mf_dataset", mf_dataset); + datasets = null; + masterTableId = 0L; } public long getCreateUid() { diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java index f054778..94d0e12 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java @@ -3,6 +3,7 @@ package cc.smtweb.system.bpm.web.design.form; import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.EntityDao; @@ -19,6 +20,7 @@ public class ModelFormCache extends AbstractCache { private final static String mk = "k"; private final static String mp = "prj"; private final static String mc = "c"; + private final static String mt = "t"; public static ModelFormCache getInstance() { return CacheManager.getIntance().getCache(ModelFormCache.class); @@ -28,6 +30,7 @@ public class ModelFormCache extends AbstractCache { regMap(mk, k-> k.getName().toUpperCase()); regList(mp, k-> String.valueOf(k.getPrjId())); regList(mc, k-> String.valueOf(k.getMcId())); + regList(mt, k-> k.getMasterTableId() + SwConsts.SPLIT_CHAR + k.getType()); // regList(mf, k-> k.get); } @@ -69,4 +72,14 @@ public class ModelFormCache extends AbstractCache { list.sort(comparator); return list; } + + //根据表id,找对应的页面设计 + public Set getListByTable(long tableId, int type) { + return getListByKey(mt, tableId + SwConsts.SPLIT_CHAR + type); + } + + public String getText(long id) { + ModelForm form = get(id); + return form != null ? form.getTitle() : String.valueOf(id); + } } diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java index 54b0ed7..d41761c 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java @@ -46,11 +46,11 @@ public class ModelFormHelper { return cache.get(formId); } - public static PageDatasets parsePageDataset(long formId) { + /*public static PageDatasets parsePageDataset(long formId) { ModelForm form = getFromCache(formId); if (form == null) return null; return parsePageDataset(form.getDataset()); - } + }*/ public static PageDatasets parsePageDataset(String jsonStr) { if (StringUtils.isEmpty(jsonStr)) return null; @@ -83,9 +83,9 @@ public class ModelFormHelper { * @param form * @return */ - public static String buildSaveModel(ModelForm form) { - PageDatasets datasets = parsePageDataset(form.getDataset()); - PageModel pageInfo = parsePageInfo(form.getContent()); + public static String buildSaveModel(ModelForm form, String jsonStr) { + PageDatasets datasets = form.getDatasets(); + PageModel pageInfo = parsePageInfo(jsonStr); if (pageInfo == null) return ""; for (Map model : pageInfo.model) { buildSaveModelFields(datasets, pageInfo, model, true); @@ -106,7 +106,7 @@ public class ModelFormHelper { for (Map field : fields) { String fn = (String) field.get("field"); if (StringUtils.isEmpty(fn)) throw new SwException("model[" + db + "]." + key + "未配置字段名field,无法解析!"); - PageDatasetField pdf = isField ? pds.getField(fn) : pds.getFilter(fn); + PageDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn); if (pdf == null) throw new SwException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!"); if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) { @@ -171,8 +171,7 @@ public class ModelFormHelper { * @return * @throws JsonProcessingException */ - public static String buildReqDataset(String jsonStr) { - PageDatasets datasets = parsePageDataset(jsonStr); + public static String buildReqDataset(PageDatasets datasets) { if (datasets == null || datasets.list == null) return ""; return JsonUtil.encodeString(datasets.list); } @@ -185,7 +184,7 @@ public class ModelFormHelper { * @return */ public static String buildReqModel(ModelForm form) { - PageDatasets datasets = parsePageDataset(form.getDataset()); + PageDatasets datasets = form.getDatasets(); PageModel pageInfo = parsePageInfo(form.getContent()); if (pageInfo == null) return ""; for (Map model : pageInfo.model) { @@ -208,7 +207,7 @@ public class ModelFormHelper { for (Map field : fields) { String fn = (String) field.get("field"); if (StringUtils.isEmpty(fn)) continue; - PageDatasetField pdf = isField ? dataSet.getField(fn) : dataSet.getFilter(fn); + PageDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn); if (pdf == null) continue; if (!field.containsKey("label")) { field.put("label", pdf.label); @@ -245,7 +244,7 @@ public class ModelFormHelper { } public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) { - PageDatasets datasets = parsePageDataset(form.getDataset()); + PageDatasets datasets = form.getDatasets(); if (datasets == null || datasets.list == null) return ""; SwMap ret = new SwMap(); @@ -317,7 +316,7 @@ public class ModelFormHelper { if (widgetForm == null) throw new SwException("没有找到指定的控件定义!id=" + id); SwMap w = new SwMap(); widget.put("w" + id, w); - SwMap widgetOpts = parseFormOption(widgetForm.getOption()); + SwMap widgetOpts = widgetForm.getOpts(); w.put("service", widgetForm.getService()); if (widgetOpts != null) w.putAll(widgetOpts); w.put("define", buildEngineModel(widgetForm, params, us, false)); @@ -335,7 +334,7 @@ public class ModelFormHelper { //获取控件的filter信息 public static List buildWidgetFilter(ModelForm bean) { List listRet = new ArrayList<>(); - PageDatasets datasets = ModelFormHelper.parsePageDataset(bean.getDataset()); + PageDatasets datasets = bean.getDatasets(); if (datasets == null || datasets.list == null) return listRet; for (PageDataset ds : datasets.list) { for (PageDatasetFilter filter : ds.filters) { @@ -372,13 +371,13 @@ public class ModelFormHelper { * @param tmplId */ public static void buildSaveModelByTmpl(ModelForm form, String tmplId) { - PageDatasets datasets = parsePageDataset(form.getDataset()); + PageDatasets datasets = form.getDatasets(); SwMap tmplModel = JsonUtil.parse(form.getTmpl(), SwMap.class); tmplModel.put("title", form.getTitle()); - tmplModel.put("datasets", parsePageDataset(form.getDataset())); + tmplModel.put("datasets", form.getDatasets()); SwMap layout = tmplModel.readMap("layout"); //用到的自定义控件 - Set setWidget = new HashSet<>(); + Set setWidget = new HashSet<>(); for (String key : layout.keySet()) { List> groups = layout.readListMap(key); for (Map group : groups) { @@ -397,17 +396,18 @@ public class ModelFormHelper { } String widgetRef = ""; if (!setWidget.isEmpty()) { - for (String s: setWidget) { + for (long s: setWidget) { widgetRef += ",\"" + s + "\""; } widgetRef = widgetRef.substring(1); } tmplModel.put("widgetRef", widgetRef); - form.setContent(CodeGenerator.getInstance().generate(tmplModel, tmplId)); + final String model = CodeGenerator.getInstance().generate(tmplModel, tmplId); + form.setContent(model); // form.setContent(buildSaveModel(form)); } - private static void buildTmplFields(List> fields, PageDatasets datasets, Set setWidget, boolean isField) { + private static void buildTmplFields(List> fields, PageDatasets datasets, Set setWidget, boolean isField) { if (fields == null) return; PageDataset dataset = null; for (Map field : fields) { @@ -419,18 +419,33 @@ public class ModelFormHelper { String fn = MapUtil.readString(field, "field"); PageDatasetField pdf; if (!isField) { - pdf = dataset.getFilter(fn); + pdf = dataset.findFilterById(fn); } else { - pdf = dataset.getField(fn); - if (pdf == null) pdf = dataset.getFilter(fn); + pdf = dataset.findFieldById(fn); + if (pdf == null) pdf = dataset.findFilterByName(fn); } if (pdf == null) throw new SwException("model[" + dsId + "]未找到定义的数据集字段(" + fn + "),无法解析!"); + field.put("id", pdf.id); + field.put("field", pdf.field); + field.put("name", pdf.name); field.put("label", pdf.label); field.put("required", pdf.isFieldNotNull()); + field.put("widget", 0); final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); if (dtb != null) { - if (dtb.dataLength > 0) field.put("maxlength", dtb.dataLength); + field.put("maxlength", dtb.dataLength); field.put("editor", dtb.editor); + if (pdf.link > 0) { + long widget = getFieldCtrl(pdf.link); + if (widget > 0) { + setWidget.add(widget); + field.put("widget", widget); + field.put("widgetText", ModelFormCache.getInstance().getText(widget)); + } + } + } else { + field.put("maxlength", 0); + field.put("editor", SwEnum.EditorType.INPUT.value); } } } @@ -439,10 +454,12 @@ public class ModelFormHelper { * 计算字段适用控件 * * @param tableId - * @param fieldName * @return */ - public String getFieldCtrl(long tableId, String fieldName) { - return null; + public static long getFieldCtrl(long tableId) { + Set set = ModelFormCache.getInstance().getListByTable(tableId, SwEnum.FormType.WIDGET.value); + if (set == null || set.isEmpty()) return 0L; + ModelForm form = set.iterator().next(); + return (form != null) ? form.getEntityId() : 0L; } } diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java index 193e065..2de7e30 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java @@ -17,7 +17,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler { @Override protected ModelForm loadComp(long id) { ModelForm bean = super.loadComp(id); - SwMap opts = ModelFormHelper.parseFormOption(bean.getOption()); + SwMap opts = bean.getOpts(); if (opts != null) { ModelFormHelper.buildOptsEx(bean, opts); bean.setOption(JsonUtil.encodeString(opts)); @@ -33,7 +33,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler { long id = params.readLong("id"); ModelForm bean = super.loadComp(id); if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id); - return R.success(ModelFormHelper.buildReqDataset(bean.getDataset())); + return R.success(ModelFormHelper.buildReqDataset(bean.getDatasets())); } //页面设计 - 加载页面model定义 diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java index 195889c..90fae17 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java @@ -25,7 +25,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler { @Override protected void updateBean(EntityDao dao) { - SwMap opts = ModelFormHelper.parseFormOption(bean.getOption()); + SwMap opts = bean.getOpts(); if (opts != null) { opts.remove(ModelFormHelper.KEY_EVENT_PATH); bean.setOption(JsonUtil.encodeString(opts)); @@ -73,8 +73,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler { if (StringUtils.isEmpty(data)) { throw new SwException("没有待保存的数据!"); } - bean.setContent(data); - bean.setContent(ModelFormHelper.buildSaveModel(bean)); + bean.setContent(ModelFormHelper.buildSaveModel(bean, data)); DbEngine.getInstance().doTrans(new AbsDbWorker() { @Override public void work() { @@ -117,7 +116,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler { ModelTable table = ModelTableCache.getInstance().getByName(tableName); ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); if (field != null) bean.put(field.getName(), us.getUserId()); - dao.updateEntity(bean, "mf_content", "mf_tmpl"); + dao.updateEntity(bean, "mf_content,mf_tmpl"); } @Override diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java index 99c7b6a..f4752f9 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java @@ -44,27 +44,43 @@ public class PageDataset { public PageDatasetDynCond dynCond; public List sortFields; - private Map mapField; - private Map mapFilter; + //按字段名的缓存 + private Map mapFieldName; + private Map mapFilterName; + //按字段Id的缓存 + private Map mapFieldId; + private Map mapFilterId; - public PageDatasetField getField(String name) { - if (mapField == null) resetFields(); - return mapField.get(name); + public PageDatasetField findFieldByName(String name) { + if (mapFieldName == null) resetFields(); + return mapFieldName.get(name); } - public PageDatasetFilter getFilter(String name) { - if (mapFilter == null) resetFields(); - return mapFilter.get(name); + public PageDatasetFilter findFilterByName(String name) { + if (mapFilterName == null) resetFields(); + return mapFilterName.get(name); + } + + public PageDatasetField findFieldById(String id) { + if (mapFieldId == null) resetFields(); + return mapFieldId.get(id); + } + + public PageDatasetFilter findFilterById(String id) { + if (mapFilterId == null) resetFields(); + return mapFilterId.get(id); } /** * 重置丰富字段信息 */ public void resetFields() { - mapField = new HashMap<>(); - resetFields(mapField, fields); - mapFilter = new HashMap<>(); - resetFields(mapFilter, filters); + mapFieldName = new HashMap<>(); + mapFieldId = new HashMap<>(); + resetFields(mapFieldName, mapFieldId, fields); + mapFilterName = new HashMap<>(); + mapFilterId = new HashMap<>(); + resetFields(mapFilterName, mapFilterId, filters); for (PageDatasetFilter filter: filters) { if (StringUtils.isEmpty(filter.sqlName)) { filter.sqlName = filter.field; @@ -72,11 +88,12 @@ public class PageDataset { } } - private void resetFields(Map map, List list) { + private void resetFields(Map mapName, Map mapId, List list) { ModelTableCache cache = ModelTableCache.getInstance(); ModelTable table = null; for (T field: list) { - map.put(field.name, field); + mapName.put(field.name, field); + mapId.put(field.id, field); if (field.table <= 0 || StringUtils.isEmpty(field.field)) continue; if (table == null || table.getId() != field.table) { table = cache.get(field.table); diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java index b4276e6..6faa2f3 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java @@ -33,7 +33,6 @@ public class PageDatasetField { public long link; //控件类型:TEXT/TextArea/NUMBER/COMBO public String editor; - public String editModel; @JsonIgnore public boolean isFieldNotNull() { diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java index b7f51f7..9c7392d 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java @@ -34,6 +34,17 @@ public class PageDatasets { } } + public PageDataset findMasterDataset() { + if (list == null || list.isEmpty()) return null; + return this.list.get(0); + } + + public long findMasterTableId() { + PageDataset ds = findMasterDataset(); + if (ds == null) return 0L; + return ds.masterTable; + } + public PageDataset findById(String id) { return mapId.get(id); } diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java index c55a185..a3bcae7 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java @@ -4,6 +4,7 @@ import cc.smtweb.framework.core.common.SwException; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.mvc.service.AbstractHandler; import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.design.form.ModelForm; import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; import cc.smtweb.system.bpm.web.design.form.define.PageDataset; import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; @@ -22,8 +23,9 @@ public abstract class AbstractDynPageHandler extends AbstractHandler { public void init(SwMap params, UserSession us) { super.init(params, us); pageId = params.readLong("pageId"); - - datasets = ModelFormHelper.parsePageDataset(pageId); + ModelForm form = ModelFormHelper.getFromCache(pageId); + if (form == null) throw new SwException("没有找到页面定义数据!"); + datasets = form.getDatasets(); if (datasets == null || datasets.list == null) throw new SwException("没有找到页面定义数据!"); provider.pageId = pageId; @@ -36,7 +38,7 @@ public abstract class AbstractDynPageHandler extends AbstractHandler { //获取第一个,主数据集 protected PageDataset findMasterDataset() { - return datasets.list.get(0); + return datasets.findMasterDataset(); } //从参数读取数据集定义 diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java index 08e00e0..b2472f2 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java @@ -180,7 +180,7 @@ public class DynPageHelper { boolean isNameSelf = setFixedFilter.contains(dynCond.param); setFixedFilter.remove(dynCond.param); - PageDatasetFilter filter = dataSet.getFilter(dynCond.param); + PageDatasetFilter filter = dataSet.findFilterByName(dynCond.param); if (filter == null) throw new SwException("没有找到filter(" + dynCond.param + ")!"); Object value = null; diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl deleted file mode 100644 index d1e84cc..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl +++ /dev/null @@ -1,22 +0,0 @@ -{ - "dataset": "${dataset.id}", - "label": "${dataset.label}", - "fields": [ - <#list fields as field> - { - "id": "${field.id}", - "field": "${field.field}" - }, - - ], - "filters": [ - <#list filters as field> - { - "id": "${field.id}", - "field": "${field.field}" - "required": ${field.required}, - "type": "input" - }, - - ] - }, \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl index 9dda2bb..954beea 100644 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl +++ b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl @@ -17,15 +17,17 @@ "props": { "label": "${filter.label}", "type": "text", + <#if filter.maxlength gt 0> "maxlength": ${filter.maxlength}, + "placeholder": "请输入查询内容", "labelWidth": 100, "dataset": "${filter.dataset}", - "field": "${filter.field}", + "field": "${filter.id}", "name": "${filter.name}" }, "events": {} - }, + }<#if filter_has_next>, { "id": "id${newId()}", diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl index 811170b..f7f92d8 100644 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl +++ b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl @@ -17,15 +17,17 @@ "props": { "label": "${field.label}", "type": "text", + <#if field.maxlength gt 0> "maxlength": ${field.maxlength}, + "placeholder": "请输入内容", "labelWidth": 100, "dataset": "${field.dataset}", - "field": "${field.field}", + "field": "${field.id}", "name": "${field.name}" }, "events": {} - }, + }<#if field_has_next>, ] } \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl index 491933f..1c96fa5 100644 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl +++ b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl @@ -32,7 +32,7 @@ "field": "${col.field}", "label": "${col.label}" } - }, + }<#if col_has_next>, ], "button": [ diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl new file mode 100644 index 0000000..2d2546c --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl @@ -0,0 +1,28 @@ +{ + "dataset": "${dataset.id}", + "label": "${dataset.label}", + "fields": [ + <#list fields as field> + { + "id": "${field.id}", + "field": "${field.field}"<#if field.widget gt 0>, + "lookup": { + "widgetId": "${field.widget}", + "widgetId_text": "${field.widgetText}", + "filters": [] + } + + }<#if field_has_next>, + + ], + "filters": [ + <#list filters as field> + { + "id": "${field.field}", + "field": "${field.field}", + "required": ${field.required}, + "type": "input" + }<#if field_has_next>, + + ] + } \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl index 248f523..7973c99 100644 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl +++ b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl @@ -27,6 +27,7 @@ <#elseif (group.type == "card")> <#include "incModel/inc_form.ftl"/> + <#if group_has_next>, ] } @@ -34,7 +35,7 @@ ], "model": [ <#list datasets as dataset> - <#include "incModel/inc_dataset.ftl"/> + <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, ], "option": { diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java index 5c1c24d..cac319b 100644 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java +++ b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java @@ -67,34 +67,8 @@ public class ModelFormTest { public void testBuildModelByTmpl() { ModelForm form = new ModelForm(); form.setTitle("测试呀"); - form.setDataset("[{\"id\":\"ds_1813718bf0c\",\"name\":\"master\",\"label\":\"机构列表\",\"type\":\"list\",\"masterTable\":\"718391823709507584\",\"masterTable_text\":\"机构表\",\"idField\":\"pt_id\",\"lazy\":false,\"canEdit\":false,\"fields\":[{\"id\":\"id_1813718bf0e\",\"table\":\"718391823709507584\",\"field\":\"pt_id\",\"name\":\"pt_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf0f\",\"table\":\"718391823709507584\",\"field\":\"pt_parent_id\",\"name\":\"pt_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf10\",\"table\":\"718391823709507584\",\"field\":\"pt_level_code\",\"name\":\"pt_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf11\",\"table\":\"718391823709507584\",\"field\":\"pt_area_id\",\"name\":\"pt_area_id\",\"fieldType\":0,\"notNull\":0,\"link\":\"718410950209703936\"},{\"id\":\"id_1813718bf12\",\"table\":\"718391823709507584\",\"field\":\"pt_code\",\"name\":\"pt_code\",\"fieldType\":2,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf13\",\"table\":\"718391823709507584\",\"field\":\"pt_name\",\"name\":\"pt_name\",\"fieldType\":3,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf14\",\"table\":\"718391823709507584\",\"field\":\"pt_type\",\"name\":\"pt_type\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf15\",\"table\":\"718391823709507584\",\"field\":\"pt_statu\",\"name\":\"pt_statu\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf16\",\"table\":\"718391823709507584\",\"field\":\"pt_linker\",\"name\":\"pt_linker\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf17\",\"table\":\"718391823709507584\",\"field\":\"pt_tel\",\"name\":\"pt_tel\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf18\",\"table\":\"718391823709507584\",\"field\":\"pt_addr\",\"name\":\"pt_addr\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf19\",\"table\":\"718391823709507584\",\"field\":\"pt_lon\",\"name\":\"pt_lon\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf1a\",\"table\":\"718391823709507584\",\"field\":\"pt_lat\",\"name\":\"pt_lat\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf1b\",\"table\":\"718391823709507584\",\"field\":\"pt_remark\",\"name\":\"pt_remark\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"}],\"filters\":[{\"id\":\"id_1813718bf21\",\"table\":\"718391823709507584\",\"field\":\"pt_name\",\"name\":\"pt_code\",\"fieldType\":3,\"notNull\":1,\"link\":\"0\",\"type\":\"input\",\"sqlName\":\"pt_name\",\"required\":false}],\"data\":[],\"dynCond\":{\"opt\":\"or\",\"children\":[{\"param\":\"pt_code\",\"opt\":\"like\"},{\"param\":\"pt_code\",\"opt\":\"like\"}]},\"sortFields\":[{\"field\":\"pt_code\",\"type\":\"asc\"}]}]"); - form.setTmpl("{\n" + - " \"param\": {\n" + - " \"p1\": \"pp1\"\n" + - " },\n" + - " \"layout\": {\n" + - " \"c1\": [\n" + - " {\n" + - " \"name\": \"group2\",\n" + - " \"label\": \"分组2\",\n" + - " \"type\": \"list\",\n" + - " \"dataset\": \"ds_1813718bf0c\",\n" + - " \"fields\": [\n" + - " {\n" + - " \"field\": \"pt_parent_id\",\n" + - " \"dataset\": \"ds_1813718bf0c\"\n" + - " }\n" + - " ],\n" + - " \"cfilters\": [\n" + - " {\n" + - " \"field\": \"pt_code\",\n" + - " \"dataset\": \"ds_1813718bf0c\"\n" + - " }\n" + - " ]\n" + - " }\n" + - " ]\n" + - " }\n" + - " }"); + form.setDataset("[{\"id\":\"ds_18147381016\",\"name\":\"master\",\"label\":\"主数据集\",\"type\":\"form\",\"masterTable\":\"2\",\"masterTable_text\":\"目录\",\"idField\":\"mc_id\",\"lazy\":false,\"canEdit\":true,\"fields\":[{\"id\":\"id_1814738101b\",\"table\":\"2\",\"field\":\"mc_id\",\"name\":\"mc_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1814738101c\",\"table\":\"2\",\"field\":\"mc_parent_id\",\"name\":\"mc_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"2\"},{\"id\":\"id_1814738101d\",\"table\":\"2\",\"field\":\"mc_level_code\",\"name\":\"mc_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1814738101e\",\"table\":\"2\",\"field\":\"mc_prj_id\",\"name\":\"mc_prj_id\",\"fieldType\":0,\"notNull\":1,\"link\":\"1\"},{\"id\":\"id_1814738101f\",\"table\":\"2\",\"field\":\"mc_code\",\"name\":\"mc_code\",\"fieldType\":2,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_18147381020\",\"table\":\"2\",\"field\":\"mc_name\",\"name\":\"mc_name\",\"fieldType\":3,\"notNull\":0,\"link\":\"0\"}],\"filters\":[],\"data\":[],\"dynCond\":{\"opt\":\"and\"},\"sortFields\":[]}]"); + form.setTmpl("{\"param\":{},\"layout\":{\"c1\":[{\"id\":\"id18147381019\",\"name\":\"group1\",\"label\":\"分组1\",\"type\":\"card\",\"fields\":[{\"field\":\"id_1814738101c\",\"field_text\":\"mc_parent_id\",\"field_label\":\"父ID\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101d\",\"field_text\":\"mc_level_code\",\"field_label\":\"级次码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101e\",\"field_text\":\"mc_prj_id\",\"field_label\":\"所属项目\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101f\",\"field_text\":\"mc_code\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_18147381020\",\"field_text\":\"mc_name\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"}],\"sfilters\":[],\"cfilters\":[]}]}}"); ModelFormHelper.buildSaveModelByTmpl(form, "model_simple"); System.out.println(form.getContent()); }