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 7a87228..55ed376 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 @@ -7,10 +7,12 @@ import cc.smtweb.framework.core.cache.CacheManager; import cc.smtweb.framework.core.common.SwEnum; import cc.smtweb.framework.core.mvc.variable.SwVariableFactory; import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.CommUtil; import cc.smtweb.framework.core.util.JsonUtil; import cc.smtweb.framework.core.util.MapUtil; import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; import cc.smtweb.system.bpm.web.design.form.define.PageDatasetField; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; import cc.smtweb.system.bpm.web.design.form.define.PageModel; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -29,6 +31,7 @@ import java.util.*; public class ModelFormHelper { /** * 从缓存获取Form对象 + * * @param formId * @return */ @@ -48,7 +51,7 @@ public class ModelFormHelper { if (StringUtils.isEmpty(jsonStr)) return null; PageDataSet[] list = JsonUtil.parse(jsonStr, PageDataSet[].class); Map map = new LinkedHashMap<>(list.length); - for (PageDataSet ds: list) { + for (PageDataSet ds : list) { map.put(ds.name, ds); ds.resetFields(); } @@ -57,6 +60,7 @@ public class ModelFormHelper { /** * 根据json字符串解析对象 + * * @param jsonStr * @return */ @@ -75,34 +79,32 @@ public class ModelFormHelper { * 主要处理内容: * 1、model的一些maxlen、默认值等信息,如果和数据库一致,则去掉 * 2、db中的只保留表、字段和别名 + * * @param form * @return */ public static String buildSaveModel(ModelForm form) { Map mapDataset = parsePageDataset(form.getDataset()); PageModel pageInfo = parsePageInfo(form.getContent()); - for (Map model: pageInfo.model) { - Map props = (Map)model.get("props"); - buildSaveModelFields(mapDataset, pageInfo, props, true); - buildSaveModelFields(mapDataset, pageInfo, props, false); + for (Map model : pageInfo.model) { + + buildSaveModelFields(mapDataset, pageInfo, model, true); + buildSaveModelFields(mapDataset, pageInfo, model, false); } return JsonUtil.encodeString(pageInfo); } //处理model的fields和filters - private static void buildSaveModelFields(Map mapDataset, PageModel pageInfo, Map props, boolean isField) { - String db = (String)props.get("db"); + private static void buildSaveModelFields(Map mapDataset, PageModel pageInfo, Map model, boolean isField) { + String db = (String) model.get("dataset"); //没有配置db,配置有误,不处理 if (StringUtils.isEmpty(db)) throw new SwException("model未配置数据集db,无法解析!"); PageDataSet pds = mapDataset.get(db); - String key = isField ? "fields":"filters"; - List> fields = (List>)props.get(key); + String key = isField ? "fields" : "filters"; + List> fields = (List>) model.get(key); if (fields == null || fields.isEmpty()) return; - for (Map fi: fields) { - Map field = (Map)fi.get("props"); - if (field == null) throw new SwException("model[" + db + "]." + key + "未配置props,无法解析!"); - - String fn = (String)field.get("field"); + 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); if (pdf == null) throw new SwException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!"); @@ -112,7 +114,7 @@ public class ModelFormHelper { field.remove("required"); } - if (MapUtil.readInt(field,"maxlength") == SwEnum.DataType.instance.getByValue(pdf.dataType).dataLength) { + if (MapUtil.readInt(field, "maxlength") == SwEnum.DataType.instance.getByValue(pdf.dataType).dataLength) { field.remove("maxlength"); } } @@ -128,8 +130,10 @@ public class ModelFormHelper { throw new SwException(e); } } + /** * 构建待保存的数据集 + * * @param datasets * @return * @throws JsonProcessingException @@ -137,17 +141,19 @@ public class ModelFormHelper { public static String buildSaveDataset(Collection datasets) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); - FilterProvider filters = new SimpleFilterProvider().addFilter("datasetField", new SimpleBeanPropertyFilter(){ + FilterProvider filters = new SimpleFilterProvider().addFilter("datasetField", new SimpleBeanPropertyFilter() { private final String includes = "name,label,field,table"; + @Override protected boolean include(PropertyWriter writer) { return includes.contains(writer.getName()); } - }).addFilter("datasetFilter", new SimpleBeanPropertyFilter(){ + }).addFilter("datasetFilter", new SimpleBeanPropertyFilter() { private final String includes = ",name,label,field,table,dataType,type,linkDb,linkField,value"; + @Override protected boolean include(PropertyWriter writer) { - return includes.contains(","+ writer.getName()); + return includes.contains("," + writer.getName()); } }); return mapper.writer(filters).writeValueAsString(datasets); @@ -155,38 +161,34 @@ public class ModelFormHelper { /** * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 + * * @param form * @return */ public static String buildReqModel(ModelForm form) { Map mapDataset = parsePageDataset(form.getDataset()); PageModel pageInfo = parsePageInfo(form.getContent()); - for (Map model: pageInfo.model) { - Map props = (Map)model.get("props"); - buildReqModelFields(mapDataset, pageInfo, props, true); - buildReqModelFields(mapDataset, pageInfo, props, false); + for (Map model : pageInfo.model) { + String db = (String) model.get("dataset"); + //没有配置db,配置有误,不处理 + if (StringUtils.isEmpty(db)) continue; + PageDataSet dataSet = mapDataset.get(db); + if (dataSet == null) continue; + buildReqModelFields(dataSet, model, true); + buildReqModelFields(dataSet, model, false); } return JsonUtil.encodeString(pageInfo); } //处理model的fields和filters - private static void buildReqModelFields(Map mapDataset, PageModel pageInfo, Map props, boolean isField) { - String db = (String)props.get("db"); - //没有配置db,配置有误,不处理 - if (StringUtils.isEmpty(db)) return; - PageDataSet pds = mapDataset.get(db); - if (pds == null) return; - - String key = isField ? "fields":"filters"; - List> fields = (List>)props.get(key); + private static void buildReqModelFields(PageDataSet dataSet, Map model, boolean isField) { + String key = isField ? "fields" : "filters"; + List> fields = (List>) model.get(key); if (fields == null || fields.isEmpty()) return; - for (Map fi: fields) { - Map field = (Map)fi.get("props"); - if (field == null) continue; - - String fn = (String)field.get("field"); + for (Map field : fields) { + String fn = (String) field.get("field"); if (StringUtils.isEmpty(fn)) continue; - PageDatasetField pdf = isField ? pds.getField(fn) : pds.getFilter(fn); + PageDatasetField pdf = isField ? dataSet.getField(fn) : dataSet.getFilter(fn); if (pdf == null) continue; //必填字段 @@ -202,6 +204,7 @@ public class ModelFormHelper { /** * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 + * * @param form * @return */ @@ -217,9 +220,8 @@ public class ModelFormHelper { List listModel = new ArrayList<>(); ret.put("model", listModel); //构建Model - for (Map model: pageInfo.model) { - Map props = (Map)model.get("props"); - String db = (String)props.get("db"); + for (Map model : pageInfo.model) { + String db = (String) model.get("dataset"); PageDataSet dataSet = mapDataset.get(db); if (dataSet == null) throw new SwException("未找到指定的数据集定义!" + db); @@ -240,37 +242,13 @@ public class ModelFormHelper { ret.put("lazy", dataSet.lazy); ret.put("canEdit", dataSet.canEdit); - ret.put("fields", buildEngineFields(dataSet, (List>)model.get("fields"), true)); - ret.put("filters", buildEngineFields(dataSet, (List>)model.get("filters"), false)); - - return ret; - } - - //构建fields和filters数组 - private static List buildEngineFields(PageDataSet dataSet, List> fields, boolean isField) { - List listRet = new ArrayList<>(); - for (Map field: fields) { - SwMap fr = new SwMap(); - fr.put("id", field.get("id")); - Map props = (Map)field.get("props"); - if (props == null) continue; - fr.putAll(props); - - String fn = (String)fr.get("field"); - if (StringUtils.isEmpty(fn)) continue; - PageDatasetField pdf = isField ? dataSet.getField(fn) : dataSet.getFilter(fn); - if (pdf == null) continue; + ret.put("fields", model.get("fields")); + ret.put("filters", model.get("filters")); - //必填字段 - if (!fr.containsKey("required")) { - fr.put("required", pdf.isNotNull()); - } + buildReqModelFields(dataSet, model, true); + buildReqModelFields(dataSet, model, false); - if (!fr.containsKey("maxlength")) { - fr.put("maxlength", SwEnum.DataType.instance.getByValue(pdf.dataType).dataLength); - } - } - return listRet; + return ret; } //根据option构建Extra部分 @@ -281,8 +259,8 @@ public class ModelFormHelper { SwMap widget = new SwMap(); map.put("widget", widget); - long[] widgetIds = (long[])option.get("widgetRef"); - for (long id: widgetIds) { + long[] widgetIds = (long[]) option.get("widgetRef"); + for (long id : widgetIds) { ModelForm widgetForm = getFromCache(id); if (widgetForm == null) throw new SwException("没有找到指定的控件定义!id=" + id); SwMap widgetOpts = parseFormOption(widgetForm.getOption()); @@ -293,10 +271,29 @@ public class ModelFormHelper { //构建变量 SwMap mapVar = new SwMap(); map.put("var", mapVar); - String[] vars = (String[])option.get("vars"); - for (String var: vars) { + String[] vars = (String[]) option.get("vars"); + for (String var : vars) { mapVar.put(var, SwVariableFactory.getInstance().calcVar(var, params, us)); } return map; } + + //获取控件的filter信息 + public static List buildWidgetFilter(ModelForm bean) { + List listRet = new ArrayList<>(); + Map map = ModelFormHelper.parsePageDataset(bean.getDataset()); + if (map == null) return listRet; + for (PageDataSet ds: map.values()) { + for (PageDatasetFilter filter: ds.filters) { + if (SwEnum.FilterType.INPUT.value.equals(filter.type) || SwEnum.FilterType.PARAM.value.equals(filter.type)) { + SwMap fret = new SwMap(); + fret.put("name", filter.name); + fret.put("label", filter.label); + listRet.add(fret); + } + } + } + listRet.sort((o1, o2) -> CommUtil.chineseCompare(o1.readString("label"), o2.readString("label"))); + return listRet; + } } 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 772fc1a..456d691 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 @@ -29,7 +29,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler { public R loadDataset() { long id = params.readLong("id"); ModelForm bean = super.loadComp(id); - if (bean == null) throw new SwException("没有找到指定数据集定义!id=" + id); + if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id); Map map = ModelFormHelper.parsePageDataset(bean.getDataset()); if (map == null) return R.success(""); return R.success(JsonUtil.encodeString(map.values())); @@ -39,7 +39,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler { public R loadModel() { long id = params.readLong("id"); ModelForm bean = super.loadComp(id); - if (bean == null) throw new SwException("没有找到指定数据集定义!id=" + id); + if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id); return R.success(ModelFormHelper.buildReqModel(bean)); } @@ -47,7 +47,15 @@ public class ModelFormLoadHandler extends DefaultLoadHandler { public R loadForm() { long id = params.readLong("id"); ModelForm bean = super.loadComp(id); - if (bean == null) throw new SwException("没有找到指定数据集定义!id=" + id); + if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id); return R.success(ModelFormHelper.buildEngineModel(bean, params, us)); } + + //获取页面使用的控件的filter信息 + public R loadWidgetFilter() { + long id = params.readLong("id"); + ModelForm bean = super.loadComp(id); + if (bean == null) throw new SwException("没有找到指定控件定义!id=" + id); + return R.success(ModelFormHelper.buildWidgetFilter(bean)); + } } diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java index 6c36126..414ed09 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java @@ -77,4 +77,14 @@ public class ModelFormService extends AbstractCompService { return R.error("操作失败!", e); } } + + //获取页面使用的控件的filter信息 + public R loadWidgetFilter(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadWidgetFilter(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } }