From f66336c14bd67d8a54b3b52cff1d186e7ffe3982 Mon Sep 17 00:00:00 2001 From: zhenggm Date: Tue, 24 May 2022 14:19:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/bpm/web/design/flow/FlowConst.java | 93 ++++++++ .../system/bpm/web/design/flow/ModelProc.java | 90 +++++++ .../system/bpm/web/design/flow/ModelProcCache.java | 60 +++++ .../bpm/web/design/flow/ModelProcService.java | 132 +++++++++++ .../bpm/web/design/flow/define/ActivityInfo.java | 35 +++ .../bpm/web/design/flow/define/HandlerInfo.java | 19 ++ .../bpm/web/design/flow/define/ProcInfo.java | 23 ++ .../bpm/web/design/flow/define/SignInfo.java | 17 ++ .../bpm/web/design/flow/define/TransInfo.java | 23 ++ .../web/design/table/ModelCatalogTreeHandler.java | 10 +- .../bpm/web/engine/AbstractDynPageHandler.java | 40 ---- .../system/bpm/web/engine/DynPageAddHandler.java | 41 ---- .../system/bpm/web/engine/DynPageDelHandler.java | 164 ------------- .../system/bpm/web/engine/DynPageHelper.java | 237 ------------------- .../bpm/web/engine/DynPageLoadOneHandler.java | 101 -------- .../system/bpm/web/engine/DynPageSaveHandler.java | 263 --------------------- .../system/bpm/web/engine/DynPageService.java | 67 ------ .../smtweb/system/bpm/web/engine/DynRetBean.java | 33 --- .../web/engine/dynPage/AbstractDynPageHandler.java | 40 ++++ .../bpm/web/engine/dynPage/DynPageAddHandler.java | 41 ++++ .../bpm/web/engine/dynPage/DynPageDelHandler.java | 164 +++++++++++++ .../bpm/web/engine/dynPage/DynPageHelper.java | 237 +++++++++++++++++++ .../web/engine/dynPage/DynPageLoadOneHandler.java | 101 ++++++++ .../bpm/web/engine/dynPage/DynPageSaveHandler.java | 263 +++++++++++++++++++++ .../bpm/web/engine/dynPage/DynPageService.java | 67 ++++++ .../system/bpm/web/engine/dynPage/DynRetBean.java | 33 +++ .../bpm/web/engine/flow/CandidateEntity.java | 57 +++++ .../system/bpm/web/engine/flow/CareEntity.java | 49 ++++ .../system/bpm/web/engine/flow/CommentEntity.java | 65 +++++ .../system/bpm/web/engine/flow/FlowInstance.java | 61 +++++ .../system/bpm/web/engine/flow/ProcinstEntity.java | 129 ++++++++++ .../system/bpm/web/engine/flow/SignEntity.java | 74 ++++++ .../system/bpm/web/engine/flow/TaskEntity.java | 161 +++++++++++++ .../system/bpm/web/engine/flow/TaskRelEntity.java | 49 ++++ .../system/bpm/web/flow/BpmFlowListService.java | 26 -- .../cc/smtweb/system/bpm/test/BuildJavaBean.java | 18 +- .../cc/smtweb/system/bpm/test/ModelFormTest.java | 2 +- 37 files changed, 2094 insertions(+), 991 deletions(-) create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/AbstractDynPageHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageAddHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageDelHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageHelper.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageLoadOneHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageSaveHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynRetBean.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageAddHandler.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadOneHandler.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CandidateEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CareEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CommentEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/ProcinstEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/SignEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskEntity.java create mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskRelEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/flow/BpmFlowListService.java diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java new file mode 100644 index 0000000..1cbe955 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java @@ -0,0 +1,93 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.common.IntEnum; + +/** + * Created by Akmm at 2022/5/24 9:04 + * 工作流常量及枚举定义 + */ +public interface FlowConst { + //流程按钮 + class Button { + public static final String DISUSE = "disuse";// 作废 + public static final String LOG = "log";// 流程历史 + public static final String WORD = "word";// 导出Word + public static final String EXCEL = "excel";// 导出Excel + public static final String HANDLER = "handler";// 办理,签收 + public static final String SUBMIT = "submit";// 提交 + public static final String RETAKE = "retake";// 取回 + public static final String REJECT = "reject";// 驳回 + public static final String ADD = "add";// 新增 + public static final String DEL = "del";// 删除 + public static final String SAVE = "save";// 保存 + } + /** + * 活动类型 1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 + */ + class ActivityType extends IntEnum { + public static ActivityType instance = new ActivityType(); + public static IntEnumBean START = instance.addEnum(1, "开始任务"); + public static IntEnumBean USER = instance.addEnum(2, "用户任务"); + public static IntEnumBean CONDITION = instance.addEnum(3, "判断分支"); + public static IntEnumBean PARALLEL = instance.addEnum(4, "并行开始"); + public static IntEnumBean GATHER = instance.addEnum(5, "并行结束"); + public static IntEnumBean AUTO = instance.addEnum(6, "脚本任务"); + public static IntEnumBean END = instance.addEnum(9, "结束任务"); + } + + /** + * 流程活动状态 0-待办 1-办理中 2-已提交 3-已驳回 + */ + class ActivityStatu extends IntEnum { + public static ActivityStatu instance = new ActivityStatu(); + public static IntEnumBean WAIT = instance.addEnum(0, "待办"); + public static IntEnumBean HANDLE = instance.addEnum(1, "办理中"); + public static IntEnumBean SUBMIT = instance.addEnum(2, "已提交"); + public static IntEnumBean DISUSE = instance.addEnum(8, "已作废"); + public static IntEnumBean REJECT = instance.addEnum(9, "已驳回"); + } + + /** + * 流程实例状态 + */ + class InstanceStatu extends IntEnum { + public static ActivityStatu instance = new ActivityStatu(); + public static IntEnumBean BEGIN = instance.addEnum(1, "制单"); + public static IntEnumBean RUNING = instance.addEnum(2, "审批中"); + public static IntEnumBean FINISH = instance.addEnum(99, "生效"); + public static IntEnumBean ABORTED = instance.addEnum(98, "中止"); + public static IntEnumBean DISUSE = instance.addEnum(89, "作废"); + } + + /** + * 流程任务创建方式 + */ + class TaskCreateType extends IntEnum { + public static TaskCreateType instance = new TaskCreateType(); + public static IntEnumBean AUTO = instance.addEnum(1, "自动"); + public static IntEnumBean RETAKE = instance.addEnum(2, "取回"); + public static IntEnumBean REJECT = instance.addEnum(3, "驳回"); + } + + /** + * 候选人过滤类别 主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 + */ + class CndFilterType extends IntEnum { + public static CndFilterType instance = new CndFilterType(); + public static IntEnumBean BILL_CORP = instance.addEnum(1, "单据所属单位"); + public static IntEnumBean BILL_DEPT = instance.addEnum(2, "单据所属部门"); + public static IntEnumBean MAKE_CORP = instance.addEnum(3, "制单人所属单位"); + public static IntEnumBean MAKE_DEPT = instance.addEnum(4, "制单人所属部门"); + public static IntEnumBean SUBMITTER_CORP = instance.addEnum(5, "上一步提交人所属单位"); + public static IntEnumBean SUBMITTER_DEPT = instance.addEnum(6, "上一步提交人所属部门"); + } + + /** + * 主办人忽略类型:位运算,上一步提交人/过滤制单人 + */ + class CndIgnoreType extends IntEnum { + public static CndIgnoreType instance = new CndIgnoreType(); + public static IntEnumBean MAKER = instance.addEnum(1, "制单人"); + public static IntEnumBean SUBMITTER = instance.addEnum(2, "上一步提交人"); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java new file mode 100644 index 0000000..e6c1957 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java @@ -0,0 +1,90 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.system.bpm.web.design.flow.define.ProcInfo; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Created by Akmm at 2022/5/21 10:40 + * 流程定义 + */ +@SwTable("ASP_MODEL_PROC") +public class ModelProc extends DefaultEntity { + public static final String ENTITY_NAME = "ASP_MODEL_PROC"; + //流程定义详情 + @JsonIgnore + private transient ProcInfo procInfo = null; + + public ModelProc() { + super(ENTITY_NAME); + } + + public ProcInfo getProcInfo() { + if (procInfo == null) { + synchronized ("ModelProc_" + getId()) { + if (procInfo == null) { + procInfo = JsonUtil.parse(getContent(), ProcInfo.class); + } + } + } + return procInfo; + } + + public long getId() { + return getLong("prc_id"); + } + + public void setId(long prcId) { + put("prc_id", prcId); + } + + public long getPrjId() { + return getLong("prc_prj_id"); + } + + public void setPrjId(long prcPrjId) { + put("prc_prj_id", prcPrjId); + } + + public long getMcId() { + return getLong("prc_mc_id"); + } + + public void setMcId(long prcMcId) { + put("prc_mc_id", prcMcId); + } + + public String getCode() { + return getStr("prc_code"); + } + + public void setCode(String prcCode) { + put("prc_code", prcCode); + } + + public String getName() { + return getStr("prc_name"); + } + + public void setName(String prcName) { + put("prc_name", prcName); + } + + public String getContent() { + return getStr("prc_content"); + } + + public void setContent(String prcContent) { + put("prc_content", prcContent); + } + + public String getRemark() { + return getStr("prc_remark"); + } + + public void setRemark(String prcRemark) { + put("prc_remark", prcRemark); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java new file mode 100644 index 0000000..117321b --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java @@ -0,0 +1,60 @@ +package cc.smtweb.system.bpm.web.design.flow; + +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.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.system.bpm.web.design.form.ModelForm; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Created by Akmm at 2022/1/12 18:34 + */ +@SwCache(ident = "ASP_MODEL_PROC", title = "流程定义") +public class ModelProcCache extends AbstractCache { + private final static String mk = "k"; + private final static String mp = "prj"; + private final static String mc = "c"; + + public static ModelProcCache getInstance() { + return CacheManager.getIntance().getCache(ModelProcCache.class); + } + + public ModelProcCache() { + regMap(mk, k-> k.getName().toUpperCase()); + regList(mp, k-> String.valueOf(k.getPrjId())); + regList(mc, k-> String.valueOf(k.getMcId())); + } + + @Override + protected String getId(ModelProc bean) { + return String.valueOf(bean.getId()); + } + + @Override + protected List loadAll() { + EntityDao dao = DbEngine.getInstance().findDao(ModelProc.class); + return dao.query(); + } + + public final ModelProc getByName(String key) { + return getByKey(mk, key.toUpperCase()); + } + + public final Set getFormsByMc(long mcId) { + return getListByKey(mc, String.valueOf(mcId)); + } + + public final List getFormsByMc(long mcId, Comparator comparator) { + Set set = getListByKey(mc, String.valueOf(mcId)); + if (set == null || set.isEmpty()) return null; + List list = new ArrayList<>(set); + list.sort(comparator); + return list; + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java new file mode 100644 index 0000000..82f8990 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java @@ -0,0 +1,132 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +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.mvc.service.AbstractCompService; +import cc.smtweb.framework.core.mvc.service.DefaultDelHandler; +import cc.smtweb.framework.core.mvc.service.DefaultListHandler; +import cc.smtweb.framework.core.mvc.service.IHandler; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.SqlUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormLoadHandler; +import cc.smtweb.system.bpm.web.design.form.ModelFormSaveHandler; +import org.apache.commons.lang3.StringUtils; + +import java.sql.ResultSetMetaData; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Akmm at 2022/3/22 9:12 + */ +@SwService +public class ModelProcService extends AbstractCompService { + @Override + protected IHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new ModelFormLoadHandler(); + case TYPE_SAVE: + return new ModelFormSaveHandler(); + case TYPE_DEL: + return new DefaultDelHandler(ModelForm.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler(ModelForm.ENTITY_NAME); + + } + return null; + } + + //保存数据集 + public R saveDataset(@SwBody SwMap params, UserSession us) { + try { + ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveDataset(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载数据集 + public R loadDataset(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadDataset(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //保存页面模型 + public R saveModel(@SwBody SwMap params, UserSession us) { + try { + ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveModel(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载页面模型 + public R loadModel(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadModel(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载引擎用页面模型 + public R model(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadForm(); + } catch (Exception e) { + 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); + } + } + + //获取自定义sql的字段信息,去库里查 + public R loadSqlFields(@SwBody SwMap params, UserSession us) { + try { + String sql = params.readString("sql"); + if (StringUtils.isEmpty(sql)) return R.error("没有传入的sql!"); + sql = sql.trim().toLowerCase(); + if (!sql.startsWith("select ")) return R.error("非查询类sql,禁止执行!"); + if (sql.contains(";")) return R.error("sql内禁止出现分号!"); + sql = SqlUtil.replaceTable(sql); + List ret = DbEngine.getInstance().query(sql + " where 1=0", rs -> { + List fields = new ArrayList<>(); + ResultSetMetaData metaData = rs.getMetaData(); + + for (int i = 1, count = metaData.getColumnCount(); i <= count; i++) { + SwMap col = new SwMap(2); + col.put("name", metaData.getColumnLabel(i)); + SwEnum.DataTypeBean dtb = SwEnum.DataType.getBySqlType(metaData.getColumnType(i), metaData.getPrecision(i), metaData.getScale(i)); + col.put("dataType", dtb.value); + fields.add(col); + } + return fields; + }); + return R.success(ret); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java new file mode 100644 index 0000000..91172f8 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java @@ -0,0 +1,35 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/21 10:48 + * 步骤定义 + */ +@Data +public class ActivityInfo { + //"id": "", + private String id; + //类别:1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 + private int type; + //活动编号,代码可调用 + private String code; + //活动名称 + private String label; + //表单定义 + private String page; + //是否可编辑 + private boolean canEdit; + //是否需要会签 + private boolean needSign; + //可编辑的字段 + private List eidtFields; + //不可查看的字段 + private List disableFields; + //主办人相关信息 + private HandlerInfo handler; + //会签相关信息 + private SignInfo sign; +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java new file mode 100644 index 0000000..1475f1c --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/23 9:45 + * 主办人设置信息 + */ +@Data +public class HandlerInfo { + //主办人分组 + private List userGroup; + //主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 + private int filter; + //主办人过滤:上一步提交人/过滤制单人 + private int ignore; +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java new file mode 100644 index 0000000..1f1fd8f --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java @@ -0,0 +1,23 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/21 10:48 + * 流程定义信息 + */ +@Data +public class ProcInfo { + //默认表单定义 + private String page; + //是否允许编辑非本人单据 + private boolean canEditOther; + //1-驳回到制单 0-逐级驳回 + private boolean rejectToMake; + //活动节点 + private List activities; + //连接线 + private List trans; +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java new file mode 100644 index 0000000..ab1b148 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java @@ -0,0 +1,17 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +/** + * Created by Akmm at 2022/5/23 9:54 + * 会签信息 + */ +@Data +public class SignInfo extends HandlerInfo{ + //最少会签人数 + private int minSign; + //最少会签同意人数 + private int minAgree; + //最少会签同意人数单位:0-人数 1-会签同意占比 + private int minAgreeUnit; +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java new file mode 100644 index 0000000..246792e --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java @@ -0,0 +1,23 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +/** + * Created by Akmm at 2022/5/21 11:38 + * 连接线 + */ +@Data +public class TransInfo { + //唯一标识 + private String id; + //序号 + private int seq; + //条件表达式 + private String expr; + //源活动 + private String src; + //目标活动 + private String dst; + //说明 + private String desc; +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java index b815c50..651a839 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java @@ -23,12 +23,12 @@ import java.util.List; * Created by Akmm at 2022/3/21 18:22 */ public class ModelCatalogTreeHandler extends AbstractTreeHandler { - //查询类型:0-目录;1-表定义;2-页面;3-控件;4-页面和控件 + //查询类型:0-目录;1-表定义;2-页面;3-控件;23-页面和控件 private final static int TYPE_CATALOG = 0; private final static int TYPE_TABLE = 1; private final static int TYPE_PAGE = 2; private final static int TYPE_WIDGET = 3; - private final static int TYPE_FORM = 4; + private final static int TYPE_FORM = 23; private long prj_id;//所属项目 private int type;//查询类型:0-目录;1-表定义;2-页面定义 @@ -153,8 +153,8 @@ public class ModelCatalogTreeHandler extends AbstractTreeHandler node.put("type", TYPE_CATALOG); } else if (bean instanceof ModelTable) { node.put("type", TYPE_TABLE); - }/* else if (bean instanceof ModelTable) { - node.put("type", TYPE_TABLE); - }*/ + } else if (bean instanceof ModelForm) { + node.put("type", ((ModelForm)bean).getType() + 2); + } } } diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/AbstractDynPageHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/AbstractDynPageHandler.java deleted file mode 100644 index f8b61e2..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/AbstractDynPageHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -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.ModelFormHelper; -import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; - -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - */ -public abstract class AbstractDynPageHandler extends AbstractHandler { - //页面定义id - protected long pageId; - protected Map mapDataset; - - @Override - public void init(SwMap params, UserSession us) { - super.init(params, us); - pageId = params.readLong("pageId"); - - mapDataset = ModelFormHelper.parsePageDataset(pageId); - if (mapDataset == null) throw new SwException("没有找到页面定义数据!"); - } - - protected PageDataSet findDataset(String name) { - return mapDataset.get(name); - } - - //获取第一个,主数据集 - protected PageDataSet findMasterDataset() { - for (PageDataSet dataSet: mapDataset.values()) { - return dataSet; - } - return null; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageAddHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageAddHandler.java deleted file mode 100644 index 574acc6..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageAddHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; - -import java.util.HashMap; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 新增操作,初始化定义的数据集 - */ -public class DynPageAddHandler extends AbstractDynPageHandler { - - @Override - public R doWork() throws Exception { - //返回的数据,以dataset.name为key,查出的结果(bean或list)为value - Map mapRet = new HashMap<>(); - for (PageDataSet dataSet : mapDataset.values()) { - if (!dataSet.canEdit) { - continue; - } - if (SwEnum.DatasetType.FORM.value.equals(dataSet.type)) {//单表 - //懒加载,给个空对象 - if (dataSet.lazy) { - mapRet.put(dataSet.name, new SwMap()); - continue; - } - mapRet.put(dataSet.name, DynPageHelper.createBean(dataSet)); - } else if (SwEnum.DatasetType.TREE.value.equals(dataSet.type)) {//树 - mapRet.put(dataSet.name, new SwMap()); - } else if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type)) {//非枚举 - mapRet.put(dataSet.name, SwListData.create(null, 0)); - } - } - return R.success(mapRet); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageDelHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageDelHandler.java deleted file mode 100644 index 01ac235..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageDelHandler.java +++ /dev/null @@ -1,164 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwException; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.SwEnum; -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.jdbc.AbsDbWorker; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 删除操作 - */ -public class DynPageDelHandler extends AbstractDynPageHandler { - - @Override - public R doWork() throws Exception { - return delAll(); - } - - /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return - */ - public R delOne() { - //数据集 - String dbName = params.readString("dataset"); - //对应的数据集定义 - PageDataSet pageDataSet = findDataset(dbName); - if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); - - long id = params.readLong("id"); - if (id == 0) throw new SwException("没有收到待删除记录Id!"); - - checkBean(pageDataSet, id); - - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new SwException("没有找到指定的的表定义:" + pageDataSet.name + "!"); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - dao.deleteEntity(id); - } - - @Override - public void doAfterDbCommit() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); - cache.remove(id); - } - } - }); - return R.success(); - } - - public R delAll() { - long id = params.readLong("id"); - if (id == 0) throw new SwException("没有收到待删除记录Id!"); - //校验主表即可 - PageDataSet masterDs = findMasterDataset(); - if (masterDs == null || !masterDs.canEdit || !SwEnum.DatasetType.FORM.value.equals(masterDs.type)) - throw new SwException("主表不允许删除!"); - checkBean(masterDs, id); - - Map mapRemovableInfo = new HashMap<>(); - for (PageDataSet pageDataSet : mapDataset.values()) { - //非表单编辑,不管 - if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - RemovableInfo info = mapRemovableInfo.computeIfAbsent(table.getName(), k -> { - RemovableInfo ret = new RemovableInfo(k); - if (pageDataSet != masterDs) {//非主表,记录一下关联字段 - PageDatasetFilter f = pageDataSet.findFilterByDs(masterDs.name); - if (f == null) { - throw new SwException("无法删除表【" + pageDataSet.name + "】,此表未关联主表!"); - } - ret.field = f.field; - } - return ret; - }); - - if (pageDataSet == masterDs || !table.isNeedCache()) { - //主表或没有缓存,直接按FK删除 - info.addId(id); - } else { - info.needCache = true; - //有缓存,需要先把id查出来 - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - List list = dao.queryIdListWhere(info.field + " = ?", id); - info.ids.addAll(list); - } - } - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - for (RemovableInfo info : mapRemovableInfo.values()) { - EntityDao dao = DbEngine.getInstance().findDao(info.tableName); - if (!info.needCache && StringUtils.isNotEmpty(info.field)) { - //按外键来删除 - dao.deleteEntity(" where " + info.field + "=?", id); - } else { - dao.deleteEntity(info.ids); - } - } - } - - @Override - public void doAfterDbCommit() { - for (RemovableInfo info : mapRemovableInfo.values()) { - if (!info.needCache) continue; - AbstractCache cache = CacheManager.getIntance().getCache(info.tableName); - cache.remove(id); - - } - } - }); - return R.success(); - } - - /** - * 删除校验 - * - * @param pageDataSet - * @param id - */ - protected void checkBean(PageDataSet pageDataSet, long id) { - //校验外键引用关系 - } - - - /** - * 待删除信息 - */ - class RemovableInfo { - String tableName; - String field = null; - boolean needCache = false; - List ids = new ArrayList<>(); - - public RemovableInfo(String tableName) { - this.tableName = tableName; - } - - void addId(long id) { - ids.add(id); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageHelper.java deleted file mode 100644 index 3b7b8ed..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageHelper.java +++ /dev/null @@ -1,237 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.common.SwEnum; -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.ModelTable; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.framework.core.util.MapUtil; -import cc.smtweb.system.bpm.web.design.form.define.*; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; - -/** - * Created by Akmm at 2022/4/23 10:01 - * 动态页面辅助类 - */ -public class DynPageHelper { - /** - * 新建bean - * - * @param dataSet - * @return - */ - public static SwMap createBean(PageDataSet dataSet) { - //主表 - ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); - EntityDao dao = DbEngine.getInstance().findDao(masterTable.getTableName()); - try { - DefaultEntity bean = dao.createBean(); - return bean.getData(); - } catch (Exception e) { - throw new SwException(e); - } - } - - /** - * 构建select fields from table - * - * @param dataSet - * @return - */ - public static SqlNamedPara buildSelectSql(PageDataSet dataSet, Map params) { - StringBuilder sql = new StringBuilder(512); - - SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); - - sql.append(buildSelFieldsSql(dataSet, sqlNamedPara)); - if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { - sql.append(" where ").append(sqlNamedPara.sql); - } - if (dataSet.sortFields != null) { - String s = ""; - for (PageDatasetSortField sf : dataSet.sortFields) { - s += "," + sf.field + " " + sf.type; - } - if (StringUtils.isNotEmpty(s)) { - sql.append(" order by ").append(s.substring(1)); - } - } - sqlNamedPara.sql = sql.toString(); - sqlNamedPara.page = MapUtil.readInt(params, SwConsts.PARAM_PAGE); - sqlNamedPara.rows = MapUtil.readInt(params, SwConsts.PARAM_ROWS); - return sqlNamedPara; - } - - public static SqlNamedPara buildSumSql(PageDataSet dataSet, Map 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; - sql.append(","); - if (!SwEnum.SummaryType.instance.isText(field.summary)) { - sql.append(field.summary).append("(").append(field.name).append(") ").append(field.name); - } else { - sql.append("'").append(field.summary).append("' ").append(field.name); - } - } - sqlNamedPara.sql = sql.toString() + " from (" + sqlNamedPara.sql + ") xxxxa"; - return sqlNamedPara; - } - - private static String buildSelFieldsSql(PageDataSet dataSet, SqlNamedPara sqlNamedPara) { - StringBuilder sql = new StringBuilder(512); - //主表 - ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); - //非查询列表,或sql为空,则自己组装select sql - if (!SwEnum.DatasetType.LIST.equals(dataSet.type) || StringUtils.isEmpty(dataSet.sql)) { - sql.append("select "); - for (PageDatasetField field : dataSet.fields) { - sql.append(field.field); - //加别名 - if (!field.field.equalsIgnoreCase(field.name)) { - sql.append(" ").append(field.name); - sqlNamedPara.addFieldAlias(field.field, field.name); - } - sql.append(","); - } - sql.setCharAt(sql.length() - 1, ' '); - sql.append(" from ").append(masterTable.getName()); - return sql.toString(); - } else { - return dataSet.sql; - } - } - - /** - * 构建where条件:组合固定和动态条件 - * - * @param dataSet - * @param params - * @return - */ - public static SqlNamedPara buildWhereSql(PageDataSet dataSet, Map params) { - StringBuilder sql = new StringBuilder(512); - SwMap args = new SwMap(); - - if (StringUtils.isNotEmpty(dataSet.fixedCond)) { - sql.append("(").append(dataSet.fixedCond).append(")"); - } - //记录归属于固定条件的filter,最后设置参数 - Set setFixedFilter = new HashSet<>(); - for (PageDatasetFilter filter : dataSet.filters) { - setFixedFilter.add(filter.name); - } - if (!dataSet.dynCond.isEmpty()) { - String s = buildDynCondSql(dataSet, dataSet.dynCond, params, args, setFixedFilter); - if (StringUtils.isNotEmpty(s)) { - if (sql.length() > 0) sql.append(" and "); - sql.append(s); - } - } - for (String s : setFixedFilter) { - args.put(s, params.get(s)); - } - return new SqlNamedPara(sql.toString(), args); - } - - /** - * 构建动态条件 - * - * @param dataSet - * @param dynCond - * @param params - * @param args - * @param setFixedFilter - * @return - */ - private static String buildDynCondSql(PageDataSet dataSet, PageDatasetDynCond dynCond, Map params, SwMap args, Set setFixedFilter) { - if (dynCond.isOpt()) {//是and/or - StringBuilder sql = new StringBuilder(256); - boolean b = false; - //递归调用 - for (PageDatasetDynCond dc : dynCond.children) { - String s = buildDynCondSql(dataSet, dc, params, args, setFixedFilter); - if (StringUtils.isEmpty(s)) continue; - - if (b) sql.append(" ").append(dynCond.opt).append(" "); - sql.append(s); - b = true; - } - return "(" + sql.toString() + ")"; - } - - boolean isNameSelf = setFixedFilter.contains(dynCond.param); - setFixedFilter.remove(dynCond.param); - - PageDatasetFilter filter = dataSet.getFilter(dynCond.param); - if (filter == null) throw new SwException("没有找到filter(" + dynCond.param + ")!"); - - Object value = null; - if (SwEnum.FilterType.CONST.value.equals(filter.type)) { - value = filter.value; - //todo 有变量的情况需要处理 - } else { - value = params.get(filter.name); - } - if (value == null || StringUtils.isEmpty(value.toString())) { - if (filter.required) { - throw new SwException("过滤条件不能为空(" + dynCond.param + ")!"); - } - return null; - } - IBuilderExpr builder = getBuilder(dynCond.opt); - String ns = isNameSelf ? filter.name : filter.name + "_" + dynCond.hashCode(); - return builder.build(dynCond.opt, filter.sqlName, ns, value, args); - } - - private static Map mapBuilder; - private static IBuilderExpr baseBuilder; - - static { - baseBuilder = (opt, field, name, value, args) -> { - args.put(name, value); - return field + " " + opt + " :" + name; - }; - mapBuilder = new HashMap<>(); - mapBuilder.put(SwEnum.OptType.LIKE.value, (opt, field, name, value, args) -> { - args.put(name, "%" + value + "%"); - return field + " like :" + name; - }); - - mapBuilder.put(SwEnum.OptType.PLIKE.value, (opt, field, name, value, args) -> { - args.put(name, value + "%"); - return field + " like :" + name; - }); - - mapBuilder.put(SwEnum.OptType.BT.value, (opt, field, name, value, args) -> { - String[] ss = value.toString().split(","); - if (ss.length != 2) throw new SwException("介于条件,参数值个数错误!"); - args.put(name + "_1", ss[0]); - args.put(name + "_2", ss[1]); - return "(" + field + ">=:" + name + "_1 and " + field + "<=:" + name + "_2)"; - }); - } - - private static IBuilderExpr getBuilder(String opt) { - IBuilderExpr builder = mapBuilder.get(opt); - return builder != null ? builder : baseBuilder; - } - - interface IBuilderExpr { - String build(String opt, String field, String name, Object value, Map args); - } - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageLoadOneHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageLoadOneHandler.java deleted file mode 100644 index c892d02..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageLoadOneHandler.java +++ /dev/null @@ -1,101 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; - -import java.util.List; - -import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; - -/** - * Created by Akmm at 2022/4/21 17:53 - */ -public class DynPageLoadOneHandler extends AbstractDynPageHandler { - //数据集 - private String dbName; - //过滤条件 - private SwMap filter = new SwMap(); - - //对应的数据集定义 - private PageDataSet pageDataSet; - - @Override - public R doWork() throws Exception { - dbName = params.readString("dataset"); - filter = (SwMap)params.get("filter"); - - pageDataSet = findDataset(dbName); - if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); - - DynRetBean bean = null; - if (SwEnum.DatasetType.LIST.value.equals(pageDataSet.type)) {//列表类 - bean = DynRetBean.createList(loadList()); - } else if (SwEnum.DatasetType.TREE.value.equals(pageDataSet.type)) {//列表类 -// return new DynRetBean(loadTree()); - } else {//列表类 - bean = DynRetBean.createBean(loadOne()); - } - - return R.success(bean); - } - - /** - * 返回单个对象 - * @return - */ - private SwMap loadOne() { - SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); - SwMap map = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.paras, SwMap.class); - if (map == null) { - throw new SwException("没有找到指定数据(ds=" + pageDataSet.name + ")"); - } - ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); - EntityHelper.loadBeanLink(masterTable.getName(), map, sqlPara.mapFieldAlias); - return map; - } - - /** - * 返回list - * @return - */ - private SwListData loadList() { - SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); - List list; - if (sqlPara.page > 0 && sqlPara.rows > 0) { - list = DbEngine.getInstance().pagedQueryN(sqlPara.sql, SwMap.class, (sqlPara.page - 1) * sqlPara.rows, sqlPara.rows, sqlPara.paras); - } else { - list = DbEngine.getInstance().queryN(sqlPara.sql, sqlPara.paras, SwMap.class); - } - ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); - EntityHelper.loadBeanLink(masterTable.getName(), list, sqlPara.mapFieldAlias); - return SwListData.create(list, sqlPara.rows); - } - - /** - * 计算分页数据 - * @return - */ - public R getTotal() { - try { - SqlNamedPara sqlPara = DynPageHelper.buildSumSql(pageDataSet, filter); - - SwMap mapFooter = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.paras, SwMap.class); - - R r = R.success(); - r.put("total", mapFooter.get(TOTAL_KEY)); - r.put("footer", mapFooter); - return r; - } catch (Exception e) { - return R.error("计算合计失败!", e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageSaveHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageSaveHandler.java deleted file mode 100644 index c41186f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageSaveHandler.java +++ /dev/null @@ -1,263 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.SwEnum; -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.jdbc.AbsDbWorker; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelIndex; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.TreeHelper; -import cc.smtweb.framework.core.util.CommUtil; -import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import org.apache.commons.lang3.StringUtils; - -import java.util.*; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 保存指定数据集操作 - * 入参:{pageId, data:} - */ -public class DynPageSaveHandler extends AbstractDynPageHandler { - private Map> mapTreeBean = new HashMap<>(); - - @Override - public R doWork() { - return saveAll(); - } - - /** - * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - */ - public R saveOne() { - //数据集 - String dbName = params.readString("dataset"); - SwMap filter = (SwMap) params.get("filter"); - //待保存数据 - SwMap data = params.readMap("data"); - if (data == null) throw new SwException("没有收到待保存的的数据:" + dbName + "!"); - //对应的数据集定义 - PageDataSet pageDataSet = findDataset(dbName); - if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); - //读取待保存的bean - DefaultEntity bean = readBeanFromPage(pageDataSet, data); - if (filter != null && bean.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, bean, f -> filter.get(f.name)); - } - checkBean(bean); - - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - saveBean(bean); - } - - @Override - public void doAfterDbCommit() { - afterCommit(bean); - } - - @Override - public void doAfterDbRollback() { - afterRollback(bean); - } - }); - return R.success(bean); - } - - /** - * 保存对象,所有数据集数据对象,{ ds1: {form:{},list:{total:0,rows:[]}}} - * - * @return - */ - public R saveAll() { - SwMap data = params.readMap("data"); - if (data == null) throw new SwException("没有收到待保存的的数据!"); - SwMap filter = (SwMap) params.get("filter"); - - Map map = new LinkedHashMap<>(); - for (PageDataSet pageDataSet : mapDataset.values()) { - //非表单编辑,不管 - if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; - SwMap dsData = (SwMap) data.get(pageDataSet.name); - if (dsData == null) continue; - - //读取待保存的bean - DefaultEntity bean = readBeanFromPage(pageDataSet, dsData); - SwMap dsFilter = (SwMap)filter.get(pageDataSet.name); - if (dsFilter != null && bean.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, bean, f -> { - //link类型,去取另一个dataset的值 - if (SwEnum.FilterType.LINK.value.equals(f.type)) { - DefaultEntity lv = map.get(f.linkDb); - if (lv != null) return lv.get(f.linkField); - } - return dsFilter.get(f.name); - }); - } - checkBean(bean); - } - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - for (DefaultEntity bean: map.values()) { - saveBean(bean); - } - } - - @Override - public void doAfterDbCommit() { - for (DefaultEntity bean: map.values()) { - afterCommit(bean); - } - } - - @Override - public void doAfterDbRollback() { - for (DefaultEntity bean: map.values()) { - afterRollback(bean); - } - } - }); - return R.success(map); - } - - /** - * 从页面获取待保存的bean - * - * @param pageDataSet - * @param data - * @return - */ - protected DefaultEntity readBeanFromPage(PageDataSet pageDataSet, SwMap data) { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new SwException("没有找到待保存的表定义:" + pageDataSet.name); - long id = data.readLong(table.getIdField()); - - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - DefaultEntity bean; - if (id <= 0) { - bean = dao.createBean(); - bean.setIsNew(true); - bean.setEntityId(DbEngine.getInstance().nextId()); - } else { - bean = dao.queryEntity(id); - if (bean == null) { - throw new SwException("没有找到待保存的记录:" + table.getName() + "." + id); - } - } - //暂时不考虑list保存的情况 - data = (SwMap) data.get("form"); - bean.getData().putAll(data); - return bean; - } - - /** - * 保存校验 - * - * @param bean - */ - protected void checkBean(DefaultEntity bean) { - ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); - for (ModelField field : table.getFields()) { - String value = bean.getStr(field.getName()); - //非空校验 - if (field.isNotNull() && StringUtils.isEmpty(value)) { - throw new SwException("字段不允许为空:" + field.getTitle()); - } - - //长度校验 - if (StringUtils.isNotEmpty(value)) { - int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; - if (len > 0 && CommUtil.getStrLenB(value) > len) { - throw new SwException("字段值超长:" + field.getTitle()); - } - } - } - //唯一键校验 - EntityDao dao = DbEngine.getInstance().findDao(bean.getTableName()); - for (ModelIndex mi : table.getIndexes()) { - if (mi.isUnique()) { - dao.checkUnique(bean, mi.getFields().split(",")); - } - } - } - - protected void saveBean(DefaultEntity bean) { - final String tableName = bean.getTableName(); - EntityDao dao = DbEngine.getInstance().findDao(tableName); - if (bean.isNew()) { - dao.insertEntity(bean); - } else { - 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); - if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { - List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(bean); - mapTreeBean.put(tableName, listTreeBean); - } - } - } - - protected void afterCommit(DefaultEntity bean) { - final String tableName = bean.getTableName(); - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(tableName); - List listTreeBean = mapTreeBean.get(tableName); - //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 - if (listTreeBean != null && !listTreeBean.isEmpty()) { - for (DefaultEntity b : listTreeBean) { - cache.put(b); - } - } else { - cache.put(bean); - } - } - } - - protected void afterRollback(DefaultEntity bean) { - final String tableName = bean.getTableName(); - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(tableName); - cache.reset(bean); - } - } - - //将关联的值设上 - protected void setLinkValue(PageDataSet pageDataSet, DefaultEntity bean, IGetValue iGetValue) { - ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); - for (PageDatasetFilter f : pageDataSet.filters) { - String v = bean.getStr(f.field); - //有值,就不管 - if (v != null && !v.equals(table.findField(f.field).getDefaultValue())) continue; - - if (SwEnum.FilterType.CONST.value.equals(f.type)) {//常量 - bean.put(f.field, f.value); - } else if (SwEnum.FilterType.PARAM.value.equals(f.type)) {//参数 - bean.put(f.field, f.value); - } else if (SwEnum.FilterType.LINK.value.equals(f.type)) {//参数 - Object value = iGetValue.getValue(f); - if (value != null) { - bean.put(f.field, value); - } - } - } - } - - interface IGetValue { - Object getValue(PageDatasetFilter f); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageService.java deleted file mode 100644 index f062cbb..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynPageService.java +++ /dev/null @@ -1,67 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.mvc.service.*; -import cc.smtweb.framework.core.session.UserSession; - -/** - * Created by Akmm at 2022/4/21 17:43 - * 动态页面引擎 - */ -@SwService -public class DynPageService extends AbstractCompService { - public final static String TYPE_ADD = "add"; - - @Override - protected IHandler createHandler(String type) { - switch (type) { - case TYPE_ADD: - return new DynPageAddHandler(); - case TYPE_LOAD: - return new DynPageLoadOneHandler(); - case TYPE_SAVE: - return new DynPageSaveHandler(); - case TYPE_DEL: - return new DynPageDelHandler(); - } - return null; - } - - //新增 - public R add(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_ADD); - } - - //保存指定数据集 - public R saveOne(@SwBody SwMap params, UserSession us) { - try { - DynPageSaveHandler handler = (DynPageSaveHandler) getHandler(params, us, TYPE_SAVE); - return handler.saveOne(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //删除指定数据集 - public R delOne(@SwBody SwMap params, UserSession us) { - try { - DynPageDelHandler handler = (DynPageDelHandler) getHandler(params, us, TYPE_DEL); - return handler.delOne(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //列表总记录数及合计栏 - public R total(@SwBody SwMap params, UserSession us) { - try { - DynPageLoadOneHandler handler = (DynPageLoadOneHandler) getHandler(params, us, TYPE_LOAD); - return handler.getTotal(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynRetBean.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynRetBean.java deleted file mode 100644 index ce1c89d..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/DynRetBean.java +++ /dev/null @@ -1,33 +0,0 @@ -package cc.smtweb.system.bpm.web.engine; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.SwListData; - -/** - * Created by Akmm at 2022/4/21 19:26 - * 动态页面加载 - */ -public class DynRetBean { - //单个表单 - private SwMap form = null; - //列表返回 - private SwListData list = null; - - public static DynRetBean createBean(SwMap form) { - DynRetBean bean = new DynRetBean(); - bean.form = form; - return bean; - } - - public static DynRetBean createList(SwListData list) { - DynRetBean bean = new DynRetBean(); - bean.list = list; - return bean; - } -/* - public static DynRetBean createTree(SwListData list) { - DynRetBean bean = new DynRetBean(); - bean.list = list; - return bean; - }*/ -} 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 new file mode 100644 index 0000000..6227598 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java @@ -0,0 +1,40 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +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.ModelFormHelper; +import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; + +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + */ +public abstract class AbstractDynPageHandler extends AbstractHandler { + //页面定义id + protected long pageId; + protected Map mapDataset; + + @Override + public void init(SwMap params, UserSession us) { + super.init(params, us); + pageId = params.readLong("pageId"); + + mapDataset = ModelFormHelper.parsePageDataset(pageId); + if (mapDataset == null) throw new SwException("没有找到页面定义数据!"); + } + + protected PageDataSet findDataset(String name) { + return mapDataset.get(name); + } + + //获取第一个,主数据集 + protected PageDataSet findMasterDataset() { + for (PageDataSet dataSet: mapDataset.values()) { + return dataSet; + } + return null; + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageAddHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageAddHandler.java new file mode 100644 index 0000000..510bb6f --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageAddHandler.java @@ -0,0 +1,41 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 新增操作,初始化定义的数据集 + */ +public class DynPageAddHandler extends AbstractDynPageHandler { + + @Override + public R doWork() throws Exception { + //返回的数据,以dataset.name为key,查出的结果(bean或list)为value + Map mapRet = new HashMap<>(); + for (PageDataSet dataSet : mapDataset.values()) { + if (!dataSet.canEdit) { + continue; + } + if (SwEnum.DatasetType.FORM.value.equals(dataSet.type)) {//单表 + //懒加载,给个空对象 + if (dataSet.lazy) { + mapRet.put(dataSet.name, new SwMap()); + continue; + } + mapRet.put(dataSet.name, DynPageHelper.createBean(dataSet)); + } else if (SwEnum.DatasetType.TREE.value.equals(dataSet.type)) {//树 + mapRet.put(dataSet.name, new SwMap()); + } else if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type)) {//非枚举 + mapRet.put(dataSet.name, SwListData.create(null, 0)); + } + } + return R.success(mapRet); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java new file mode 100644 index 0000000..b559988 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java @@ -0,0 +1,164 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwException; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwEnum; +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.jdbc.AbsDbWorker; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 删除操作 + */ +public class DynPageDelHandler extends AbstractDynPageHandler { + + @Override + public R doWork() throws Exception { + return delAll(); + } + + /** + * 删除指定数据集,入参{pageId, dataset, id} + * + * @return + */ + public R delOne() { + //数据集 + String dbName = params.readString("dataset"); + //对应的数据集定义 + PageDataSet pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); + + long id = params.readLong("id"); + if (id == 0) throw new SwException("没有收到待删除记录Id!"); + + checkBean(pageDataSet, id); + + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new SwException("没有找到指定的的表定义:" + pageDataSet.name + "!"); + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + dao.deleteEntity(id); + } + + @Override + public void doAfterDbCommit() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); + cache.remove(id); + } + } + }); + return R.success(); + } + + public R delAll() { + long id = params.readLong("id"); + if (id == 0) throw new SwException("没有收到待删除记录Id!"); + //校验主表即可 + PageDataSet masterDs = findMasterDataset(); + if (masterDs == null || !masterDs.canEdit || !SwEnum.DatasetType.FORM.value.equals(masterDs.type)) + throw new SwException("主表不允许删除!"); + checkBean(masterDs, id); + + Map mapRemovableInfo = new HashMap<>(); + for (PageDataSet pageDataSet : mapDataset.values()) { + //非表单编辑,不管 + if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + RemovableInfo info = mapRemovableInfo.computeIfAbsent(table.getName(), k -> { + RemovableInfo ret = new RemovableInfo(k); + if (pageDataSet != masterDs) {//非主表,记录一下关联字段 + PageDatasetFilter f = pageDataSet.findFilterByDs(masterDs.name); + if (f == null) { + throw new SwException("无法删除表【" + pageDataSet.name + "】,此表未关联主表!"); + } + ret.field = f.field; + } + return ret; + }); + + if (pageDataSet == masterDs || !table.isNeedCache()) { + //主表或没有缓存,直接按FK删除 + info.addId(id); + } else { + info.needCache = true; + //有缓存,需要先把id查出来 + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + List list = dao.queryIdListWhere(info.field + " = ?", id); + info.ids.addAll(list); + } + } + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + for (RemovableInfo info : mapRemovableInfo.values()) { + EntityDao dao = DbEngine.getInstance().findDao(info.tableName); + if (!info.needCache && StringUtils.isNotEmpty(info.field)) { + //按外键来删除 + dao.deleteEntity(" where " + info.field + "=?", id); + } else { + dao.deleteEntity(info.ids); + } + } + } + + @Override + public void doAfterDbCommit() { + for (RemovableInfo info : mapRemovableInfo.values()) { + if (!info.needCache) continue; + AbstractCache cache = CacheManager.getIntance().getCache(info.tableName); + cache.remove(id); + + } + } + }); + return R.success(); + } + + /** + * 删除校验 + * + * @param pageDataSet + * @param id + */ + protected void checkBean(PageDataSet pageDataSet, long id) { + //校验外键引用关系 + } + + + /** + * 待删除信息 + */ + class RemovableInfo { + String tableName; + String field = null; + boolean needCache = false; + List ids = new ArrayList<>(); + + public RemovableInfo(String tableName) { + this.tableName = tableName; + } + + void addId(long id) { + ids.add(id); + } + } +} 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 new file mode 100644 index 0000000..70e5505 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java @@ -0,0 +1,237 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.common.SwEnum; +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.ModelTable; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.util.MapUtil; +import cc.smtweb.system.bpm.web.design.form.define.*; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; + +/** + * Created by Akmm at 2022/4/23 10:01 + * 动态页面辅助类 + */ +public class DynPageHelper { + /** + * 新建bean + * + * @param dataSet + * @return + */ + public static SwMap createBean(PageDataSet dataSet) { + //主表 + ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); + EntityDao dao = DbEngine.getInstance().findDao(masterTable.getTableName()); + try { + DefaultEntity bean = dao.createBean(); + return bean.getData(); + } catch (Exception e) { + throw new SwException(e); + } + } + + /** + * 构建select fields from table + * + * @param dataSet + * @return + */ + public static SqlNamedPara buildSelectSql(PageDataSet dataSet, Map params) { + StringBuilder sql = new StringBuilder(512); + + SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); + + sql.append(buildSelFieldsSql(dataSet, sqlNamedPara)); + if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { + sql.append(" where ").append(sqlNamedPara.sql); + } + if (dataSet.sortFields != null) { + String s = ""; + for (PageDatasetSortField sf : dataSet.sortFields) { + s += "," + sf.field + " " + sf.type; + } + if (StringUtils.isNotEmpty(s)) { + sql.append(" order by ").append(s.substring(1)); + } + } + sqlNamedPara.sql = sql.toString(); + sqlNamedPara.page = MapUtil.readInt(params, SwConsts.PARAM_PAGE); + sqlNamedPara.rows = MapUtil.readInt(params, SwConsts.PARAM_ROWS); + return sqlNamedPara; + } + + public static SqlNamedPara buildSumSql(PageDataSet dataSet, Map 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; + sql.append(","); + if (!SwEnum.SummaryType.instance.isText(field.summary)) { + sql.append(field.summary).append("(").append(field.name).append(") ").append(field.name); + } else { + sql.append("'").append(field.summary).append("' ").append(field.name); + } + } + sqlNamedPara.sql = sql.toString() + " from (" + sqlNamedPara.sql + ") xxxxa"; + return sqlNamedPara; + } + + private static String buildSelFieldsSql(PageDataSet dataSet, SqlNamedPara sqlNamedPara) { + StringBuilder sql = new StringBuilder(512); + //主表 + ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); + //非查询列表,或sql为空,则自己组装select sql + if (!SwEnum.DatasetType.LIST.equals(dataSet.type) || StringUtils.isEmpty(dataSet.sql)) { + sql.append("select "); + for (PageDatasetField field : dataSet.fields) { + sql.append(field.field); + //加别名 + if (!field.field.equalsIgnoreCase(field.name)) { + sql.append(" ").append(field.name); + sqlNamedPara.addFieldAlias(field.field, field.name); + } + sql.append(","); + } + sql.setCharAt(sql.length() - 1, ' '); + sql.append(" from ").append(masterTable.getName()); + return sql.toString(); + } else { + return dataSet.sql; + } + } + + /** + * 构建where条件:组合固定和动态条件 + * + * @param dataSet + * @param params + * @return + */ + public static SqlNamedPara buildWhereSql(PageDataSet dataSet, Map params) { + StringBuilder sql = new StringBuilder(512); + SwMap args = new SwMap(); + + if (StringUtils.isNotEmpty(dataSet.fixedCond)) { + sql.append("(").append(dataSet.fixedCond).append(")"); + } + //记录归属于固定条件的filter,最后设置参数 + Set setFixedFilter = new HashSet<>(); + for (PageDatasetFilter filter : dataSet.filters) { + setFixedFilter.add(filter.name); + } + if (!dataSet.dynCond.isEmpty()) { + String s = buildDynCondSql(dataSet, dataSet.dynCond, params, args, setFixedFilter); + if (StringUtils.isNotEmpty(s)) { + if (sql.length() > 0) sql.append(" and "); + sql.append(s); + } + } + for (String s : setFixedFilter) { + args.put(s, params.get(s)); + } + return new SqlNamedPara(sql.toString(), args); + } + + /** + * 构建动态条件 + * + * @param dataSet + * @param dynCond + * @param params + * @param args + * @param setFixedFilter + * @return + */ + private static String buildDynCondSql(PageDataSet dataSet, PageDatasetDynCond dynCond, Map params, SwMap args, Set setFixedFilter) { + if (dynCond.isOpt()) {//是and/or + StringBuilder sql = new StringBuilder(256); + boolean b = false; + //递归调用 + for (PageDatasetDynCond dc : dynCond.children) { + String s = buildDynCondSql(dataSet, dc, params, args, setFixedFilter); + if (StringUtils.isEmpty(s)) continue; + + if (b) sql.append(" ").append(dynCond.opt).append(" "); + sql.append(s); + b = true; + } + return "(" + sql.toString() + ")"; + } + + boolean isNameSelf = setFixedFilter.contains(dynCond.param); + setFixedFilter.remove(dynCond.param); + + PageDatasetFilter filter = dataSet.getFilter(dynCond.param); + if (filter == null) throw new SwException("没有找到filter(" + dynCond.param + ")!"); + + Object value = null; + if (SwEnum.FilterType.CONST.value.equals(filter.type)) { + value = filter.value; + //todo 有变量的情况需要处理 + } else { + value = params.get(filter.name); + } + if (value == null || StringUtils.isEmpty(value.toString())) { + if (filter.required) { + throw new SwException("过滤条件不能为空(" + dynCond.param + ")!"); + } + return null; + } + IBuilderExpr builder = getBuilder(dynCond.opt); + String ns = isNameSelf ? filter.name : filter.name + "_" + dynCond.hashCode(); + return builder.build(dynCond.opt, filter.sqlName, ns, value, args); + } + + private static Map mapBuilder; + private static IBuilderExpr baseBuilder; + + static { + baseBuilder = (opt, field, name, value, args) -> { + args.put(name, value); + return field + " " + opt + " :" + name; + }; + mapBuilder = new HashMap<>(); + mapBuilder.put(SwEnum.OptType.LIKE.value, (opt, field, name, value, args) -> { + args.put(name, "%" + value + "%"); + return field + " like :" + name; + }); + + mapBuilder.put(SwEnum.OptType.PLIKE.value, (opt, field, name, value, args) -> { + args.put(name, value + "%"); + return field + " like :" + name; + }); + + mapBuilder.put(SwEnum.OptType.BT.value, (opt, field, name, value, args) -> { + String[] ss = value.toString().split(","); + if (ss.length != 2) throw new SwException("介于条件,参数值个数错误!"); + args.put(name + "_1", ss[0]); + args.put(name + "_2", ss[1]); + return "(" + field + ">=:" + name + "_1 and " + field + "<=:" + name + "_2)"; + }); + } + + private static IBuilderExpr getBuilder(String opt) { + IBuilderExpr builder = mapBuilder.get(opt); + return builder != null ? builder : baseBuilder; + } + + interface IBuilderExpr { + String build(String opt, String field, String name, Object value, Map args); + } + +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadOneHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadOneHandler.java new file mode 100644 index 0000000..6aadbcc --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadOneHandler.java @@ -0,0 +1,101 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; + +import java.util.List; + +import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; + +/** + * Created by Akmm at 2022/4/21 17:53 + */ +public class DynPageLoadOneHandler extends AbstractDynPageHandler { + //数据集 + private String dbName; + //过滤条件 + private SwMap filter = new SwMap(); + + //对应的数据集定义 + private PageDataSet pageDataSet; + + @Override + public R doWork() throws Exception { + dbName = params.readString("dataset"); + filter = (SwMap)params.get("filter"); + + pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); + + DynRetBean bean = null; + if (SwEnum.DatasetType.LIST.value.equals(pageDataSet.type)) {//列表类 + bean = DynRetBean.createList(loadList()); + } else if (SwEnum.DatasetType.TREE.value.equals(pageDataSet.type)) {//列表类 +// return new DynRetBean(loadTree()); + } else {//列表类 + bean = DynRetBean.createBean(loadOne()); + } + + return R.success(bean); + } + + /** + * 返回单个对象 + * @return + */ + private SwMap loadOne() { + SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); + SwMap map = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.paras, SwMap.class); + if (map == null) { + throw new SwException("没有找到指定数据(ds=" + pageDataSet.name + ")"); + } + ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); + EntityHelper.loadBeanLink(masterTable.getName(), map, sqlPara.mapFieldAlias); + return map; + } + + /** + * 返回list + * @return + */ + private SwListData loadList() { + SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); + List list; + if (sqlPara.page > 0 && sqlPara.rows > 0) { + list = DbEngine.getInstance().pagedQueryN(sqlPara.sql, SwMap.class, (sqlPara.page - 1) * sqlPara.rows, sqlPara.rows, sqlPara.paras); + } else { + list = DbEngine.getInstance().queryN(sqlPara.sql, sqlPara.paras, SwMap.class); + } + ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); + EntityHelper.loadBeanLink(masterTable.getName(), list, sqlPara.mapFieldAlias); + return SwListData.create(list, sqlPara.rows); + } + + /** + * 计算分页数据 + * @return + */ + public R getTotal() { + try { + SqlNamedPara sqlPara = DynPageHelper.buildSumSql(pageDataSet, filter); + + SwMap mapFooter = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.paras, SwMap.class); + + R r = R.success(); + r.put("total", mapFooter.get(TOTAL_KEY)); + r.put("footer", mapFooter); + return r; + } catch (Exception e) { + return R.error("计算合计失败!", e); + } + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java new file mode 100644 index 0000000..430a446 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java @@ -0,0 +1,263 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwEnum; +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.jdbc.AbsDbWorker; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelIndex; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.TreeHelper; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.system.bpm.web.design.form.define.PageDataSet; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 保存指定数据集操作 + * 入参:{pageId, data:} + */ +public class DynPageSaveHandler extends AbstractDynPageHandler { + private Map> mapTreeBean = new HashMap<>(); + + @Override + public R doWork() { + return saveAll(); + } + + /** + * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + */ + public R saveOne() { + //数据集 + String dbName = params.readString("dataset"); + SwMap filter = (SwMap) params.get("filter"); + //待保存数据 + SwMap data = params.readMap("data"); + if (data == null) throw new SwException("没有收到待保存的的数据:" + dbName + "!"); + //对应的数据集定义 + PageDataSet pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new SwException("没有找到指定的的数据集定义:" + dbName + "!"); + //读取待保存的bean + DefaultEntity bean = readBeanFromPage(pageDataSet, data); + if (filter != null && bean.isNew()) {//有过滤条件,将关联的值设上 + setLinkValue(pageDataSet, bean, f -> filter.get(f.name)); + } + checkBean(bean); + + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + saveBean(bean); + } + + @Override + public void doAfterDbCommit() { + afterCommit(bean); + } + + @Override + public void doAfterDbRollback() { + afterRollback(bean); + } + }); + return R.success(bean); + } + + /** + * 保存对象,所有数据集数据对象,{ ds1: {form:{},list:{total:0,rows:[]}}} + * + * @return + */ + public R saveAll() { + SwMap data = params.readMap("data"); + if (data == null) throw new SwException("没有收到待保存的的数据!"); + SwMap filter = (SwMap) params.get("filter"); + + Map map = new LinkedHashMap<>(); + for (PageDataSet pageDataSet : mapDataset.values()) { + //非表单编辑,不管 + if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; + SwMap dsData = (SwMap) data.get(pageDataSet.name); + if (dsData == null) continue; + + //读取待保存的bean + DefaultEntity bean = readBeanFromPage(pageDataSet, dsData); + SwMap dsFilter = (SwMap)filter.get(pageDataSet.name); + if (dsFilter != null && bean.isNew()) {//有过滤条件,将关联的值设上 + setLinkValue(pageDataSet, bean, f -> { + //link类型,去取另一个dataset的值 + if (SwEnum.FilterType.LINK.value.equals(f.type)) { + DefaultEntity lv = map.get(f.linkDb); + if (lv != null) return lv.get(f.linkField); + } + return dsFilter.get(f.name); + }); + } + checkBean(bean); + } + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + for (DefaultEntity bean: map.values()) { + saveBean(bean); + } + } + + @Override + public void doAfterDbCommit() { + for (DefaultEntity bean: map.values()) { + afterCommit(bean); + } + } + + @Override + public void doAfterDbRollback() { + for (DefaultEntity bean: map.values()) { + afterRollback(bean); + } + } + }); + return R.success(map); + } + + /** + * 从页面获取待保存的bean + * + * @param pageDataSet + * @param data + * @return + */ + protected DefaultEntity readBeanFromPage(PageDataSet pageDataSet, SwMap data) { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new SwException("没有找到待保存的表定义:" + pageDataSet.name); + long id = data.readLong(table.getIdField()); + + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + DefaultEntity bean; + if (id <= 0) { + bean = dao.createBean(); + bean.setIsNew(true); + bean.setEntityId(DbEngine.getInstance().nextId()); + } else { + bean = dao.queryEntity(id); + if (bean == null) { + throw new SwException("没有找到待保存的记录:" + table.getName() + "." + id); + } + } + //暂时不考虑list保存的情况 + data = (SwMap) data.get("form"); + bean.getData().putAll(data); + return bean; + } + + /** + * 保存校验 + * + * @param bean + */ + protected void checkBean(DefaultEntity bean) { + ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); + for (ModelField field : table.getFields()) { + String value = bean.getStr(field.getName()); + //非空校验 + if (field.isNotNull() && StringUtils.isEmpty(value)) { + throw new SwException("字段不允许为空:" + field.getTitle()); + } + + //长度校验 + if (StringUtils.isNotEmpty(value)) { + int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; + if (len > 0 && CommUtil.getStrLenB(value) > len) { + throw new SwException("字段值超长:" + field.getTitle()); + } + } + } + //唯一键校验 + EntityDao dao = DbEngine.getInstance().findDao(bean.getTableName()); + for (ModelIndex mi : table.getIndexes()) { + if (mi.isUnique()) { + dao.checkUnique(bean, mi.getFields().split(",")); + } + } + } + + protected void saveBean(DefaultEntity bean) { + final String tableName = bean.getTableName(); + EntityDao dao = DbEngine.getInstance().findDao(tableName); + if (bean.isNew()) { + dao.insertEntity(bean); + } else { + 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); + if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { + List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(bean); + mapTreeBean.put(tableName, listTreeBean); + } + } + } + + protected void afterCommit(DefaultEntity bean) { + final String tableName = bean.getTableName(); + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(tableName); + List listTreeBean = mapTreeBean.get(tableName); + //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 + if (listTreeBean != null && !listTreeBean.isEmpty()) { + for (DefaultEntity b : listTreeBean) { + cache.put(b); + } + } else { + cache.put(bean); + } + } + } + + protected void afterRollback(DefaultEntity bean) { + final String tableName = bean.getTableName(); + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(tableName); + cache.reset(bean); + } + } + + //将关联的值设上 + protected void setLinkValue(PageDataSet pageDataSet, DefaultEntity bean, IGetValue iGetValue) { + ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); + for (PageDatasetFilter f : pageDataSet.filters) { + String v = bean.getStr(f.field); + //有值,就不管 + if (v != null && !v.equals(table.findField(f.field).getDefaultValue())) continue; + + if (SwEnum.FilterType.CONST.value.equals(f.type)) {//常量 + bean.put(f.field, f.value); + } else if (SwEnum.FilterType.PARAM.value.equals(f.type)) {//参数 + bean.put(f.field, f.value); + } else if (SwEnum.FilterType.LINK.value.equals(f.type)) {//参数 + Object value = iGetValue.getValue(f); + if (value != null) { + bean.put(f.field, value); + } + } + } + } + + interface IGetValue { + Object getValue(PageDatasetFilter f); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java new file mode 100644 index 0000000..569f828 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java @@ -0,0 +1,67 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.mvc.service.*; +import cc.smtweb.framework.core.session.UserSession; + +/** + * Created by Akmm at 2022/4/21 17:43 + * 动态页面引擎 + */ +@SwService +public class DynPageService extends AbstractCompService { + public final static String TYPE_ADD = "add"; + + @Override + protected IHandler createHandler(String type) { + switch (type) { + case TYPE_ADD: + return new DynPageAddHandler(); + case TYPE_LOAD: + return new DynPageLoadOneHandler(); + case TYPE_SAVE: + return new DynPageSaveHandler(); + case TYPE_DEL: + return new DynPageDelHandler(); + } + return null; + } + + //新增 + public R add(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_ADD); + } + + //保存指定数据集 + public R saveOne(@SwBody SwMap params, UserSession us) { + try { + DynPageSaveHandler handler = (DynPageSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveOne(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //删除指定数据集 + public R delOne(@SwBody SwMap params, UserSession us) { + try { + DynPageDelHandler handler = (DynPageDelHandler) getHandler(params, us, TYPE_DEL); + return handler.delOne(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //列表总记录数及合计栏 + public R total(@SwBody SwMap params, UserSession us) { + try { + DynPageLoadOneHandler handler = (DynPageLoadOneHandler) getHandler(params, us, TYPE_LOAD); + return handler.getTotal(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java new file mode 100644 index 0000000..dd5b767 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java @@ -0,0 +1,33 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.SwListData; + +/** + * Created by Akmm at 2022/4/21 19:26 + * 动态页面加载 + */ +public class DynRetBean { + //单个表单 + private SwMap form = null; + //列表返回 + private SwListData list = null; + + public static DynRetBean createBean(SwMap form) { + DynRetBean bean = new DynRetBean(); + bean.form = form; + return bean; + } + + public static DynRetBean createList(SwListData list) { + DynRetBean bean = new DynRetBean(); + bean.list = list; + return bean; + } +/* + public static DynRetBean createTree(SwListData list) { + DynRetBean bean = new DynRetBean(); + bean.list = list; + return bean; + }*/ +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CandidateEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CandidateEntity.java new file mode 100644 index 0000000..42836d0 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CandidateEntity.java @@ -0,0 +1,57 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 候选信息人 + */ +@SwTable("WF_CANDIDATE") +public class CandidateEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CANDIDATE"; + + public CandidateEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cnd_id"); + } + + public void setId(long cndId) { + put("cnd_id", cndId); + } + + public long getPriId() { + return getLong("cnd_pri_id"); + } + + public void setPriId(long cndPriId) { + put("cnd_pri_id", cndPriId); + } + + public long getTskId() { + return getLong("cnd_tsk_id"); + } + + public void setTskId(long cndTskId) { + put("cnd_tsk_id", cndTskId); + } + + public long getUserId() { + return getLong("cnd_user_id"); + } + + public void setUserId(long cndUserId) { + put("cnd_user_id", cndUserId); + } + + public int getIsSign() { + return getInt("cnd_is_sign"); + } + + public void setIsSign(int cndIsSign) { + put("cnd_is_sign", cndIsSign); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CareEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CareEntity.java new file mode 100644 index 0000000..15bdc11 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CareEntity.java @@ -0,0 +1,49 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 候选信息人 + */ +@SwTable("WF_CARE") +public class CareEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CARE"; + + public CareEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cr_id"); + } + + public void setId(long crId) { + put("cr_id", crId); + } + + public long getPriId() { + return getLong("cr_pri_id"); + } + + public void setPriId(long crPriId) { + put("cr_pri_id", crPriId); + } + + public long getUserId() { + return getLong("cr_user_id"); + } + + public void setUserId(long crUserId) { + put("cr_user_id", crUserId); + } + + public long getTime() { + return getLong("cr_time"); + } + + public void setTime(long crTime) { + put("cr_time", crTime); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CommentEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CommentEntity.java new file mode 100644 index 0000000..260e8b2 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/CommentEntity.java @@ -0,0 +1,65 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 审批意见 + */ +@SwTable("WF_COMMENT") +public class CommentEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_COMMENT"; + + public CommentEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cmt_id"); + } + + public void setId(long cmtId) { + put("cmt_id", cmtId); + } + + public long getPriId() { + return getLong("cmt_pri_id"); + } + + public void setPriId(long cmtPriId) { + put("cmt_pri_id", cmtPriId); + } + + public long getTskId() { + return getLong("cmt_tsk_id"); + } + + public void setTskId(long cmtTskId) { + put("cmt_tsk_id", cmtTskId); + } + + public long getUserId() { + return getLong("cmt_user_id"); + } + + public void setUserId(long cmtUserId) { + put("cmt_user_id", cmtUserId); + } + + public String getContent() { + return getStr("cmt_content"); + } + + public void setContent(String cmtContent) { + put("cmt_content", cmtContent); + } + + public long getTime() { + return getLong("cmt_time"); + } + + public void setTime(long cmtTime) { + put("cmt_time", cmtTime); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java new file mode 100644 index 0000000..e4409f5 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java @@ -0,0 +1,61 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.system.bpm.web.design.flow.ModelProc; + +import java.util.*; + +/** + * Created by Akmm at 2020/3/4 11:35 + * 单据流程实例组件 + */ +public class FlowInstance { + //流程定义 + public ModelProc proc_def; + + //流程实例 + public ProcinstEntity proc_inst; + + //活动任务 + public TaskEntity act_inst; + + //操作类型 新增/编辑/查看 + public int opt_mode = 0;//CmEnum.OperatorType.VIEW; + + //流程执行变量 +// public Map variables = new HashMap<>(); + + public List> tasks = new ArrayList<>(); + + public FlowInstance() { +// this.context = context; + } + + //能否编辑 + public boolean canEdit() { +// return opt_mode == CmEnum.OperatorType.NEW || proc_inst.getstatu() == FlowConsts.InstanceStatu.BEGIN.value; + return false; + } + + public boolean notMakeCanEdit() { + /*Map mapPermisson = MenuHelper.getPermission(context); + boolean othCanEdit = BillFlowWfHelper.getPropBool(proc_def.getEntityId(), FlowConsts.NULL_STR, FlowConsts.ProcProperty.CAN_EDIT_OTHER); + ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); + return act != null && !act_inst.isMake() && act.getActEdit() && othCanEdit && MenuHelper.hasPermisson(mapPermisson, CmEnum.MenuFuncRight.UPD.value);*/ + return false; + } + + public boolean isHandleMake() { +// ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); +// return !act_inst.isMake() && isHandleMakeEx(act); + return false; + } + + + private boolean isHandleMakeEx(TaskEntity act) { +// if (EntityUtil.isNull(act)) return false; +// return BillFlowWfHelper.getPropInt(proc_inst.getProcDefId(), act.getActId(), FlowConsts.ProcProperty.HANDLER_RANGE) == CmEnum.HandlerRange.MAKE.value; + return false; + } + + +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/ProcinstEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/ProcinstEntity.java new file mode 100644 index 0000000..a0e260e --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/ProcinstEntity.java @@ -0,0 +1,129 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 流程实例 + */ +@SwTable("WF_PROCINST") +public class ProcinstEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_PROCINST"; + + public ProcinstEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("pri_id"); + } + + public void setId(long priId) { + put("pri_id", priId); + } + + public String getBillCode() { + return getStr("pri_bill_code"); + } + + public void setBillCode(String priBillCode) { + put("pri_bill_code", priBillCode); + } + + public long getMakeDate() { + return getLong("pri_make_date"); + } + + public void setMakeDate(long priMakeDate) { + put("pri_make_date", priMakeDate); + } + + public int getBillType() { + return getInt("pri_bill_type"); + } + + public void setBillType(int priBillType) { + put("pri_bill_type", priBillType); + } + + public long getPartyId() { + return getLong("pri_party_id"); + } + + public void setPartyId(long priPartyId) { + put("pri_party_id", priPartyId); + } + + public long getDeptId() { + return getLong("pri_dept_id"); + } + + public void setDeptId(long priDeptId) { + put("pri_dept_id", priDeptId); + } + + public String getBillDesc() { + return getStr("pri_bill_desc"); + } + + public void setBillDesc(String priBillDesc) { + put("pri_bill_desc", priBillDesc); + } + + public long getPrcId() { + return getLong("pri_prc_id"); + } + + public void setPrcId(long priPrcId) { + put("pri_prc_id", priPrcId); + } + + public long getStartTime() { + return getLong("pri_start_time"); + } + + public void setStartTime(long priStartTime) { + put("pri_start_time", priStartTime); + } + + public long getEndTime() { + return getLong("pri_end_time"); + } + + public void setEndTime(long priEndTime) { + put("pri_end_time", priEndTime); + } + + public long getUserId() { + return getLong("pri_user_id"); + } + + public void setUserId(long priUserId) { + put("pri_user_id", priUserId); + } + + public long getTaskId() { + return getLong("pri_task_id"); + } + + public void setTaskId(long priTaskId) { + put("pri_task_id", priTaskId); + } + + public int getStatu() { + return getInt("pri_statu"); + } + + public void setStatu(int priStatu) { + put("pri_statu", priStatu); + } + + public String getBillInfo() { + return getStr("pri_bill_info"); + } + + public void setBillInfo(String priBillInfo) { + put("pri_bill_info", priBillInfo); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/SignEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/SignEntity.java new file mode 100644 index 0000000..8c23378 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/SignEntity.java @@ -0,0 +1,74 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 会签信息 + */ +@SwTable("WF_SIGN") +public class SignEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_SIGN"; + + public SignEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("sgn_id"); + } + + public void setId(long sgnId) { + put("sgn_id", sgnId); + } + + public long getPriId() { + return getLong("sgn_pri_id"); + } + + public void setPriId(long sgnPriId) { + put("sgn_pri_id", sgnPriId); + } + + public long getTskId() { + return getLong("sgn_tsk_id"); + } + + public void setTskId(long sgnTskId) { + put("sgn_tsk_id", sgnTskId); + } + + public long getUserId() { + return getLong("sgn_user_id"); + } + + public void setUserId(long sgnUserId) { + put("sgn_user_id", sgnUserId); + } + + public int getAgree() { + return getInt("sgn_agree"); + } + + public void setAgree(int sgnAgree) { + put("sgn_agree", sgnAgree); + } + + public String getContent() { + return getStr("sgn_content"); + } + + public void setContent(String sgnContent) { + put("sgn_content", sgnContent); + } + + public long getTime() { + return getLong("sgn_time"); + } + + public void setTime(long sgnTime) { + put("sgn_time", sgnTime); + } + +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskEntity.java new file mode 100644 index 0000000..69631eb --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskEntity.java @@ -0,0 +1,161 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 活动实例 + */ +@SwTable("WF_TASK") +public class TaskEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_TASK"; + + public TaskEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("tsk_id"); + } + + public void setId(long tskId) { + put("tsk_id", tskId); + } + + public long getPriId() { + return getLong("tsk_pri_id"); + } + + public void setPriId(long tskPriId) { + put("tsk_pri_id", tskPriId); + } + + public long getPrcId() { + return getLong("tsk_prc_id"); + } + + public void setPrcId(long tskPrcId) { + put("tsk_prc_id", tskPrcId); + } + + public String getActId() { + return getStr("tsk_act_id"); + } + + public void setActId(String tskActId) { + put("tsk_act_id", tskActId); + } + + public String getActName() { + return getStr("tsk_act_name"); + } + + public void setActName(String tskActName) { + put("tsk_act_name", tskActName); + } + + public long getHandler() { + return getLong("tsk_handler"); + } + + public void setHandler(long tskHandler) { + put("tsk_handler", tskHandler); + } + + public long getStartTime() { + return getLong("tsk_start_time"); + } + + public void setStartTime(long tskStartTime) { + put("tsk_start_time", tskStartTime); + } + + public long getEndTime() { + return getLong("tsk_end_time"); + } + + public void setEndTime(long tskEndTime) { + put("tsk_end_time", tskEndTime); + } + + public int getStatu() { + return getInt("tsk_statu"); + } + + public void setStatu(int tskStatu) { + put("tsk_statu", tskStatu); + } + + public String getSubmitIdea() { + return getStr("tsk_submit_idea"); + } + + public void setSubmitIdea(String tskSubmitIdea) { + put("tsk_submit_idea", tskSubmitIdea); + } + + public boolean isMake() { + return getBool("tsk_is_make"); + } + + public void setMake(boolean tskIsMake) { + setBool("tsk_is_make", tskIsMake); + } + + public boolean isSign() { + return getBool("tsk_is_sign"); + } + + public void setSign(boolean tskIsSign) { + setBool("tsk_is_sign", tskIsSign); + } + + public String getSignTotal() { + return getStr("tsk_sign_total"); + } + + public void setSignTotal(String tskSignTotal) { + put("tsk_sign_total", tskSignTotal); + } + + public int getSignPass() { + return getInt("tsk_sign_pass"); + } + + public void setSignPass(int tskSignPass) { + put("tsk_sign_pass", tskSignPass); + } + + public int getSignAgree() { + return getInt("tsk_sign_agree"); + } + + public void setSignAgree(int tskSignAgree) { + put("tsk_sign_agree", tskSignAgree); + } + + public boolean getIsReject() { + return getBool("tsk_is_reject"); + } + + public void setReject(boolean tskIsReject) { + setBool("tsk_is_reject", tskIsReject); + } + + public boolean isRetake() { + return getBool("tsk_is_retake"); + } + + public void setIsRetake(boolean tskIsRetake) { + setBool("tsk_is_retake", tskIsRetake); + } + + public boolean isAuto() { + return getBool("tsk_is_auto"); + } + + public void setIsAuto(boolean tskIsAuto) { + setBool("tsk_is_auto", tskIsAuto); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskRelEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskRelEntity.java new file mode 100644 index 0000000..cde90ab --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/TaskRelEntity.java @@ -0,0 +1,49 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 活动之间的关系 + */ +@SwTable("WF_CARE") +public class TaskRelEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CARE"; + + public TaskRelEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("trl_id"); + } + + public void setId(long trlId) { + put("trl_id", trlId); + } + + public long getPriId() { + return getLong("trl_pri_id"); + } + + public void setPriId(long trlPriId) { + put("trl_pri_id", trlPriId); + } + + public long getSrcTaskId() { + return getLong("trl_src_task_id"); + } + + public void setSrcTaskId(long trlSrcTaskId) { + put("trl_src_task_id", trlSrcTaskId); + } + + public long getDstTaskId() { + return getLong("trl_dst_task_id"); + } + + public void setDstTaskId(long trlDstTaskId) { + put("trl_dst_task_id", trlDstTaskId); + } +} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/flow/BpmFlowListService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/flow/BpmFlowListService.java deleted file mode 100644 index 03d0c67..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/flow/BpmFlowListService.java +++ /dev/null @@ -1,26 +0,0 @@ -package cc.smtweb.system.bpm.web.flow; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.annotation.SwParam; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.engine.entity.AspModelPO; - -import java.util.List; - -// @Api(tags = "工作流流程接口") -@SwService -public class BpmFlowListService { - @SwParam - private DbEngine dbEngine; - -// @ApiOperation(value = "读取流程列表") - public R list(UserSession us) { - String sql = "select model_id, model_mc_id, model_site_id, model_name, model_status, model_content, model_type, model_version, model_create_uid, model_update_uid, model_create_time, model_last_time from sw_bpm.asp_model" + - " where model_type=? order by model_id"; - List list = dbEngine.query(sql, AspModelPO.class, 2); - - return R.success(list); - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java index de98a50..be57d3a 100644 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java +++ b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java @@ -11,19 +11,10 @@ import org.junit.Test; public class BuildJavaBean { @Test public void buildBean() { - String str = "`mf_id` bigint(20) NOT NULL,\n" + - " `mf_prj_id` bigint(20) NOT NULL DEFAULT '-1',\n" + - " `mf_mc_id` bigint(20) DEFAULT NULL COMMENT '-1',\n" + - " `mf_name` varchar(32) COLLATE utf8_unicode_ci DEFAULT '名称',\n" + - " `mf_title` varchar(200) COLLATE utf8_unicode_ci NOT NULL COMMENT '标题',\n" + - " `mf_type` int(4) DEFAULT '0',\n" + - " `mf_service` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '服务名',\n" + - " `mf_content` text COLLATE utf8_unicode_ci COMMENT '详细信息',\n" + - " `mf_create_uid` bigint(20) DEFAULT NULL,\n" + - " `mf_update_uid` bigint(20) DEFAULT NULL,\n" + - " `mf_create_at` bigint(20) NOT NULL DEFAULT '0',\n" + - " `mf_update_at` bigint(20) NOT NULL DEFAULT '0',\n" + - " `mf_remark` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '备注',\n"; + String str = "`trl_id` bigint(20) NOT NULL COMMENT 'null',\n" + + " `trl_pri_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + + " `trl_src_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + + " `trl_dst_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n"; String[] ss = str.split("\n"); for (String s: ss) { String[] s0 = s.trim().split(" "); @@ -41,6 +32,7 @@ public class BuildJavaBean { ttj = "Long"; break; case "tinyint": + case "smallint": case "int": tt = "int"; ttj = "Int"; 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 28baf09..b610f43 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 @@ -3,7 +3,7 @@ package cc.smtweb.system.bpm.test; import cc.smtweb.framework.core.common.R; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.system.bpm.spring.BpmApplication; -import cc.smtweb.system.bpm.web.engine.DynPageService; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest;