diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java index 86130c3..5f68902 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java @@ -2,6 +2,7 @@ package cc.smtweb.system.bpm.web.engine.dynPage; import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.db.vo.ModelField; import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.DbEngine; @@ -9,6 +10,7 @@ import cc.smtweb.framework.core.db.EntityDao; import cc.smtweb.framework.core.db.cache.ModelTableCache; import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.SwException; import cc.smtweb.framework.core.mvc.service.SqlNamedPara; import cc.smtweb.framework.core.util.MapUtil; import cc.smtweb.framework.core.util.NumberUtil; @@ -48,10 +50,13 @@ public class DynPageHelper { * @return */ public static SqlNamedPara buildSelectSql(PageDataset dataSet, Map params) { - StringBuilder sql = new StringBuilder(512); - SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); + buildSelectSql(dataSet, params, sqlNamedPara); + return sqlNamedPara; + } + public static void buildSelectSql(PageDataset dataSet, Map params, SqlNamedPara sqlNamedPara) { + StringBuilder sql = new StringBuilder(512); sql.append(buildSelFieldsSql(dataSet, sqlNamedPara)); if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { sql.append(" where ").append(sqlNamedPara.sql); @@ -68,11 +73,64 @@ public class DynPageHelper { sqlNamedPara.sql = sql.toString(); sqlNamedPara.page = MapUtil.readInt(params, SwConsts.PARAM_PAGE); sqlNamedPara.rows = MapUtil.readInt(params, SwConsts.PARAM_ROWS); + } + + //构建树型查询语句,插入parent_id=? + public static SqlNamedPara buildTreeSelectSql(PageDataset dataSet, SwMap params) { + ModelTable table = ModelTableCache.getInstance().get(dataSet.masterTable); + if (table == null) throw new SwException("没有找到指定的表:" + dataSet.masterTable); + SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); + if (table.getType() == SwEnum.TableType.TYPE_TREE.value) {//是树型结构,才做处理 + long parentId = params.readLong("parent_id"); + ModelField field = table.findFieldByType(SwEnum.FieldType.PARENT_ID.value); + if (field == null) throw new SwException("树型表(" + table.getName() + ")未定义上级id字段!"); + + if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { + sqlNamedPara.sql = field.getName() + "=:parent_id and (" + sqlNamedPara.sql + ")"; + } else { + sqlNamedPara.sql = field.getName() + "=:parent_id "; + } + sqlNamedPara.addParas("parent_id", parentId); + } + + buildSelectSql(dataSet, params, sqlNamedPara); + return sqlNamedPara; + } + + //构建过滤查询语句 + public static SqlNamedPara buildFilterSelectSql(PageDataset dataSet, SwMap params, String text) { + ModelTable table = ModelTableCache.getInstance().get(dataSet.masterTable); + if (table == null) throw new SwException("没有找到指定的表:" + dataSet.masterTable); + SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); + if (StringUtils.isNotEmpty(text)) {//有文本信息 + StringBuilder sql = new StringBuilder(128); + ModelField field = table.findFieldByType(SwEnum.FieldType.CODE.value); + if (field != null) { + sql.append(" or ").append(field.getName()).append(" like :q_txt"); + } + + field = table.findFieldByType(SwEnum.FieldType.NAME.value); + if (field != null) { + sql.append(" or ").append(field.getName()).append(" like :q_txt"); + } + + if (sql.length() > 0) { + if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { + sqlNamedPara.sql = "(" + sqlNamedPara.sql + ") and (" + sql.substring(4) + ")"; + } else { + sqlNamedPara.sql = sql.substring(4); + } + sqlNamedPara.addParas("q_txt", text); + } + } + + buildSelectSql(dataSet, params, sqlNamedPara); return sqlNamedPara; } /** * 构建合计栏sql + * * @param dataSet * @param params * @return @@ -208,12 +266,13 @@ public class DynPageHelper { /** * 处理计算字段 + * * @param data * @param dataset */ public static void setCalcFields(SwMap data, PageDataset dataset) { if (!dataset.hasCalcField()) return; - for (PageDatasetField field: dataset.fields) { + for (PageDatasetField field : dataset.fields) { if (!field.fieldIsCalc()) continue; data.put(field.name, NumberUtil.calcExprMapObject(field.expr, data)); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java index 564f24b..f6a2a5c 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java @@ -1,14 +1,18 @@ package cc.smtweb.system.bpm.web.engine.dynPage; +import cc.smtweb.framework.core.common.SwEnum; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.EntityDao; import cc.smtweb.framework.core.db.cache.ModelTableCache; import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.db.vo.ModelField; import cc.smtweb.framework.core.db.vo.ModelTable; import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.framework.core.mvc.service.AbstractTreeHandler; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.mvc.service.SqlPara; import cc.smtweb.system.bpm.web.design.form.ModelForm; import cc.smtweb.system.bpm.web.design.form.define.PageDataset; @@ -36,26 +40,48 @@ public class DynPageTreeHandler extends AbstractTreeHandler { protected List filterData() { ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); if (table == null) throw new BizException("未找到数据集表定义:" + pageDataSet.masterTable); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); String text = "%" + params.readString("text") + "%"; - List list = null;//dao.queryWhere(" mc_prj_id=? and (mc_name like ? or mc_code like ?) order by mc_name", prj_id, text, text); + SqlNamedPara sqlPara = buildFilterSqlPara(text); - return list; + return DbEngine.getInstance().queryN(sqlPara.sql, sqlPara.mapParas, SwMap.class); + } + + /** + * 构建sql + * @return + */ + protected SqlNamedPara buildDataSqlPara() { + return DynPageHelper.buildTreeSelectSql(pageDataSet, filter); + } + + /** + * 构建sql + * @return + */ + protected SqlNamedPara buildFilterSqlPara(String text) { + return DynPageHelper.buildFilterSelectSql(pageDataSet, filter, text); } @Override protected List getChildren(long id) { - return null; + SqlNamedPara sqlPara = buildDataSqlPara(); + return DbEngine.getInstance().queryN(sqlPara.sql, sqlPara.mapParas, SwMap.class); } @Override protected long getId(SwMap bean) { - return 0; + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("未找到数据集表定义:" + pageDataSet.masterTable); + + return bean.readLong(table.getIdField()); } @Override protected String getText(SwMap bean) { - return null; + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("未找到数据集表定义:" + pageDataSet.masterTable); + ModelField field = table.findFieldByType(SwEnum.FieldType.NAME.value); + return field != null ? bean.readString(field.getName()) : bean.readString(table.getIdField()); } } diff --git a/smtweb-framework/core/src/main/resources/demo.json b/smtweb-framework/core/src/main/resources/demo.json index 2cff18c..a2169cc 100644 --- a/smtweb-framework/core/src/main/resources/demo.json +++ b/smtweb-framework/core/src/main/resources/demo.json @@ -2,11 +2,11 @@ "form": [ { "page": { - "id": "p721060295212011520", + "id": "p729297538913406976", "type": "fx-page", "props": { - "title": "区划列表", - "key": "721060295216205824" + "title": "测试", + "key": "729297538913406977" } }, "graph": { @@ -15,92 +15,145 @@ "type": "fx-split-panel", "props": { "horizontal": false, - "shadow": "never" + "shadow": "" }, "children": [ - { - "id": "721060295295897600", - "type": "fx-form-panel", + { "shape": "panel", + "id": "form_panel", + "type": "fx-form-panel", "props": { - "paddingY": 5, - "paddingX": 10, - "size": "35", - "colNum": 2 + "colNum": 3, + "name": "query", + "label": "按钮区", + "size": "80", + "shadow": "", + "alignY": "center", + "paddingRight": 10 }, "children": [ { - "id": "id721060295295897601", - "type": "fx-", - "props": { - "label": "名称", - "type": "text", - "maxlength": 100, - "placeholder": "请输入查询内容", - "labelWidth": 100, - "dataset": "ds_1815c554ef8", - "field": "id_1815c554f1b", - "name": "ar_code" - }, - "events": {} - }, - { - "id": "id721060295321063424", + "id": "id729297538913406978", "type": "fx-button-group", "props": { - "menus": [] + "menus": [], + "textAlign": "right" }, "slots": { "default": [ { "type": "fx-button", "props": { - "label": "查询", - "leftIcon": "history-query", - "type": "primary", - "action": "button:search", - "dataset": "ds_1815c554ef8" + "label": "重置", + "leftIcon": "clear", + "type": "", + "action": "button:reset", + "dataset": "", + "link": false, + "linkType": "" }, - "id": "id721060295321063425" + "id": "id729297538913406979" }, { "type": "fx-button", "props": { - "label": "重置", - "type": "danger", - "action": "button:reset", - "leftIcon": "figma-reset-instance" + "label": "查询", + "leftIcon": "search", + "type": "primary", + "action": "button:search", + "dataset": "ds_181d12ba801" }, - "id": "id721060295321063426" - }, + "id": "id729297538913406980" + } + ] + }, + "layout": { + "col": 1 + } + } + ] + }, + { + "id": "729297538913406981", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "20", + "backgroundColor": "transparent" + }, + "children": [] + }, + { + "id": "729297538913406982", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "68", + "label": "查询条件", + "colNum": 2, + "alignY": "center", + "paddingLeft": 32, + "paddingRight": 32, + "shadow": "" + }, + "children": [ + { + "id": "id729297538913406983", + "type": "fx-title", + "props": { + "label": "测试", + "fontSize": 16, + "color": "#01070D", + "fontWeight": "bold", + "showPrefix": false, + "prefixWidth": 5, + "prefixHeight": 24, + "prefixColor": "#1E90FF" + } + }, + { + "id": "id729297538913406984", + "type": "fx-button-group", + "props": { + "menus": [], + "textAlign": "right" + }, + "slots": { + "default": [ { - "id": "id721060295321063427", "type": "fx-button", "props": { "label": "新增", - "type": "success", - "leftIcon": "shield-add", + "leftIcon": "plus", + "type": "primary", "action": "button:add", - "dataset": "ds_1815c554ef8" - } + "link": false, + "linkType": "", + "fxLink": "", + "dataset": "" + }, + "id": "id729297538913406985" } ] } } ] - },{ - "shape": "panel", - "id": "form_panel", + }, + { + "id": "729297538913406986", "type": "fx-form-panel", + "shape": "panel", "props": { + "size": "", + "label": "列表", "colNum": 0, - "paddingX": 5, - "paddingY": 5, - "align": "full" + "paddingLeft": 32, + "paddingRight": 32, + "shadow": "" }, "children": [ { - "id": "id721060295329452032", + "id": "id729297538913406987", "type": "fx-table", "props": { "label": "表格", @@ -108,57 +161,65 @@ "stripe": true, "showHeader": true, "fit": true, - "dataset": "ds_1815c554ef8", - "actionWidth": 120 + "dataset": "ds_181d12ba801", + "actionWidth": 150 }, "slots": { "default": [ { - "id": "id721060295329452033", + "id": "id729297538913406988", "type": "fx-table-column", "props": { - "field": "ar_code", - "label": "编码" + "field": "id_181d173427e", + "label": "id" } }, { - "id": "id721060295337840640", + "id": "id729297538913406989", "type": "fx-table-column", "props": { - "field": "ar_name", - "label": "名称" + "field": "id_181d173427f", + "label": "项目" } }, { - "id": "id721060295337840641", + "id": "id729297538913406990", "type": "fx-table-column", "props": { - "field": "ar_full_name", - "label": "全称" + "field": "id_181d1734280", + "label": "目录" } }, { - "id": "id721060295337840642", + "id": "id729297538913406991", "type": "fx-table-column", "props": { - "field": "ar_seq", - "label": "排序码" + "field": "id_181d1734281", + "label": "数据库" } }, { - "id": "id721060295337840643", + "id": "id729297538913406992", "type": "fx-table-column", "props": { - "field": "ar_parent_id", - "label": "父ID" + "field": "id_181d1734282", + "label": "依赖" } }, { - "id": "id721060295337840644", + "id": "id729297538913406993", "type": "fx-table-column", "props": { - "field": "ar_remark", - "label": "备注" + "field": "id_181d1734283", + "label": "表名" + } + }, + { + "id": "id729297538913406994", + "type": "fx-table-column", + "props": { + "field": "id_181d1734284", + "label": "标题" } } ], @@ -166,67 +227,102 @@ { "type": "fx-button", "props": { - "label": "编", + "label": "编辑", "type": "text", "leftIcon": "edit", "action": "button:edit", - "linkType": "dialog", - "dataset": "ds_1815c554ef8" + "dataset": "", + "link": true, + "linkType": "", + "nextAction": "", + "fxLink": "" }, - "id": "id1813718bf36" + "id": "id729297538917601280" }, { "type": "fx-button", "props": { - "label": "删", + "label": "删除", "type": "text", - "leftIcon": "delete", - "action": "button:del", - "dataset": "ds_1815c554ef8" + "leftIcon": "delete-themes", + "action": "button:remove", + "preAction": "", + "link": true, + "confirm": "" }, - "id": "id721060295337840645" + "id": "id729297538917601281" } ] }, "events": {} } ] + }, + { + "id": "729297538917601282", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "24", + "backgroundColor": "transparent" + }, + "children": [] } ] } + }, + { + "page": { + "id": "id729297538917601283", + "type": "fx-dialog", + "props": { + "title": "查询条件", + "key": "qrueydialog", + "destroyOnClose": true, + "closeOnClickModal": true, + "width": "20%", + "height": "" + }, + "events": { + } + } } ], "model": [ - { - "dataset": "ds_1815c554ef8", + { + "dataset": "ds_181d12ba801", "label": "主数据集", "fields": [ { - "id": "id_1815c554efc", - "field": "ar_code" }, + "id": "id_181d173427e", + "field": "" + }, { - "id": "id_1815c554efd", - "field": "ar_name" }, + "id": "id_181d173427f", + "field": "" + }, { - "id": "id_1815c554eff", - "field": "ar_full_name" }, + "id": "id_181d1734280", + "field": "" + }, { - "id": "id_1815c554f01", - "field": "ar_seq" }, + "id": "id_181d1734281", + "field": "" + }, { - "id": "id_1815c554efe", - "field": "ar_parent_id" }, + "id": "id_181d1734282", + "field": "" + }, { - "id": "id_1815c554f00", - "field": "ar_remark" } - ], - "filters": [ + "id": "id_181d1734283", + "field": "" + }, { - "id": "id_1815c554f1b", - "field": "ar_name", - "required": false, - "type": "input" + "id": "id_181d1734284", + "field": "" } + ], + "filters": [ ] } ], @@ -234,4 +330,4 @@ "widgetRef": [], "vars": [] } -} \ No newline at end of file +}