郑根木 vor 2 Jahren
Ursprung
Commit
73b4983c3a
11 geänderte Dateien mit 192 neuen und 59 gelöschten Zeilen
  1. +8
    -10
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java
  2. +39
    -0
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/BaseDatasetField.java
  3. +14
    -8
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java
  4. +16
    -32
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java
  5. +1
    -1
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java
  6. +22
    -1
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java
  7. +4
    -0
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java
  8. +8
    -1
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java
  9. +6
    -1
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java
  10. +61
    -0
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java
  11. +13
    -5
      smtweb-framework/core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractTreeHandler.java

+ 8
- 10
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java Datei anzeigen

@@ -1,10 +1,8 @@
package cc.smtweb.system.bpm.web.design.form;

import cc.smtweb.framework.core.cache.AbstractCache;
import cc.smtweb.framework.core.common.SwConsts;
import cc.smtweb.framework.core.common.SwEnum;
import cc.smtweb.framework.core.exception.BizException;
import cc.smtweb.framework.core.exception.SwException;
import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.framework.core.db.vo.ModelField;
@@ -93,14 +91,14 @@ public class ModelFormHelper {
PageModel pageInfo = parsePageInfo(jsonStr);
if (pageInfo == null) return "";
for (Map<String, Object> model : pageInfo.model) {
buildSaveModelFields(datasets, pageInfo, model, true);
buildSaveModelFields(datasets, pageInfo, model, false);
buildSaveModelFields(datasets, model, true);
buildSaveModelFields(datasets, model, false);
}
return JsonUtil.encodeString(pageInfo);
}

//处理model的fields和filters
private static void buildSaveModelFields(PageDatasets datasets, PageModel pageInfo, Map<String, Object> model, boolean isField) {
private static void buildSaveModelFields(PageDatasets datasets, Map<String, Object> model, boolean isField) {
String db = (String) model.get("dataset");
//没有配置db,配置有误,不处理
if (StringUtils.isEmpty(db)) throw new BizException("model未配置数据集db,无法解析!");
@@ -111,7 +109,7 @@ public class ModelFormHelper {
for (Map<String, Object> field : fields) {
String fn = (String) field.get("field");
if (StringUtils.isEmpty(fn)) throw new BizException("model[" + db + "]." + key + "未配置字段名field,无法解析!");
PageDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn);
BaseDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn);
if (pdf == null) throw new BizException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!");

if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) {
@@ -152,9 +150,9 @@ public class ModelFormHelper {
* @return
* @throws JsonProcessingException
*/
public static void buildSaveDataSetFields(List<? extends PageDatasetField> fields) {
public static void buildSaveDataSetFields(List<? extends BaseDatasetField> fields) {
ModelTable table = null;
for (PageDatasetField field : fields) {
for (BaseDatasetField field : fields) {
if (field.table <= 0) continue;
if (table == null || table.getEntityId() != field.table) {
table = ModelTableCache.getInstance().get(field.table);
@@ -212,7 +210,7 @@ public class ModelFormHelper {
for (Map<String, Object> field : fields) {
String fn = (String) field.get("field");
if (StringUtils.isEmpty(fn)) continue;
PageDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn);
BaseDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn);
if (pdf == null) continue;
if (!field.containsKey("label")) {
field.put("label", pdf.label);
@@ -431,7 +429,7 @@ public class ModelFormHelper {
if (dataset == null) throw new BizException("没有找到指定数据集:" + dsId);
}
String fn = MapUtil.readString(field, "field");
PageDatasetField pdf;
BaseDatasetField pdf;
if (!isField) {
pdf = dataset.findFilterById(fn);
} else {


+ 39
- 0
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/BaseDatasetField.java Datei anzeigen

@@ -0,0 +1,39 @@
package cc.smtweb.system.bpm.web.design.form.define;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
* Created by Akmm at 2022/4/20 18:15
*/ //字段要素
public class BaseDatasetField {
public String id;
//表
public long table;
public String table_text;
//字段
public String field = "";
//有别名取别名,无别名同字段名
public String name;
public String label;

public String remark;
//字段类型,如编码字段,参见FieldTypeDef
public int fieldType;
/**
* 数据类型,参见DataType
*/
public String dataType;
/**
* '禁止为空'
*/
public int notNull;
//外键关联表
public long link;
//控件类型:TEXT/TextArea/NUMBER/COMBO
public String editor;

@JsonIgnore
public boolean isFieldNotNull() {
return notNull == 1;
}
}

+ 14
- 8
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java Datei anzeigen

@@ -2,7 +2,6 @@ package cc.smtweb.system.bpm.web.design.form.define;

import cc.smtweb.framework.core.common.SwEnum;
import cc.smtweb.framework.core.exception.BizException;
import cc.smtweb.framework.core.exception.SwException;
import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.framework.core.db.vo.ModelField;
import cc.smtweb.framework.core.db.vo.ModelTable;
@@ -52,6 +51,7 @@ public class PageDataset {

//依赖的数据集
private Set<String> linkDs = new HashSet<>();
private boolean calcField = false;

public PageDatasetField findFieldByName(String name) {
if (mapFieldName == null) resetFields();
@@ -84,15 +84,9 @@ public class PageDataset {
mapFilterName = new HashMap<>();
mapFilterId = new HashMap<>();
resetFields(mapFilterName, mapFilterId, filters, true);

for (PageDatasetFilter filter : filters) {
if (StringUtils.isEmpty(filter.sqlName)) {
filter.sqlName = filter.field;
}
}
}

private <T extends PageDatasetField> void resetFields(Map<String, T> mapName, Map<String, T> mapId, List<T> list, boolean isFilter) {
private <T extends BaseDatasetField> void resetFields(Map<String, T> mapName, Map<String, T> mapId, List<T> list, boolean isFilter) {
ModelTableCache cache = ModelTableCache.getInstance();
ModelTable table = null;
for (T field : list) {
@@ -118,6 +112,12 @@ public class PageDataset {
if (isFilter) {
PageDatasetFilter filter = (PageDatasetFilter) field;
if (StringUtils.isNotEmpty(filter.linkDb)) linkDs.add(filter.linkDb);

if (StringUtils.isEmpty(filter.sqlName)) {
filter.sqlName = filter.field;
}
} else {
calcField = calcField || ((PageDatasetField)field).fieldIsCalc();
}
}
}
@@ -131,7 +131,13 @@ public class PageDataset {
return null;
}

//是否依赖指定数据集
public boolean hasDepends(String dsName) {
return linkDs.contains(dsName);
}

//是否有计算字段
public boolean hasCalcField() {
return calcField;
}
}

+ 16
- 32
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java Datei anzeigen

@@ -1,41 +1,25 @@
package cc.smtweb.system.bpm.web.design.form.define;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
* Created by Akmm at 2022/4/20 18:15
*/ //字段要素
public class PageDatasetField {
public String id;
//表
public long table;
public String table_text;
//字段
public String field = "";
//有别名取别名,无别名同字段名
public String name;
public String label;
* 字段信息
*/
public class PageDatasetField extends BaseDatasetField {
//一般字段
private final static int TYPE_N = 0;
//计算字段
private final static int TYPE_C = 1;

//合计栏
public String summary;
//类型-0-一般字段 1-计算字段
public int type;
//计算字段公式
public String expr;

public String remark;
//字段类型,如编码字段,参见FieldTypeDef
public int fieldType;
/**
* 数据类型,参见DataType
*/
public String dataType;
/**
* '禁止为空'
*/
public int notNull;
//外键关联表
public long link;
//控件类型:TEXT/TextArea/NUMBER/COMBO
public String editor;

@JsonIgnore
public boolean isFieldNotNull() {
return notNull == 1;
//字段是否计算字段
public boolean fieldIsCalc() {
return TYPE_C == type;
}

}

+ 1
- 1
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java Datei anzeigen

@@ -3,7 +3,7 @@ package cc.smtweb.system.bpm.web.design.form.define;
/**
* Created by Akmm at 2022/4/20 18:15
*/ //过滤条件信息
public class PageDatasetFilter extends PageDatasetField {
public class PageDatasetFilter extends BaseDatasetField {
//param-参数/link/const
public String type;
public String title;


+ 22
- 1
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java Datei anzeigen

@@ -3,7 +3,6 @@ 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.exception.BizException;
import cc.smtweb.framework.core.exception.SwException;
import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
@@ -12,6 +11,7 @@ import cc.smtweb.framework.core.db.impl.DefaultEntity;
import cc.smtweb.framework.core.db.vo.ModelTable;
import cc.smtweb.framework.core.mvc.service.SqlNamedPara;
import cc.smtweb.framework.core.util.MapUtil;
import cc.smtweb.framework.core.util.NumberUtil;
import cc.smtweb.system.bpm.web.design.form.define.*;
import org.apache.commons.lang3.StringUtils;

@@ -71,12 +71,19 @@ public class DynPageHelper {
return sqlNamedPara;
}

/**
* 构建合计栏sql
* @param dataSet
* @param params
* @return
*/
public static SqlNamedPara buildSumSql(PageDataset dataSet, Map<String, Object> params) {
SqlNamedPara sqlNamedPara = buildSelectSql(dataSet, params);
StringBuilder sql = new StringBuilder(256);
sql.append("select count(1) " + TOTAL_KEY);
for (PageDatasetField field : dataSet.fields) {
if (StringUtils.isEmpty(field.summary)) continue;
if (field.fieldIsCalc()) continue;
sql.append(",");
if (!SwEnum.SummaryType.instance.isText(field.summary)) {
sql.append(field.summary).append("(").append(field.name).append(") ").append(field.name);
@@ -96,6 +103,7 @@ public class DynPageHelper {
if (!SwEnum.DatasetType.LIST.equals(dataSet.type) || StringUtils.isEmpty(dataSet.sql)) {
sql.append("select ");
for (PageDatasetField field : dataSet.fields) {
if (field.fieldIsCalc()) continue;
sql.append(field.field);
//加别名
if (!field.field.equalsIgnoreCase(field.name)) {
@@ -198,6 +206,19 @@ public class DynPageHelper {
return builder.build(dynCond.opt, filter.sqlName, ns, value, args);
}

/**
* 处理计算字段
* @param data
* @param dataset
*/
public static void setCalcFields(SwMap data, PageDataset dataset) {
if (!dataset.hasCalcField()) return;
for (PageDatasetField field: dataset.fields) {
if (!field.fieldIsCalc()) continue;
data.put(field.name, NumberUtil.calcExprMapObject(field.expr, data));
}
}

private static Map<String, IBuilderExpr> mapBuilder;
private static IBuilderExpr baseBuilder;



+ 4
- 0
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java Datei anzeigen

@@ -17,6 +17,7 @@ import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY;

/**
* Created by Akmm at 2022/5/26 15:58
* 动态页面列表服务
*/
public class DynPageListHandler extends AbstractListHandler {
protected long pageId;
@@ -58,6 +59,9 @@ public class DynPageListHandler extends AbstractListHandler {
}
ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable);
EntityHelper.loadBeanLink(masterTable.getName(), list, sp.mapFieldAlias);
for (SwMap map: list) {
DynPageHelper.setCalcFields(map, pageDataSet);
}
return list;
}



+ 8
- 1
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java Datei anzeigen

@@ -25,6 +25,13 @@ public class DynPageLoadHandler extends AbstractDynPageHandler {
return listHandler;
}

//树工具类
public DynPageTreeHandler getTreeWorker(SwMap filter, PageDataset pageDataSet) {
DynPageTreeHandler listHandler = new DynPageTreeHandler(pageId, filter, pageDataSet);
listHandler.init(params, us);
return listHandler;
}

//新增操作,初始化定义的数据集
public R add() {
//返回的数据,以dataset.name为key,查出的结果(bean或list)为value
@@ -85,7 +92,7 @@ public class DynPageLoadHandler extends AbstractDynPageHandler {
if (SwEnum.DatasetType.LIST.value.equals(pageDataSet.type)) {//列表类
bean = DynRetBean.createList(getListWorker(filter, pageDataSet).buildListData());
} else if (SwEnum.DatasetType.TREE.value.equals(pageDataSet.type)) {//树类
// return new DynRetBean(loadTree());
// return DynRetBean.createList(SwListData.create(getTreeWorker(filter, pageDataSet).buildData()));
} else {//列表类
bean = DynRetBean.createBean(provider.loadData(filter, pageDataSet));
}


+ 6
- 1
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java Datei anzeigen

@@ -9,7 +9,10 @@ import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.framework.core.db.vo.ModelTable;
import cc.smtweb.framework.core.mvc.service.AbstractCompProvider;
import cc.smtweb.framework.core.mvc.service.SqlNamedPara;
import cc.smtweb.framework.core.util.CommUtil;
import cc.smtweb.framework.core.util.NumberUtil;
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.PageDatasets;

/**
@@ -29,8 +32,10 @@ public class DynPageProvider extends AbstractCompProvider {
}
ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable);
EntityHelper.loadBeanLink(masterTable.getName(), map, sqlPara.mapFieldAlias);
DynPageHelper.setCalcFields(map, pageDataSet);
return map;
});

}


}

+ 61
- 0
smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageTreeHandler.java Datei anzeigen

@@ -0,0 +1,61 @@
package cc.smtweb.system.bpm.web.engine.dynPage;

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.ModelTable;
import cc.smtweb.framework.core.exception.BizException;
import cc.smtweb.framework.core.mvc.service.AbstractTreeHandler;
import cc.smtweb.system.bpm.web.design.form.ModelForm;
import cc.smtweb.system.bpm.web.design.form.define.PageDataset;

import java.util.ArrayList;
import java.util.List;

/**
* Created by Akmm at 2022/7/5 11:51
* 动态页面树型服务
*/
public class DynPageTreeHandler extends AbstractTreeHandler<SwMap> {
protected long pageId;
//过滤条件
private SwMap filter;
//对应的数据集定义
private PageDataset pageDataSet;

public DynPageTreeHandler(long pageId, SwMap filter, PageDataset pageDataSet) {
this.pageId = pageId;
this.filter = filter;
this.pageDataSet = pageDataSet;
}

@Override
protected List<SwMap> 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<SwMap> list = null;//dao.queryWhere(" mc_prj_id=? and (mc_name like ? or mc_code like ?) order by mc_name", prj_id, text, text);

return list;
}

@Override
protected List<SwMap> getChildren(long id) {
return null;
}

@Override
protected long getId(SwMap bean) {
return 0;
}

@Override
protected String getText(SwMap bean) {
return null;
}
}

+ 13
- 5
smtweb-framework/core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractTreeHandler.java Datei anzeigen

@@ -15,16 +15,24 @@ import java.util.List;
public abstract class AbstractTreeHandler<T> extends AbstractHandler {
//树过滤
public R filter() {
return R.success(buildFilter());
}

//构建过滤数据
public List<SwMap> buildFilter() {
List<T> rows = filterData();
List<SwMap> listRet = buildNodes(rows, true);
return R.success(listRet);
return buildNodes(rows, true);
}

//下拉数据
public R data() {
List<T> rows = getChildren(params.readLong("parent_id"));
List<SwMap> listRet = buildNodes(rows, params.readBool("lazy"));
return R.success(buildData());
}

return R.success(listRet);
//构建
public List<SwMap> buildData() {
List<T> rows = getChildren(params.readLong("parent_id"));
return buildNodes(rows, params.readBool("lazy"));
}

//搜索


Laden…
Abbrechen
Speichern