From 55a850e24ed78e50c52d5e67c7690b176a1dbb74 Mon Sep 17 00:00:00 2001 From: FLYPHT <1035748121@qq.com> Date: Fri, 16 Sep 2022 11:35:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/model/common/FlowModelDelHandler.java | 21 ++ .../engine/model/common/FlowModelListHandler.java | 33 +++ .../engine/model/common/FlowModelLoadHandler.java | 49 ++++ .../engine/model/common/FlowModelSaveHandler.java | 73 ++++++ .../web/engine/model/common/FlowModelService.java | 67 ++++++ .../web/engine/model/common/FlowTransHandler.java | 99 ++++++++ .../engine/model/common/IModelDetailReadIntf.java | 19 ++ .../web/engine/model/common/ModelDelHandler.java | 93 ++++++++ .../bpm/web/engine/model/common/ModelDetail.java | 147 ++++++++++++ .../bpm/web/engine/model/common/ModelHelper.java | 19 ++ .../web/engine/model/common/ModelListHandler.java | 50 +++++ .../web/engine/model/common/ModelLoadHandler.java | 80 +++++++ .../web/engine/model/common/ModelSaveHandler.java | 249 +++++++++++++++++++++ .../bpm/web/engine/model/common/ModelService.java | 64 ++++++ .../model/flow/listcard/single/FlowDelHandler.java | 23 -- .../flow/listcard/single/FlowListHandler.java | 37 --- .../listcard/single/FlowSingleLoadHandler.java | 61 ----- .../listcard/single/FlowSingleSaveHandler.java | 75 ------- .../flow/listcard/single/FlowSingleService.java | 68 +----- .../flow/listcard/single/FlowTransHandler.java | 100 --------- .../model/listcard/abshandler/AbsDelHandler.java | 84 ------- .../model/listcard/abshandler/AbsLoadHandler.java | 87 ------- .../model/listcard/abshandler/AbsSaveHandler.java | 205 ----------------- .../model/listcard/abshandler/ModelDelHandler.java | 86 ------- .../model/listcard/abshandler/ModelHelper.java | 19 -- .../listcard/abshandler/ModelListHandler.java | 48 ---- .../listcard/abshandler/ModelLoadHandler.java | 116 ---------- .../listcard/abshandler/ModelSaveHandler.java | 243 -------------------- .../model/listcard/abshandler/ModelService.java | 77 ------- .../engine/model/listcard/lclc1/LCLC1Config.java | 12 + .../engine/model/listcard/lclc1/LCLC1Define.java | 12 - .../model/listcard/lclc1/LCLC1DelHandler.java | 31 --- .../model/listcard/lclc1/LCLC1LoadHandler.java | 87 ------- .../model/listcard/lclc1/LCLC1SaveHandler.java | 31 --- .../engine/model/listcard/lclc1/LCLC1Service.java | 92 +++----- .../engine/model/listcard/lclt2/LCLT2Service.java | 2 +- .../web/engine/model/listcard/lcms/LCMsConfig.java | 47 ++++ .../web/engine/model/listcard/lcms/LCMsDefine.java | 14 -- .../engine/model/listcard/lcms/LCMsDelHandler.java | 97 +++----- .../model/listcard/lcms/LCMsLoadHandler.java | 68 +----- .../model/listcard/lcms/LCMsSaveHandler.java | 134 +++++------ .../engine/model/listcard/lcms/LCMsService.java | 76 +++---- .../model/listcard/normal/LCNormalService.java | 2 +- .../model/listcard/single/LCSingleService.java | 2 +- .../web/sys/base/billType/BillTypeSaveHandler.java | 2 +- .../bpm/web/sys/base/billType/BillTypeService.java | 14 +- 46 files changed, 1288 insertions(+), 1827 deletions(-) create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelDelHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelListHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelLoadHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelSaveHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelService.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/IModelDetailReadIntf.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDetail.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelListHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelLoadHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelSaveHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelService.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowDelHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowListHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleLoadHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleSaveHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowTransHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsDelHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsLoadHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsSaveHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelDelHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelHelper.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelListHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelLoadHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelSaveHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelService.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Define.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1DelHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1LoadHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1SaveHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsConfig.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelDelHandler.java new file mode 100644 index 0000000..b862bf3 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelDelHandler.java @@ -0,0 +1,21 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; +import cc.smtweb.system.bpm.web.engine.flow.FlowListener; + +/** + * Created by Akmm at 2022-09-01 15:03 + * 流程删除 + */ +public class FlowModelDelHandler extends ModelDelHandler implements FlowListener { + protected FlowInstance flowInstance; + @Override + protected void localDel(long id, ModelTable table) { + long taskId = params.readLong("taskId"); + flowInstance = FlowInstance.createById(us, this, id, taskId); + flowInstance.delete(); + super.localDel(id, table); + + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelListHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelListHandler.java new file mode 100644 index 0000000..1a5d63e --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelListHandler.java @@ -0,0 +1,33 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.mvc.service.SqlPara; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageHelper; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; +import cc.smtweb.system.bpm.web.engine.dynPage.IBuildSqlListener; +import cc.smtweb.system.bpm.web.engine.flow.entity.ProcInst; + +/** + * Created by Akmm at 2022-08-29 11:41 + * 流程列表handler + */ +public class FlowModelListHandler extends ModelListHandler { + static IBuildSqlListener sqlListener = new IBuildSqlListener() { + @Override + public void buildSelect(PageDataset dataSet, StringBuilder sql) { + sql.append("\ninner join " + EntityHelper.getSchemaTableName(ProcInst.ENTITY_NAME) + " on pri_id=" + dataSet._getModelTable().getIdField()); + } + }; + @Override + protected SqlPara buildSqlPara() { + return DynPageHelper.buildSelectSqlEx(pageDataSet, filter, sqlListener); + } + + @Override + protected SqlNamedPara buildSumSqlPara() { + return DynPageHelper.buildSumSqlEx(pageDataSet, filter, sqlListener); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelLoadHandler.java new file mode 100644 index 0000000..294cf15 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelLoadHandler.java @@ -0,0 +1,49 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; +import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; +import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; +import cc.smtweb.system.bpm.web.engine.flow.FlowListener; + +/** + * Created by Akmm at 2022-08-26 17:15 + * 流程加载 + */ +public class FlowModelLoadHandler extends ModelLoadHandler implements FlowListener { + protected FlowInstance flowInstance; + @Override + protected void afterAdd(SwMap ret) { + super.afterAdd(ret); + flowInstance = FlowInstance.createByBillType(us, this, form.getBillType()); + + bean.setEntityId(flowInstance.getProcInst().getId()); + ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); + + flowInstance.setPageRetExtra(ret); + ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); + ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); + } + + @Override + protected void load(SwMap ret, SwMap filter) { + + //过滤条件 + long id = params.readLong("id"); + long taskId = params.readLong("taskId"); + + PageDataset cardDataset = findCardDataset(ModelHelper.DATASET_NAME_CARD); + T bean = provider.loadBean(cardDataset, id); + ret.put(cardDataset.name, DynRetBean.createBean(bean)); + + //加载流程信息 + flowInstance = FlowInstance.createById(us, this, id, taskId); + + flowInstance.setPageRetExtra(ret); + ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); + ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.create(flowInstance.loadComment(), 0))); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelSaveHandler.java new file mode 100644 index 0000000..4d0d5b2 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelSaveHandler.java @@ -0,0 +1,73 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.framework.core.util.DateUtil; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; +import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; +import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; +import cc.smtweb.system.bpm.web.engine.flow.FlowListener; + +/** + * Created by Akmm at 2022-08-26 16:47 + * 带流程的简单卡片之保存 + */ +public class FlowModelSaveHandler extends ModelSaveHandler implements FlowListener { + protected FlowInstance flowInstance; + @Override + protected void readFromPage(SwMap pageData, SwMap filter) { + super.readFromPage(pageData, filter); + + long id = params.readLong("id"); + long taskId = params.readLong("taskId"); + + SwMap data = pageData.readMap(FlowHelper.DATASET_NAME_FLOW); + if (data == null) throw new BizException("没有找到待保存的流程数据!"); + data = data.readMap("form"); + if (data == null) throw new BizException("没有找到待保存的流程数据!"); + + if (bean.isNew()) { + flowInstance = FlowInstance.createByBillType(us, this, form.getBillType()); + } else { + flowInstance = FlowInstance.createById(us, this, id, taskId); + } + flowInstance.readFromPage(data); + flowInstance.getProcInst().setIsNew(bean.isNew()); + if (bean.isNew()) { + flowInstance.getProcInst().setBillCode(getBillCode()); + flowInstance.getProcInst().setUrl(getBillUrl()); + } + flowInstance.getProcInst().setBillInfo(getBillInfo()); + } + + @Override + protected void doSave() { + super.doSave(); + flowInstance.save(); + } + + @Override + protected void afterSave(SwMap ret) { + super.afterSave(ret); + flowInstance.setPageRetExtra(ret); + ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); + ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); + } + + //单据编号,新增保存时调用 + protected String getBillCode() { + return flowInstance.getProcInst().getBillCode(); + } + + //单据信息,在待办中显示,每次保存均计算 + protected String getBillInfo() { + return flowInstance.getProcInst().getBillCode() + "-" + DateUtil.nowDate(); + } + + //单据url,待办中跳链 + protected String getBillUrl() { + return ""; + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelService.java new file mode 100644 index 0000000..8b1770d --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelService.java @@ -0,0 +1,67 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +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.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.mvc.service.IWorker; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.engine.model.listcard.single.LCSingleService; + +/** + * Created by Akmm at 2022-08-26 16:35 + * 带工作流的简单列表+卡片 + */ +@SwService +public class FlowModelService extends LCSingleService { + public static final String TYPE_FLOW = "flow"; + + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_MODEL_LIST: + return new FlowModelListHandler(); + case TYPE_MODEL_LOAD: + return new FlowModelLoadHandler(); + case TYPE_MODEL_SAVE: + return new FlowModelSaveHandler(); + case TYPE_MODEL_DEL: + return new FlowModelDelHandler(); + } + return super.createHandler(type); + } + protected R flowHandler(SwMap params, UserSession us, IWorker worker) { + try { + FlowTransHandler handler = (FlowTransHandler) getHandler(params, us, TYPE_FLOW); + return worker.doWork(handler); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + public R submit(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::submit); + } + + public R retake(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::retake); + } + + public R reject(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::reject); + } + + public R disuse(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::disuse); + } + + public R handle(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::handle); + } + + public R interrupt(@SwBody SwMap params, UserSession us) { + return flowHandler(params, us, FlowTransHandler::interrupt); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java new file mode 100644 index 0000000..09e5b3d --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java @@ -0,0 +1,99 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; +import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; +import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; +import cc.smtweb.system.bpm.web.engine.flow.FlowListener; + +/** + * Created by Akmm at 2022-09-01 15:03 + * 流程流转 + */ +public class FlowTransHandler extends AbstractDynPageHandler implements FlowListener { + //流程id + protected long billId; + //任务id + protected long taskId; + protected FlowInstance flowInstance; + + protected T bean; + + @Override + public void setExprParam(SwMap param) { + param.putAll(bean.getData()); + } + + private SwMap buildRetData() { + SwMap ret = new SwMap(); + ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); + + flowInstance.setPageRetExtra(ret); + ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); + ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); + return ret; + } + + protected void load() { + if (flowInstance == null) { + billId = params.readLong("id"); + taskId = params.readLong("taskId"); + flowInstance = FlowInstance.createById(us, this, billId, taskId); + + loadBean(); + } + } + + protected void loadBean() { + PageDataset cardDataset = findCardDataset(ModelHelper.DATASET_NAME_CARD); + bean = provider.loadBean(cardDataset, billId); + } + + public R submit() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.submit(params.readString("comment"))); + + return R.success(buildRetData()); + } + + public R retake() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.retake()); + + return R.success(buildRetData()); + } + + public R reject() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.reject(params.readString("comment"), params.readString("toTaskId"))); + + return R.success(buildRetData()); + } + + public R disuse() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.disuse(params.readString("comment"))); + + return R.success(buildRetData()); + } + + public R handle() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.handle()); + + return R.success(buildRetData()); + } + + public R interrupt() { + load(); + DbEngine.getInstance().doTrans(() -> flowInstance.interrupt(params.readString("comment"))); + + return R.success(buildRetData()); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/IModelDetailReadIntf.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/IModelDetailReadIntf.java new file mode 100644 index 0000000..ec8c796 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/IModelDetailReadIntf.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Zhenggm at 11-9-26 下午3:00 + * 单据明细变动接口 + */ +public interface IModelDetailReadIntf { + /** + * 构造返回新的明细对象 + */ + T getNewInstance(); + + /** + * 读取后设置 + */ + void doAfterRead(boolean isNew, T bean); +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java new file mode 100644 index 0000000..96c0ba7 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java @@ -0,0 +1,93 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.jdbc.IDbWorker; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 模型删除handler + */ +public class ModelDelHandler extends AbstractDynPageHandler { + private String cardDsName = ModelHelper.DATASET_NAME_CARD; + + public ModelDelHandler() { + } + + public ModelDelHandler(String cardDsName) { + this.cardDsName = cardDsName; + } + + /** + * 删除指定数据集,入参{pageId, dataset, id} + * + * @return + */ + public R del() { + long id = params.readLong("id"); + if (id == 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); + //数据集 + PageDataset pageDataSet = findCardDataset(cardDsName); + checkDel(pageDataSet,id); + + DbEngine.getInstance().doTrans(new IDbWorker() { + @Override + public void work() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("没有找到指定的的表定义:" + pageDataSet.name + "!"); + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + dao.deleteEntity(id); + localDel(id, table); + } + + @Override + public void doAfterDbCommit() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); + cache.remove(id); + } + afterCommit(id, table); + } + + @Override + public void doAfterDbRollback() { + afterRollback(id); + } + }); + return R.success(); + } + + //回调:::删除之后 + protected void localDel(long id, ModelTable table) { + } + + //回调:::提交成功后 + protected void afterCommit(long id, ModelTable table) { + } + + //回调:::提交失败,事务回滚后 + protected void afterRollback(long id) { + + } + + /** + * 删除校验 + * + * @param pageDataSet + * @param id + */ + protected void checkDel(PageDataset pageDataSet, long id) { + //校验外键引用关系 + EntityHelper.checkExists(pageDataSet.masterTable, id); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDetail.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDetail.java new file mode 100644 index 0000000..2582ee8 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDetail.java @@ -0,0 +1,147 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; + +/** + * @Author: tanghp + * @Date: 2022-09-15 17:27 + * @Desc: 模型明细处理类 + */ +public class ModelDetail { + //页面上新增的行 + protected List insertList = new ArrayList(); + //页面上修改的行 + protected List updateList = new ArrayList(); + //页面上删除的行Id + protected List deleteList = new ArrayList(); + + public List getInsertList() { + return insertList; + } + + public List getUpdateList() { + return updateList; + } + + public List getDeleteList() { + return deleteList; + } + + public void setInsertList(List insertList) { + this.insertList = insertList; + } + + public void setUpdateList(List updateList) { + this.updateList = updateList; + } + + public void setDeleteList(List deleteList) { + this.deleteList = deleteList; + } + + public void addInsert(T t) { + insertList.add(t); + } + + public void addUpdate(T t) { + updateList.add(t); + } + + public void addDelete(long id) { + deleteList.add(id); + } + + //从页面对象读取 + public void readFromMap(String key, SwMap pageData, IModelDetailReadIntf intf){ + SwMap details = pageData.readMap(key); + List> inserted = details.readListMap("inserted"); + if(!CommUtil.isEmpty(inserted)){ + inserted.forEach((row)-> { + T bean = intf.getNewInstance(); + bean.init(); + bean.getData().putAll(row); + intf.doAfterRead(true,bean); + }); + } + List> updated = details.readListMap("updated"); + if(!CommUtil.isEmpty(updated)){ + updated.forEach((row)-> { + T bean = intf.getNewInstance(); + bean.init(); + bean.getData().putAll(row); + intf.doAfterRead(false,bean); + }); + } + Set deleted = details.readLongSet("deleted"); + if(!CommUtil.isEmpty(deleted)){ + deleteList.addAll(deleted); + } + } + + public void batchSave(EntityDao dao) { + if (!CommUtil.isEmpty(this.deleteList)) { + dao.deleteEntity(this.deleteList); + } + if (!CommUtil.isEmpty(this.updateList)) { + dao.batchUpdateEntity(this.updateList); + } + if (!CommUtil.isEmpty(this.insertList)) { + dao.batchInsertEntity(this.insertList); + } + } + + public void readFromMap(PageDataset pageDataset, SwMap pageData, BiConsumer consumer){ + ModelTable table = ModelTableCache.getInstance().get(pageDataset.masterTable); + if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataset.name); + SwMap details = pageData.readMap(pageDataset.name); + if (details == null) throw new BizException("没有找到待保存的表数据:" + pageDataset.name); + EntityDao dao = DbEngine.getInstance().findDao(table.getTableName()); + List> inserted = details.readListMap("inserted"); + if(!CommUtil.isEmpty(inserted)){ + inserted.forEach((row)-> { + T bean = dao.createBean(); + bean.init(); + bean.getData().putAll(row); + if(consumer!=null){ + consumer.accept(true,bean); + } + }); + } + List> updated = details.readListMap("updated"); + if(!CommUtil.isEmpty(updated)){ + updated.forEach((row)-> { + T bean = dao.createBean(); + bean.init(); + bean.getData().putAll(row); + if(consumer!=null){ + consumer.accept(false,bean); + } + }); + } + Set deleted = details.readLongSet("deleted"); + if(!CommUtil.isEmpty(deleted)){ + deleteList.addAll(deleted); + } + } + + public void batchSave(PageDataset pageDataset) { + ModelTable table = ModelTableCache.getInstance().get(pageDataset.masterTable); + if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataset.name); + EntityDao dao = DbEngine.getInstance().findDao(table.getTableName()); + batchSave(dao); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java new file mode 100644 index 0000000..a843eac --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; + +/** + * Created by Akmm at 2022-08-16 16:07 + * 常量定义 + */ +public interface ModelHelper { + String DATASET_NAME_LIST = "list"; + String DATASET_NAME_CARD = "card"; + + static SwMap buildRetData(String dsName, SwMap data) { + SwMap mapRet = new SwMap(); + mapRet.put(dsName, DynRetBean.createBean(data)); + return mapRet; + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelListHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelListHandler.java new file mode 100644 index 0000000..7a79cdb --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelListHandler.java @@ -0,0 +1,50 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; + +/** + * Created by Akmm at 2022-09-15 15:01 + * 模型列表handler + */ +public class ModelListHandler extends DynPageListHandler { + protected String dsName = ModelHelper.DATASET_NAME_LIST; + private ModelListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { + super(pageId, filter, pageDataSet); + } + + public ModelListHandler(String dsName) { + this.dsName = dsName; + } + public ModelListHandler() { + + } + @Override + public void init(SwMap params, UserSession us) { + super.init(params, us); + String pId = params.readString("pageId"); + ModelForm form = ModelFormHelper.getFromCache(pId); + if (form == null) throw new BizException("没有找到页面定义数据(" + pageId + ")!"); + pageId = form.getId(); + PageDatasets datasets = form.getDatasets(); + if (datasets == null || datasets.list == null) throw new BizException("没有找到页面定义的数据集数据(" + pageId + ")!"); + + filter = params.readMap("filter"); + pageDataSet = datasets.findByName(dsName); + } + + @Override + public R data() { + DynRetBean bean = DynRetBean.createList(buildListData()); + return R.success(bean); + } + +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelLoadHandler.java new file mode 100644 index 0000000..f5a27b1 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelLoadHandler.java @@ -0,0 +1,80 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; +import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; + +/** + * Created by Akmm at 2022-08-16 15:43 + * 模型卡片加载handler + */ +public class ModelLoadHandler extends AbstractDynPageHandler { + protected T bean; + private String cardDsName = ModelHelper.DATASET_NAME_CARD; + + public ModelLoadHandler() { + } + + public ModelLoadHandler(String cardDsName) { + this.cardDsName = cardDsName; + } + + //新增卡片操作,初始化定义的数据集 + public R add() { + SwMap ret = new SwMap(); + bean = addBean(ret, cardDsName); + afterAdd(ret); + return R.success(ret); + } + + //创建一个bean,并加到返回对象中 + protected E addBean(SwMap ret, String dsName) { + //返回的数据,以dataset.name为key,查出的结果(bean或list)为value + PageDataset cardDataset = findCardDataset(dsName); + ModelTable table = cardDataset._getModelTable(); + if (table == null) throw new SwException("卡片主表未找到!"); + final EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + + E entity = dao.createBean(us.getUserId()); + entity.setEntityId(DbEngine.getInstance().nextId()); + + ret.put(dsName, DynRetBean.createBean(entity)); + return entity; + } + + + //新增初始化 - bean + protected void afterAdd(SwMap ret) { + } + + public R load() { + SwMap ret = new SwMap(); + //过滤条件 + SwMap filter = params.readMap("filter"); + load(ret, filter); + return R.success(ret); + } + + //从数据库加载bean,并设到返回值 + protected void load(SwMap ret, SwMap filter) { + PageDataset cardDataset = findCardDataset(cardDsName); + bean = provider.loadBean(cardDataset, filter.readLong(SwConsts.NAME_ID)); + ret.put(cardDsName, DynRetBean.createBean(bean)); + } + + //给子类使用的工具方法:根据数据集配置,读取bean,并加到返回值 + protected E loadBean(SwMap ret, String dsName, SwMap filter) { + PageDataset cardDataset = findCardDataset(dsName); + E bean = provider.loadBean(cardDataset, filter); + ret.put(dsName, DynRetBean.createBean(bean)); + return bean; + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelSaveHandler.java new file mode 100644 index 0000000..326c874 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelSaveHandler.java @@ -0,0 +1,249 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +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.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.IDbWorker; +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.exception.BizException; +import cc.smtweb.framework.core.mvc.service.TreeHelper; +import cc.smtweb.framework.core.util.StringUtil; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; +import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 模型保存handler + * 入参:{pageId, data:} + */ +public class ModelSaveHandler extends AbstractDynPageHandler { + private Map> mapTreeBean = new HashMap<>(); + protected T bean; + private String cardDsName = ModelHelper.DATASET_NAME_CARD; + + public ModelSaveHandler() { + } + + public ModelSaveHandler(String cardDsName) { + this.cardDsName = cardDsName; + } + + /** + * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + */ + public R save() { + SwMap filter = params.readMap("filter"); + //待保存数据 + SwMap data = params.readMap("data"); + if (data == null) throw new BizException("没有收到待保存的的数据!"); + + readFromPage(data, filter); + checkValid(); + DbEngine.getInstance().doTrans(new IDbWorker() { + @Override + public void work() { + doSave(); + } + + @Override + public void doAfterDbCommit() { + doAfterCommit(); + } + + @Override + public void doAfterDbRollback() { + doAfterRollback(); + } + }); + bean.removeStatus(); + SwMap ret = ModelHelper.buildRetData(cardDsName, bean.getData()); + afterSave(ret); + return R.success(ret); + } + + protected void afterSave(SwMap ret) { + } + + /** + * 从页面获取待保存的bean + * + * @param pageDataSet + * @param pageData + * @return + */ + protected void readFromPage(SwMap pageData, SwMap filter) { + //读取待保存的bean + bean = readBeanFromPage(cardDsName, pageData, filter); + } + + //给子类使用的工具方法:从页面读取一个bean + protected E readBeanFromPage(String dsName, SwMap pageData, SwMap filter) { + //对应的数据集定义 + PageDataset pageDataSet = findCardDataset(dsName); + + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataSet.name); + + SwMap data = pageData.readMap(pageDataSet.name); + if (data == null) throw new BizException("没有找到待保存的表数据:" + pageDataSet.name); + data = data.readMap("form"); + if (data == null) throw new BizException("没有找到待保存的表数据:" + pageDataSet.name); + + boolean isNew = data.readBool(DefaultEntity.statusKey); + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + E vo; + if (isNew) { + vo = dao.createBean(); + //暂时不考虑list保存的情况 + vo.getData().putAll(data); + } else { + long id = data.readLong(table.getIdField()); + vo = dao.queryEntity(id); + if (vo == null) { + throw new BizException("没有找到待保存的记录:" + table.getName() + "." + id); + } + //暂时不考虑list保存的情况 + vo.getData().putAll(data); + vo.setIsNew(false); + } + if (filter != null && vo.isNew()) {//有过滤条件,将关联的值设上 + setLinkValue(pageDataSet, vo, f -> filter.get(f.name)); + } + return vo; + } + /** + * 保存校验 + * + * @param bean + */ + protected void checkValid() { + checkValid(bean); + } + + //给子类使用的工具方法:校验bean + protected void checkValid(E vo) { + ModelTable table = ModelTableCache.getInstance().getByName(vo.getTableName()); + for (ModelField field : table.getFields()) { + String value = vo.getStr(field.getName()); + //非空校验 + if (field.isNotNull() && StringUtils.isEmpty(value)) { + throw new BizException("字段不允许为空:" + field.getTitle()); + } + + //长度校验 + if (StringUtils.isNotEmpty(value)) { + int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; + if (len > 0 && StringUtil.getStrLenB(value) > len) { + throw new BizException("字段值超长:" + field.getTitle()); + } + } + } + //唯一键校验 + EntityDao dao = DbEngine.getInstance().findDao(vo.getTableName()); + for (ModelIndex mi : table.getIndexes()) { + if (mi.isUnique()) { + dao.checkUnique(vo, mi.getFields().split(",")); + } + } + } + + protected void doSave() { + saveBean(bean); + } + + //给子类使用的工具方法:保存bean + protected void saveBean(E entity) { + final String tableName = entity.getTableName(); + EntityDao dao = DbEngine.getInstance().findDao(tableName); + if (entity.isNew()) { + dao.insertEntity(entity); + } else { + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); + if (field != null) entity.put(field.getName(), us.getUserId()); + + dao.updateEntity(entity); + if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { + List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(entity); + mapTreeBean.put(tableName, listTreeBean); + } + } + } + + //保存后 + protected void doAfterCommit() { + commitBean(bean); + } + + //给子类使用的工具方法:提交后事件 + protected void commitBean(E entity) { + final String tableName = entity.getTableName(); + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(tableName); + List listTreeBean = (List)mapTreeBean.get(tableName); + //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 + if (listTreeBean != null && !listTreeBean.isEmpty()) { + for (DefaultEntity b : listTreeBean) { + cache.put(b); + } + } else { + cache.put(entity); + } + } + } + + //事务回滚 + protected void doAfterRollback() { + rollBean(bean); + } + + //给子类使用的工具方法:回滚指定的bean + protected void rollBean(E 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); + } + } + } + } + + public interface IGetValue { + Object getValue(PageDatasetFilter f); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelService.java new file mode 100644 index 0000000..99bb1d5 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelService.java @@ -0,0 +1,64 @@ +package cc.smtweb.system.bpm.web.engine.model.common; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; + +/** + * Created by Akmm at 2022-08-12 15:37 + * 模型通用服务类 + */ +public class ModelService extends DynPageService { + public final static String TYPE_MODEL_LIST = "modelList"; + public final static String TYPE_MODEL_LOAD = "modelLoad"; + public final static String TYPE_MODEL_SAVE = "modelSave"; + public final static String TYPE_MODEL_DEL = "modelDel"; + + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_MODEL_LIST: + return new ModelListHandler(); + case TYPE_MODEL_LOAD: + return new ModelLoadHandler(); + case TYPE_MODEL_SAVE: + return new ModelSaveHandler(); + case TYPE_MODEL_DEL: + return new ModelDelHandler(); + } + return super.createHandler(type); + } + //保存 + public R modelSave(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((ModelSaveHandler) handler).save()); + } + + //读取 + public R modelLoad(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((ModelLoadHandler) handler).load()); + } + + //读取 + public R modelAdd(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((ModelLoadHandler) handler).add()); + } + + //删除 + public R modelDel(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((ModelDelHandler) handler).del()); + } + + //列表数据 + public R modelList(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((ModelListHandler) handler).data()); + } + + //列表总记录数及合计栏 + public R modelListTotal(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((ModelListHandler) handler).getTotal()); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowDelHandler.java deleted file mode 100644 index 3e58c16..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowDelHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; - -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; -import cc.smtweb.system.bpm.web.engine.flow.FlowListener; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelDelHandler; - -/** - * Created by Akmm at 2022-09-01 15:03 - * 流程删除 - */ -public class FlowDelHandler extends ModelDelHandler implements FlowListener { - protected FlowInstance flowInstance; - - @Override - protected void localDel(long id, ModelTable table) { - long taskId = params.readLong("taskId"); - flowInstance = FlowInstance.createById(us, this, id, taskId); - flowInstance.delete(); - super.localDel(id, table); - - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowListHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowListHandler.java deleted file mode 100644 index b7dea8f..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowListHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.framework.core.mvc.service.SqlPara; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageHelper; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.IBuildSqlListener; -import cc.smtweb.system.bpm.web.engine.flow.entity.ProcInst; - -/** - * Created by Akmm at 2022-08-29 11:41 - */ -public class FlowListHandler extends DynPageListHandler { - static IBuildSqlListener sqlListener = new IBuildSqlListener() { - @Override - public void buildSelect(PageDataset dataSet, StringBuilder sql) { - sql.append("\ninner join " + EntityHelper.getSchemaTableName(ProcInst.ENTITY_NAME) + " on pri_id=" + dataSet._getModelTable().getIdField()); - } - }; - - public FlowListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { - super(pageId, filter, pageDataSet); - } - - @Override - protected SqlPara buildSqlPara() { - return DynPageHelper.buildSelectSqlEx(pageDataSet, filter, sqlListener); - } - - @Override - protected SqlNamedPara buildSumSqlPara() { - return DynPageHelper.buildSumSqlEx(pageDataSet, filter, sqlListener); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleLoadHandler.java deleted file mode 100644 index eb6c293..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleLoadHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; -import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; -import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; -import cc.smtweb.system.bpm.web.engine.flow.FlowListener; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelHelper; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelLoadHandler; - -/** - * Created by Akmm at 2022-08-26 17:15 - * 流程加载 - */ -public class FlowSingleLoadHandler extends ModelLoadHandler implements FlowListener { - protected FlowInstance flowInstance; - - @Override - protected void afterAdd(SwMap ret) { - super.afterAdd(ret); - flowInstance = FlowInstance.createByBillType(us, this, form.getBillType()); - - bean.setEntityId(flowInstance.getProcInst().getId()); - ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); - - flowInstance.setPageRetExtra(ret); - ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); - ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); - } - - @Override - protected void load(SwMap ret, SwMap filter) { - - //过滤条件 - long id = params.readLong("id"); - long taskId = params.readLong("taskId"); - - PageDataset cardDataset = findCardDataset(ModelHelper.DATASET_NAME_CARD); - T bean = provider.loadBean(cardDataset, id); - ret.put(cardDataset.name, DynRetBean.createBean(bean)); - - //加载流程信息 - flowInstance = FlowInstance.createById(us, this, id, taskId); - - flowInstance.setPageRetExtra(ret); - ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); - ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.create(flowInstance.loadComment(), 0))); - } - - @Override - protected DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { - FlowListHandler listHandler = new FlowListHandler(form.getId(), filter, pageDataSet); - listHandler.init(params, us); - return listHandler; - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleSaveHandler.java deleted file mode 100644 index 72ed92e..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleSaveHandler.java +++ /dev/null @@ -1,75 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.framework.core.util.DateUtil; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; -import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; -import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; -import cc.smtweb.system.bpm.web.engine.flow.FlowListener; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; - -/** - * Created by Akmm at 2022-08-26 16:47 - * 带流程的简单卡片之保存 - */ -public class FlowSingleSaveHandler extends ModelSaveHandler implements FlowListener { - protected FlowInstance flowInstance; - - @Override - protected void readFromPage(SwMap pageData, SwMap filter) { - super.readFromPage(pageData, filter); - - long id = params.readLong("id"); - long taskId = params.readLong("taskId"); - - SwMap data = pageData.readMap(FlowHelper.DATASET_NAME_FLOW); - if (data == null) throw new BizException("没有找到待保存的流程数据!"); - data = data.readMap("form"); - if (data == null) throw new BizException("没有找到待保存的流程数据!"); - - if (bean.isNew()) { - flowInstance = FlowInstance.createByBillType(us, this, form.getBillType()); - } else { - flowInstance = FlowInstance.createById(us, this, id, taskId); - } - flowInstance.readFromPage(data); - flowInstance.getProcInst().setIsNew(bean.isNew()); - if (bean.isNew()) { - flowInstance.getProcInst().setBillCode(getBillCode()); - flowInstance.getProcInst().setUrl(getBillUrl()); - } - flowInstance.getProcInst().setBillInfo(getBillInfo()); - } - - @Override - protected void doSave() { - super.doSave(); - flowInstance.save(); - } - - @Override - protected void afterSave(SwMap ret) { - super.afterSave(ret); - flowInstance.setPageRetExtra(ret); - ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); - ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); - } - - //单据编号,新增保存时调用 - protected String getBillCode() { - return flowInstance.getProcInst().getBillCode(); - } - - //单据信息,在待办中显示,每次保存均计算 - protected String getBillInfo() { - return flowInstance.getProcInst().getBillCode() + "-" + DateUtil.nowDate(); - } - - //单据url,待办中跳链 - protected String getBillUrl() { - return ""; - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleService.java index a017a49..bdab173 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleService.java @@ -1,76 +1,12 @@ package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; -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.SwMap; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.mvc.service.IWorker; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelDelHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelLoadHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.single.LCSingleService; +import cc.smtweb.system.bpm.web.engine.model.common.FlowModelService; /** * Created by Akmm at 2022-08-26 16:35 * 带工作流的简单列表+卡片 */ @SwService -public class FlowSingleService extends LCSingleService { - public static final String TYPE_FLOW = "flow"; - - @Override - protected AbstractHandler createHandler(String type) { - if (TYPE_FLOW.equals(type)) return new FlowTransHandler(); - return super.createHandler(type); - } - - @Override - protected ModelSaveHandler getSaveHandler() { - return new FlowSingleSaveHandler(); - } - - @Override - protected ModelLoadHandler getLoadHandler() { - return new FlowSingleLoadHandler(); - } - - @Override - protected ModelDelHandler getDelHandler() { - return new FlowDelHandler(); - } - - protected R flowHandler(SwMap params, UserSession us, IWorker worker) { - try { - FlowTransHandler handler = (FlowTransHandler) getHandler(params, us, TYPE_FLOW); - return worker.doWork(handler); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - public R submit(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::submit); - } - - public R retake(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::retake); - } - - public R reject(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::reject); - } - - public R disuse(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::disuse); - } - - public R handle(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::handle); - } - - public R interrupt(@SwBody SwMap params, UserSession us) { - return flowHandler(params, us, FlowTransHandler::interrupt); - } +public class FlowSingleService extends FlowModelService { } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowTransHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowTransHandler.java deleted file mode 100644 index 9fa1019..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowTransHandler.java +++ /dev/null @@ -1,100 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; -import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; -import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; -import cc.smtweb.system.bpm.web.engine.flow.FlowListener; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelHelper; - -/** - * Created by Akmm at 2022-09-01 15:03 - * 流程流转 - */ -public class FlowTransHandler extends AbstractDynPageHandler implements FlowListener { - //流程id - protected long billId; - //任务id - protected long taskId; - protected FlowInstance flowInstance; - - protected T bean; - - @Override - public void setExprParam(SwMap param) { - param.putAll(bean.getData()); - } - - private SwMap buildRetData() { - SwMap ret = new SwMap(); - ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); - - flowInstance.setPageRetExtra(ret); - ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); - ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); - return ret; - } - - protected void load() { - if (flowInstance == null) { - billId = params.readLong("id"); - taskId = params.readLong("taskId"); - flowInstance = FlowInstance.createById(us, this, billId, taskId); - - loadBean(); - } - } - - protected void loadBean() { - PageDataset cardDataset = findCardDataset(ModelHelper.DATASET_NAME_CARD); - bean = provider.loadBean(cardDataset, billId); - } - - public R submit() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.submit(params.readString("comment"))); - - return R.success(buildRetData()); - } - - public R retake() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.retake()); - - return R.success(buildRetData()); - } - - public R reject() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.reject(params.readString("comment"), params.readString("toTaskId"))); - - return R.success(buildRetData()); - } - - public R disuse() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.disuse(params.readString("comment"))); - - return R.success(buildRetData()); - } - - public R handle() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.handle()); - - return R.success(buildRetData()); - } - - public R interrupt() { - load(); - DbEngine.getInstance().doTrans(() -> flowInstance.interrupt(params.readString("comment"))); - - return R.success(buildRetData()); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsDelHandler.java deleted file mode 100644 index 56ff23c..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsDelHandler.java +++ /dev/null @@ -1,84 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -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.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.jdbc.IDbWorker; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.ModelUtils; - -/** - * @Author:lip - * @Date : 2022/9/2 15:03 - */ -public abstract class AbsDelHandler extends AbstractDynPageHandler { - /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return - */ - protected void doDel(String dsName) { - long id = params.readLong("id"); - if (id <= 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); - //数据集 - PageDataset pageDataset = ModelUtils.findPageDatasetByName(this.datasets, dsName); - // - checkBean(pageDataset, id); - // - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - ModelTable table = ModelTableCache.getInstance().get(pageDataset.masterTable); - if (table == null) throw new BizException("没有找到指定的的表定义:" + pageDataset.name + "!"); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - dao.deleteEntity(id); - localDel(id, table); - } - - @Override - public void doAfterDbCommit() { - ModelTable table = ModelTableCache.getInstance().get(pageDataset.masterTable); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); - cache.remove(id); - } - afterCommit(id, table); - } - - @Override - public void doAfterDbRollback() { - afterRollback(id); - } - }); - } - - //回调:::删除之后 - protected void localDel(long id, ModelTable table) { - } - - //回调:::提交成功后 - protected void afterCommit(long id, ModelTable table) { - } - - //回调:::提交失败,事务回滚后 - protected void afterRollback(long id) { - - } - - /** - * 删除校验 - * - * @param pageDataSet - * @param id - */ - protected void checkBean(PageDataset pageDataSet, long id) { - //校验外键引用关系 - EntityHelper.checkExists(pageDataSet.masterTable, id); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsLoadHandler.java deleted file mode 100644 index a6fef02..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsLoadHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageHelper; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; -import cc.smtweb.system.bpm.web.engine.model.listcard.ModelUtils; -import org.springframework.util.Assert; - -/** - * @Author:lip - * @Date : 2022/9/2 15:03 - */ -public abstract class AbsLoadHandler extends AbstractDynPageHandler { - - /** - * 新增初始化 - * - * @param dsName - * @return - */ - protected SwMap doAdd(String dsName) { - PageDataset addDataSet = this.datasets.findByName(dsName); - Assert.notNull(addDataSet, "未获取到数据集:" + dsName); - SwMap data; - //懒加载,给个空对象 - if (addDataSet.lazy) { - data = new SwMap(); - } else { - data = DynPageHelper.createBean(addDataSet); - } - return data; - } - - /** - * 加载卡片数据 - * - * @param dsName - * @return - */ - protected SwMap doLoadCard(String dsName) { - //过滤条件 - SwMap filter = params.readMap("filter"); - //对应的数据集定义 - PageDataset loadDataSet = ModelUtils.findPageDatasetByName(this.datasets, dsName); - return provider.loadData(filter, loadDataSet); - } - - /** - * 列表数据 - * - * @return - */ - protected DynRetBean doList(String dsName) { - //过滤条件 - SwMap filter = params.readMap("filter"); - - //对应的数据集定义 - PageDataset listDataSet = ModelUtils.findPageDatasetByName(this.datasets, dsName); - - return DynRetBean.createList(getListWorker(filter, listDataSet).buildListData()); - } - - /** - * 计算分页数据 - * - * @return - */ - protected R doTotal(String dsName) { - //过滤条件 - SwMap filter = params.readMap("filter"); - - //对应的数据集定义 - PageDataset listDataSet = ModelUtils.findPageDatasetByName(this.datasets, dsName); - - return getListWorker(filter, listDataSet).getTotal(); - } - - protected DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { - DynPageListHandler listHandler = new DynPageListHandler(form.getId(), filter, pageDataSet); - listHandler.init(params, us); - return listHandler; - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsSaveHandler.java deleted file mode 100644 index 50e38a5..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/AbsSaveHandler.java +++ /dev/null @@ -1,205 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -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.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.jdbc.IDbWorker; -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.exception.BizException; -import cc.smtweb.framework.core.mvc.service.TreeHelper; -import cc.smtweb.framework.core.util.StringUtil; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.ModelUtils; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @Author:lip - * @Date : 2022/9/2 15:02 - */ -public abstract class AbsSaveHandler extends AbstractDynPageHandler { - private Map> mapTreeBean = new HashMap<>(); - - protected void setNewId(T bean) { - bean.setEntityId(DbEngine.getInstance().nextId()); - } - - protected T doSave(String dsName) { - //数据集 - SwMap filter = params.readMap("filter"); - //待保存数据 - SwMap data = params.readMap("data"); - if (data == null) throw new BizException("没有收到待保存的的数据:" + dsName + "!"); - //对应的数据集定义 - PageDataset pageDataSet = ModelUtils.findPageDatasetByName(this.datasets, dsName); - //读取待保存的bean - T bean = readBeanFromPage(pageDataSet, data.readMap(dsName).readMap("form")); - if (filter != null && bean.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, bean, f -> filter.get(f.name)); - } - checkBean(bean); - - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - saveBean(bean); - } - - @Override - public void doAfterDbCommit() { - afterCommit(bean); - } - - @Override - public void doAfterDbRollback() { - afterRollback(bean); - } - }); - return bean; - } - - /** - * 从页面获取待保存的bean - * - * @param pageDataSet - * @param data - * @return - */ - protected T readBeanFromPage(PageDataset pageDataSet, SwMap data) { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataSet.name); - - long id = data.readLong(table.getIdField()); - - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - T bean; - if (id <= 0L) { - bean = dao.createBean(); - bean.setIsNew(true); - //暂时不考虑list保存的情况 - bean.getData().putAll(data); - bean.setEntityId(DbEngine.getInstance().nextId()); - } else { - bean = dao.queryEntity(id); - if (bean == null) { - throw new BizException("没有找到待保存的记录:" + table.getName() + "." + id); - } - //暂时不考虑list保存的情况 - bean.getData().putAll(data); - bean.setIsNew(false); - } - return bean; - } - - /** - * 保存校验 - * - * @param bean - */ - protected void checkBean(T 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 BizException("字段不允许为空:" + field.getTitle()); - } - - //长度校验 - if (StringUtils.isNotEmpty(value)) { - int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; - if (len > 0 && StringUtil.getStrLenB(value) > len) { - throw new BizException("字段值超长:" + 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(T 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(T 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(T 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, T 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); - } - } - } - } - - public interface IGetValue { - Object getValue(PageDatasetFilter f); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelDelHandler.java deleted file mode 100644 index 57f38d3..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelDelHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.jdbc.IDbWorker; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 删除操作 - */ -public class ModelDelHandler extends AbstractDynPageHandler { - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; - /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return - */ - public R del() { - long id = params.readLong("id"); - if (id == 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); - //数据集 - PageDataset pageDataSet = findCardDataset(cardDsName); - - checkBean(pageDataSet, id); - - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new BizException("没有找到指定的的表定义:" + pageDataSet.name + "!"); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - dao.deleteEntity(id); - localDel(id, table); - } - - @Override - public void doAfterDbCommit() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); - cache.remove(id); - } - afterCommit(id, table); - } - - @Override - public void doAfterDbRollback() { - afterRollback(id); - } - }); - return R.success(); - } - - //回调:::删除之后 - protected void localDel(long id, ModelTable table) { - } - - //回调:::提交成功后 - protected void afterCommit(long id, ModelTable table) { - } - - //回调:::提交失败,事务回滚后 - protected void afterRollback(long id) { - - } - - /** - * 删除校验 - * - * @param pageDataSet - * @param id - */ - protected void checkBean(PageDataset pageDataSet, long id) { - //校验外键引用关系 - EntityHelper.checkExists(pageDataSet.masterTable, id); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelHelper.java deleted file mode 100644 index 2ee6104..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelHelper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; - -/** - * Created by Akmm at 2022-08-16 16:07 - * 常量定义 - */ -public interface ModelHelper { - String DATASET_NAME_LIST = "list"; - String DATASET_NAME_CARD = "card"; - - static SwMap buildRetData(String dsName, SwMap data) { - SwMap mapRet = new SwMap(); - mapRet.put(dsName, DynRetBean.createBean(data)); - return mapRet; - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelListHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelListHandler.java deleted file mode 100644 index 00ef78a..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelListHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; - -/** - * Created by Akmm at 2022-09-15 15:01 - * 列表类服务handler - */ -public class ModelListHandler extends DynPageListHandler { - protected String dsName; - private ModelListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { - super(pageId, filter, pageDataSet); - } - - public ModelListHandler(String dsName) { - this.dsName = dsName; - } - - @Override - public void init(SwMap params, UserSession us) { - super.init(params, us); - String pId = params.readString("pageId"); - ModelForm form = ModelFormHelper.getFromCache(pId); - if (form == null) throw new BizException("没有找到页面定义数据(" + pageId + ")!"); - pageId = form.getId(); - PageDatasets datasets = form.getDatasets(); - if (datasets == null || datasets.list == null) throw new BizException("没有找到页面定义的数据集数据(" + pageId + ")!"); - - filter = params.readMap("filter"); - pageDataSet = datasets.findByName(dsName); - } - - @Override - public R data() { - DynRetBean bean = DynRetBean.createList(buildListData()); - return R.success(bean); - } - -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelLoadHandler.java deleted file mode 100644 index e184105..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelLoadHandler.java +++ /dev/null @@ -1,116 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageListHandler; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; - -/** - * Created by Akmm at 2022-08-16 15:43 - */ -public class ModelLoadHandler extends AbstractDynPageHandler { - protected T bean; - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; - - //新增卡片操作,初始化定义的数据集 - public R add() { - SwMap ret = new SwMap(); - bean = addBean(ret, cardDsName); - afterAdd(ret); - return R.success(ret); - } - - //创建一个bean,并加到返回对象中 - protected E addBean(SwMap ret, String dsName) { - //返回的数据,以dataset.name为key,查出的结果(bean或list)为value - PageDataset cardDataset = findCardDataset(dsName); - ModelTable table = cardDataset._getModelTable(); - if (table == null) throw new SwException("卡片主表未找到!"); - final EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - - E entity = dao.createBean(us.getUserId()); - entity.setEntityId(DbEngine.getInstance().nextId()); - - ret.put(dsName, DynRetBean.createBean(entity)); - return entity; - } - - - //新增初始化 - bean - protected void afterAdd(SwMap ret) { - } - - public R load() { - SwMap ret = new SwMap(); - //过滤条件 - SwMap filter = params.readMap("filter"); - load(ret, filter); - return R.success(ret); - } - - //从数据库加载bean,并设到返回值 - protected void load(SwMap ret, SwMap filter) { - PageDataset cardDataset = findCardDataset(cardDsName); - bean = provider.loadBean(cardDataset, filter.readLong(SwConsts.NAME_ID)); - ret.put(cardDsName, DynRetBean.createBean(bean)); - } - - //给子类使用的工具方法:根据数据集配置,读取bean,并加到返回值 - protected E loadBean(SwMap ret, String dsName, SwMap filter) { - PageDataset cardDataset = findCardDataset(dsName); - E bean = provider.loadBean(cardDataset, filter); - ret.put(dsName, DynRetBean.createBean(bean)); - return bean; - } - - - protected DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { - DynPageListHandler listHandler = new DynPageListHandler(form.getId(), filter, pageDataSet); - listHandler.init(params, us); - return listHandler; - } - - /** - * 列表数据 - * - * @return - */ - protected R list(String dsName) { - //过滤条件 - SwMap filter = params.readMap("filter"); - //对应的数据集定义 - PageDataset pageDataSet = findListDataset(dsName); - DynRetBean bean = DynRetBean.createList(getListWorker(filter, pageDataSet).buildListData()); - return R.success(bean); - } - - protected R getTotal(String dsName) { - //数据集 - PageDataset pageDataSet = findListDataset(dsName); - //过滤条件 - SwMap filter = params.readMap("filter"); - - return getListWorker(filter, pageDataSet).getTotal(); - } - - public R list() { - return list(ModelHelper.DATASET_NAME_LIST); - } - - /** - * 计算分页数据 - * - * @return - */ - public R getTotal() { - return getTotal(ModelHelper.DATASET_NAME_LIST); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelSaveHandler.java deleted file mode 100644 index 407e9f9..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelSaveHandler.java +++ /dev/null @@ -1,243 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -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.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.IDbWorker; -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.exception.BizException; -import cc.smtweb.framework.core.mvc.service.TreeHelper; -import cc.smtweb.framework.core.util.StringUtil; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 模型保存操作 - * 入参:{pageId, data:} - */ -public class ModelSaveHandler extends AbstractDynPageHandler { - private Map> mapTreeBean = new HashMap<>(); - protected T bean; - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; - - /** - * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - */ - public R save() { - SwMap filter = params.readMap("filter"); - //待保存数据 - SwMap data = params.readMap("data"); - if (data == null) throw new BizException("没有收到待保存的的数据!"); - - readFromPage(data, filter); - checkValid(); - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - doSave(); - } - - @Override - public void doAfterDbCommit() { - doAfterCommit(); - } - - @Override - public void doAfterDbRollback() { - doAfterRollback(); - } - }); - bean.removeStatus(); - SwMap ret = ModelHelper.buildRetData(cardDsName, bean.getData()); - afterSave(ret); - return R.success(ret); - } - - protected void afterSave(SwMap ret) { - } - - /** - * 从页面获取待保存的bean - * - * @param pageDataSet - * @param pageData - * @return - */ - protected void readFromPage(SwMap pageData, SwMap filter) { - //读取待保存的bean - bean = readBeanFromPage(cardDsName, pageData, filter); - } - - //给子类使用的工具方法:从页面读取一个bean - protected E readBeanFromPage(String dsName, SwMap pageData, SwMap filter) { - //对应的数据集定义 - PageDataset pageDataSet = findCardDataset(dsName); - - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataSet.name); - - SwMap data = pageData.readMap(pageDataSet.name); - if (data == null) throw new BizException("没有找到待保存的表数据:" + pageDataSet.name); - data = data.readMap("form"); - if (data == null) throw new BizException("没有找到待保存的表数据:" + pageDataSet.name); - - boolean isNew = data.readBool(DefaultEntity.statusKey); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - E vo; - if (isNew) { - vo = dao.createBean(); - //暂时不考虑list保存的情况 - vo.getData().putAll(data); - } else { - long id = data.readLong(table.getIdField()); - vo = dao.queryEntity(id); - if (vo == null) { - throw new BizException("没有找到待保存的记录:" + table.getName() + "." + id); - } - //暂时不考虑list保存的情况 - vo.getData().putAll(data); - vo.setIsNew(false); - } - if (filter != null && vo.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, vo, f -> filter.get(f.name)); - } - return vo; - } - - /** - * 保存校验 - * - * @param bean - */ - protected void checkValid() { - checkValid(bean); - } - - //给子类使用的工具方法:校验bean - protected void checkValid(E vo) { - ModelTable table = ModelTableCache.getInstance().getByName(vo.getTableName()); - for (ModelField field : table.getFields()) { - String value = vo.getStr(field.getName()); - //非空校验 - if (field.isNotNull() && StringUtils.isEmpty(value)) { - throw new BizException("字段不允许为空:" + field.getTitle()); - } - - //长度校验 - if (StringUtils.isNotEmpty(value)) { - int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; - if (len > 0 && StringUtil.getStrLenB(value) > len) { - throw new BizException("字段值超长:" + field.getTitle()); - } - } - } - //唯一键校验 - EntityDao dao = DbEngine.getInstance().findDao(vo.getTableName()); - for (ModelIndex mi : table.getIndexes()) { - if (mi.isUnique()) { - dao.checkUnique(vo, mi.getFields().split(",")); - } - } - } - - protected void doSave() { - saveBean(bean); - } - - //给子类使用的工具方法:保存bean - protected void saveBean(E entity) { - final String tableName = entity.getTableName(); - EntityDao dao = DbEngine.getInstance().findDao(tableName); - if (entity.isNew()) { - dao.insertEntity(entity); - } else { - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); - if (field != null) entity.put(field.getName(), us.getUserId()); - - dao.updateEntity(entity); - if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { - List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(entity); - mapTreeBean.put(tableName, listTreeBean); - } - } - } - - //保存后 - protected void doAfterCommit() { - commitBean(bean); - } - - //给子类使用的工具方法:提交后事件 - protected void commitBean(E entity) { - final String tableName = entity.getTableName(); - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(tableName); - List listTreeBean = (List)mapTreeBean.get(tableName); - //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 - if (listTreeBean != null && !listTreeBean.isEmpty()) { - for (DefaultEntity b : listTreeBean) { - cache.put(b); - } - } else { - cache.put(entity); - } - } - } - - //事务回滚 - protected void doAfterRollback() { - rollBean(bean); - } - - //给子类使用的工具方法:回滚指定的bean - protected void rollBean(E 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); - } - } - } - } - - public interface IGetValue { - Object getValue(PageDatasetFilter f); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelService.java deleted file mode 100644 index 5a64c73..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelService.java +++ /dev/null @@ -1,77 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.common.R; -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.engine.dynPage.DynPageService; - -/** - * Created by Akmm at 2022-08-12 15:37 - * 单页面简单列表卡片服务类 - */ -public class ModelService extends DynPageService { - public final static String TYPE_MODEL_LIST = "modelList"; - public final static String TYPE_MODEL_ADD = "modelAdd"; - public final static String TYPE_MODEL_LOAD = "modelLoad"; - public final static String TYPE_MODEL_SAVE = "modelSave"; - public final static String TYPE_MODEL_DEL = "modelDel"; - - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_MODEL_LIST: - case TYPE_MODEL_LOAD: - case TYPE_MODEL_ADD: - return getLoadHandler(); - case TYPE_MODEL_SAVE: - return getSaveHandler(); - case TYPE_MODEL_DEL: - return getDelHandler(); - } - return super.createHandler(type); - } - - protected ModelSaveHandler getSaveHandler() { - return new ModelSaveHandler(); - } - - protected ModelLoadHandler getLoadHandler() { - return new ModelLoadHandler(); - } - - protected ModelDelHandler getDelHandler() { - return new ModelDelHandler(); - } - - //保存 - public R modelSave(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((ModelSaveHandler) handler).save()); - } - - //读取 - public R modelLoad(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((ModelLoadHandler) handler).load()); - } - - //读取 - public R modelAdd(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_ADD, handler -> ((ModelLoadHandler) handler).add()); - } - - //删除 - public R modelDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((ModelDelHandler) handler).del()); - } - - //列表数据 - public R modelList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((ModelLoadHandler) handler).list()); - } - - //列表总记录数及合计栏 - public R modelListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((ModelLoadHandler) handler).getTotal()); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java new file mode 100644 index 0000000..726deb7 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java @@ -0,0 +1,12 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; + +/** + * @Author:lip + * @Date : 2022/9/2 12:00 + */ +public class LCLC1Config { + public static final String dsLList = "lList"; + public static final String dsLCard = "lCard"; + public static final String dsRList = "list"; + public static final String dsRCard = "card"; +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Define.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Define.java deleted file mode 100644 index 2bd1091..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Define.java +++ /dev/null @@ -1,12 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; - -/** - * @Author:lip - * @Date : 2022/9/2 12:00 - */ -public class LCLC1Define { - public static final String dsLList = "lList"; - public static final String dsLCard = "lCard"; - public static final String dsRList = "rList"; - public static final String dsRCard = "rCard"; -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1DelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1DelHandler.java deleted file mode 100644 index 7ee8ca4..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1DelHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelDelHandler; - -/** - * @Author:lip - * @Date : 2022/9/2 11:44 - */ -public class LCLC1DelHandler extends ModelDelHandler { - - /** - * 左列表删除 - * - * @return - */ - public R lDel() { - cardDsName = LCLC1Define.dsLCard; - return super.del(); - } - - /** - * 右列表删除 - * - * @return - */ - public R rDel() { - cardDsName = LCLC1Define.dsRCard; - return super.del(); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1LoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1LoadHandler.java deleted file mode 100644 index fb7c8b9..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1LoadHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelLoadHandler; - -/** - * @Author:lip - * @Date : 2022/9/2 11:44 - */ -public class LCLC1LoadHandler extends ModelLoadHandler { - /** - * 左表新增 - * - * @return - */ - public R lAdd() { - cardDsName = LCLC1Define.dsLCard; - return super.add(); - } - - /** - * 右表新增 - * - * @return - */ - public R rAdd() { - cardDsName = LCLC1Define.dsRCard; - return super.add(); - } - - /** - * 左表编辑 - * - * @return - */ - public R lLoad() { - cardDsName = LCLC1Define.dsLCard; - return super.load(); - } - - /** - * 右表编辑 - * - * @return - */ - public R rLoad() { - cardDsName = LCLC1Define.dsRCard; - return super.load(); - } - - /** - * 左列表加载 - * - * @return - */ - public R lList() { - return super.list(LCLC1Define.dsLList); - } - - /** - * 右列表加载 - * - * @return - */ - public R rList() { - return super.list(LCLC1Define.dsRList); - } - - /** - * 左列表分页数据 - * - * @return - */ - public R getLTotal() { - return super.getTotal(LCLC1Define.dsLList); - } - - /** - * 右列表分页数据 - * - * @return - */ - public R getRTotal() { - return super.getTotal(LCLC1Define.dsRList); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1SaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1SaveHandler.java deleted file mode 100644 index eec5894..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1SaveHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; - -/** - * @Author:lip - * @Date : 2022/9/2 11:44 - */ -public class LCLC1SaveHandler extends ModelSaveHandler { - /** - * 左表保存 - * - * @return - */ - public R lSave() { - cardDsName = LCLC1Define.dsLCard; - return super.save(); - } - - /** - * 右表保存 - * - * @return - */ - public R rSave() { - cardDsName = LCLC1Define.dsRCard; - return super.save(); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Service.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Service.java index e51a38d..712423f 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Service.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Service.java @@ -4,11 +4,10 @@ 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.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelDelHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelLoadHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; +import cc.smtweb.system.bpm.web.engine.model.common.*; /** * @Author:lip @@ -16,80 +15,51 @@ import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; */ @SwService public class LCLC1Service extends ModelService { - @Override - protected ModelSaveHandler getSaveHandler() { - return new LCLC1SaveHandler(); - } - - @Override - protected ModelLoadHandler getLoadHandler() { - return new LCLC1LoadHandler(); - } + public final static String TYPE_MODEL_LEFT_LIST = "modelLList"; + public final static String TYPE_MODEL_LEFT_LOAD = "modelLLoad"; + public final static String TYPE_MODEL_LEFT_SAVE = "modelLSave"; + public final static String TYPE_MODEL_LEFT_DEL = "modelLDel"; @Override - protected ModelDelHandler getDelHandler() { - return new LCLC1DelHandler(); + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_MODEL_LEFT_LIST: + return new ModelListHandler(LCLC1Config.dsLList); + case TYPE_MODEL_LEFT_LOAD: + return new ModelLoadHandler(LCLC1Config.dsLCard); + case TYPE_MODEL_LEFT_SAVE: + return new ModelSaveHandler(LCLC1Config.dsLCard); + case TYPE_MODEL_LEFT_DEL: + return new ModelDelHandler(LCLC1Config.dsLCard); + } + return super.createHandler(type); } - - //保存 + //左表保存 public R modelLSave(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((LCLC1SaveHandler) handler).lSave()); + return pageHandler(params, us, TYPE_MODEL_LEFT_SAVE, handler -> ((ModelSaveHandler) handler).save()); } - //读取 + //左表读取 public R modelLLoad(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((LCLC1LoadHandler) handler).lLoad()); + return pageHandler(params, us, TYPE_MODEL_LEFT_LOAD, handler -> ((ModelLoadHandler) handler).load()); } - //读取 + //左表读取 public R modelLAdd(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_ADD, handler -> ((LCLC1LoadHandler) handler).lAdd()); + return pageHandler(params, us, TYPE_MODEL_LEFT_LOAD, handler -> ((ModelLoadHandler) handler).add()); } - //删除 + //左表删除 public R modelLDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).lDel()); + return pageHandler(params, us, TYPE_MODEL_LEFT_DEL, handler -> ((ModelDelHandler) handler).del()); } - - //列表数据 + //左表列表数据 public R modelLList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCLC1LoadHandler) handler).lList()); + return pageHandler(params, us, TYPE_MODEL_LEFT_LIST, handler -> ((ModelListHandler) handler).data()); } - //列表总记录数及合计栏 + //左表列表总记录数及合计栏 public R modelLListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCLC1LoadHandler) handler).getLTotal()); - } - - //右表 - //保存 - public R modelRSave(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((LCLC1SaveHandler) handler).rSave()); - } - - //读取 - public R modelRLoad(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((LCLC1LoadHandler) handler).rLoad()); - } - - //读取 - public R modelRAdd(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_ADD, handler -> ((LCLC1LoadHandler) handler).rAdd()); - } - - //删除 - public R modelRDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).rDel()); + return pageHandler(params, us, TYPE_MODEL_LEFT_LIST, handler -> ((ModelListHandler) handler).getTotal()); } - - //列表数据 - public R modelRList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCLC1LoadHandler) handler).rList()); - } - - //列表总记录数及合计栏 - public R modelRListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCLC1LoadHandler) handler).getRTotal()); - } - } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt2/LCLT2Service.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt2/LCLT2Service.java index 36ce14e..b12165c 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt2/LCLT2Service.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt2/LCLT2Service.java @@ -1,7 +1,7 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lclt2; import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; +import cc.smtweb.system.bpm.web.engine.model.common.ModelService; /** * @Author:lip diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsConfig.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsConfig.java new file mode 100644 index 0000000..5122617 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsConfig.java @@ -0,0 +1,47 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; + +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.util.StringUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; + +/** + * @Author:lip + * @Date : 2022/9/2 17:06 + * 主子表配置信息类 + */ +public class LCMsConfig { + //列表主表数据集 + public static final String dsList = "list"; + //卡片主表数据集 + public static final String dsCard = "card"; + //卡片子表列表数据集 + public static final String dsSList = "listSub"; + //卡片子表卡片数据集 + public static final String dsSCard = "cardSub"; + // 模型的配置信息类 + static class Config{ + private final ModelForm modelForm; + + public Config(ModelForm modelForm) { + this.modelForm = modelForm; + } + + // 获取子表的主表外键字段 + public String getSubFKField(){ + String subFKField = modelForm.getOpts().readMap("config").readMap("props").readString("subForeignKey", "");; + if(StringUtil.isEmpty(subFKField)){ + throw new BizException("未获取到子表外键配置"); + } + return subFKField; + } + // 获取子表ID + public long getSubTableId(){ + long subTableId = modelForm.getOpts().readMap("config").readMap("props").readLong("subTable");; + if(subTableId<=0L){ + throw new BizException("未获取到子表配置"); + } + return subTableId; + } + } + +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java deleted file mode 100644 index 18b6518..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; - -/** - * @Author:lip - * @Date : 2022/9/2 17:06 - */ -public class LCMsDefine { - //列表主表数据集 - public static final String dsMList = "list"; - //卡片主表数据集 - public static final String dsMCard = "cardMaster"; - //卡片子表模型数据集 - public static final String dsSList = "listSub"; -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java index b169cb0..e7398ad 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java @@ -1,87 +1,46 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.EntityHelper; import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.jdbc.IDbWorker; import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.AbsDelHandler; -import org.springframework.util.Assert; - -import java.util.List; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.model.common.ModelDelHandler; /** * @Author:lip * @Date : 2022/8/28 20:40 + * 主子表删除handler */ -public class LCMsDelHandler extends AbsDelHandler { +public class LCMsDelHandler extends ModelDelHandler { + @Override + protected void checkDel(PageDataset pageDataSet, long id) { + super.checkDel(pageDataSet, id); + // 子表删除校验 + } - /** - * 列表删除 - * - * @return - */ - public R del() { - return doDel(); + @Override + protected void localDel(long id, ModelTable table) { + super.localDel(id, table); + // 获取主子表模型配置 + LCMsConfig.Config config = new LCMsConfig.Config(form); + // 子表删除 + batchDelDetail(config.getSubTableId(),config.getSubFKField(),id); } /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return + * 批量删除明细 供子类调用 + * @param tableId 表定义ID + * @param fk 关联字段 + * @param id 主表ID */ - private R doDel() { - long id = params.readLong("id"); - if (id <= 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); - SwMap props = form.getOpts().readMap("config").readMap("props"); - //主表 - ModelTable masterTable = ModelTableCache.getInstance().get(props.readLong("masterTable", -1L)); - Assert.notNull(masterTable, "未获取到主表配置"); - - //获取子表 - ModelTable subTable = ModelTableCache.getInstance().get(props.readLong("subTable", -1L)); - String subForeignKey = props.readString("subForeignKey", "-1"); - Assert.isTrue(subTable != null && !subForeignKey.equals("-1"), "未获取到子表配置"); - - // - DbEngine engine = DbEngine.getInstance(); - EntityDao masterDao = engine.findDao(masterTable.getName()); - EntityDao subDao = engine.findDao(subTable.getName()); - // - List delDetails = subDao.queryWhere(subForeignKey + " = ?", id); - checkDetails(delDetails); - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - subDao.batchDelete(delDetails); - // - EntityHelper.checkExists(masterTable.getId(), id); - masterDao.deleteEntity(id); - } - - @Override - public void doAfterDbCommit() { - if (masterTable.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(masterTable.getName()); - cache.remove(id); - } - if (subTable.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(masterTable.getName()); - cache.remove(id); - } - } - }); - return R.success(); - } - - protected void checkDetails(List details) { - details.forEach(item -> EntityHelper.checkExists(item.getModelTable().getId(), item.getEntityId())); + protected void batchDelDetail(long tableId,String fk,long id){ + if(tableId<=0L)return; + ModelTable table = ModelTableCache.getInstance().get(tableId); + if(table == null) return; + EntityDao dao =DbEngine.getInstance().findDao(table.getTableName()); + if(dao!=null){ + dao.deleteEntity(String.format(" where %s = ? ",fk),id); + } } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java index ee38599..b7796cb 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java @@ -1,70 +1,14 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; -import cc.smtweb.system.bpm.web.engine.model.listcard.ModelUtils; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.AbsLoadHandler; + +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.system.bpm.web.engine.model.common.ModelLoadHandler; + /** * @Author:lip * @Date : 2022/8/28 21:44 + * 主子表表单数据加载Handler */ -public class LCMsLoadHandler extends AbsLoadHandler { - /** - * 主表新增 - * - * @return - */ - public R mAdd() { - SwMap data = doAdd(LCMsDefine.dsMCard); - return R.success(ModelUtils.buildRetData(LCMsDefine.dsMCard, data)); - } - - /** - * 主表编辑 - * - * @return - */ - public R mLoad() { - SwMap bean = doLoadCard(LCMsDefine.dsMCard); - return R.success(ModelUtils.buildRetData(LCMsDefine.dsMCard, bean)); - } - - /** - * 主表列表加载 - * - * @return - */ - public R mList() { - DynRetBean list = doList(LCMsDefine.dsMList); - return R.success(list); - } - - /** - * 子列表加载 - * - * @return - */ - public R sList() { - DynRetBean list = doList(LCMsDefine.dsSList); - return R.success(list); - } - - /** - * 主列表分页数据 - * - * @return - */ - public R getMTotal() { - return doTotal(LCMsDefine.dsMList); - } +public class LCMsLoadHandler extends ModelLoadHandler { - /** - * 子列表分页数据 - * - * @return - */ - public R getSTotal() { - return doTotal(LCMsDefine.dsSList); - } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java index 3e82cb5..9a81338 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java @@ -1,101 +1,73 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; -import cc.smtweb.framework.core.common.R; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.jdbc.IDbWorker; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.engine.model.listcard.ModelUtils; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.AbsSaveHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelHelper; -import org.springframework.util.Assert; +import cc.smtweb.system.bpm.web.engine.model.common.ModelDetail; +import cc.smtweb.system.bpm.web.engine.model.common.ModelSaveHandler; -import java.util.ArrayList; -import java.util.Set; +import java.util.function.BiConsumer; /** * @Author:lip * @Date : 2022/8/28 21:03 + * 主子表保存handler */ -public class LCMsSaveHandler extends AbsSaveHandler { - /** - * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - */ - public R save() { - //对应的数据集定义 - PageDataset masterDataSet = ModelUtils.findPageDatasetByName(this.datasets, LCMsDefine.dsMCard); - PageDataset subDataSet = ModelUtils.findPageDatasetByName(this.datasets, LCMsDefine.dsSList); - // - SwMap filter = params.readMap("filter"); - - //待保存数据 - SwMap data = params.readMap("data"); - if (data == null) throw new BizException("没有收到待保存的的数据:" + LCMsDefine.dsMCard + "!"); +public class LCMsSaveHandler extends ModelSaveHandler { + // 子表明细 + protected ModelDetail subDetail; - //获取子表关联字段 - String subForeignKey = form.getOpts().readMap("config").readMap("props").readString("subForeignKey", "-1"); - Assert.isTrue(!subForeignKey.equals("-1"), "未获取到子表外键配置"); - - //读取待保存的bean - DefaultEntity masterBean = readBeanFromPage(masterDataSet, data.readMap(LCMsDefine.dsMCard).readMap("form")); - if (filter != null && masterBean.isNew()) { - //有过滤条件,将关联的值设上 - setLinkValue(masterDataSet, masterBean, f -> filter.get(f.name)); - } - // 读取子表数据 - SwMap details = params.readMap("details"); - Assert.notNull(details, "没有收到待保存的明细数据"); - // - ArrayList inserted = new ArrayList<>(); - ArrayList updated = new ArrayList<>(); - details.readListMap("inserted").forEach(row -> { - SwMap rowData = new SwMap(); - rowData.putAll(row); - DefaultEntity insertBean = readBeanFromPage(subDataSet, rowData); - insertBean.put(subForeignKey, masterBean.getEntityId()); - inserted.add(insertBean); - }); - details.readListMap("updated").forEach(row -> { - SwMap rowData = new SwMap(); - rowData.putAll(row); - DefaultEntity updateBean = readBeanFromPage(subDataSet, rowData); - updated.add(updateBean); + @Override + protected void readFromPage(SwMap pageData, SwMap filter) { + super.readFromPage(pageData, filter); + LCMsConfig.Config config = new LCMsConfig.Config(form); + // 读取子表 + subDetail = readDetailFromPage(LCMsConfig.dsSList,pageData,filter,(isNew,item) -> { + if(isNew){ + item.setEntityId(DbEngine.getInstance().nextId()); + item.put(config.getSubFKField(),bean.getEntityId()); + } }); - Set deleted = details.readLongSet("deleted"); - - // - checkBean(masterBean); + } - DbEngine.getInstance().doTrans(new IDbWorker() { - @Override - public void work() { - saveBean(masterBean); - ModelTable subTable = ModelTableCache.getInstance().get(subDataSet.masterTable); - Assert.notNull(subTable, "未获取到子表"); + @Override + protected void checkValid() { + super.checkValid(); + // 校验子表明细 + } - EntityDao dao = DbEngine.getInstance().findDao(subTable.getName()); - dao.batchInsertEntity(inserted); - dao.batchUpdateEntity(updated); - if (deleted != null) { - dao.deleteEntity(deleted); - } - } + @Override + protected void doSave() { + super.doSave(); + // 保存子表 + saveDetail(LCMsConfig.dsSList,subDetail); + } - @Override - public void doAfterDbCommit() { - afterCommit(masterBean); - } + /** + * 读取明细 供子类调用 + * @param dsName 数据集名称 + * @param pageData 数据对象 + * @param filter 数据集的filter参数 + * @param afterReadBean 读取明细之后的接口 + * @return + * @param + */ + protected ModelDetail readDetailFromPage(String dsName, SwMap pageData, SwMap filter, BiConsumer afterReadBean) { + ModelDetail modelDetail = new ModelDetail(); + PageDataset pageDataset = findDataset(dsName); + modelDetail.readFromMap(pageDataset,pageData,afterReadBean); + return modelDetail; + } - @Override - public void doAfterDbRollback() { - afterRollback(masterBean); - } - }); - return R.success(ModelHelper.buildRetData(masterDataSet.name, masterBean.getData())); + /** + * 保存明细 供子类调用 + * @param dsName + * @param modelDetail + * @param + */ + protected void saveDetail(String dsName, ModelDetail modelDetail){ + PageDataset pageDataset = findDataset(dsName); + modelDetail.batchSave(pageDataset); } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java index ecc1ade..5ed3e9b 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java @@ -4,74 +4,68 @@ 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.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.mvc.service.AbstractHandler; import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; +import cc.smtweb.system.bpm.web.engine.model.common.*; /** * @Author:lip * @Date : 2022/8/28 20:38 + * 卡片列表(主子表)接口服务类 */ @SwService -public class LCMsService extends DynPageService { - private final static String TYPE_MODEL_LIST = "modelList"; - private final static String TYPE_MODEL_ADD = "modelAdd"; - private final static String TYPE_MODEL_LOAD = "modelLoad"; - private final static String TYPE_MODEL_SAVE = "modelSave"; - private final static String TYPE_MODEL_DEL = "modelDel"; - - @Override +public class LCMsService extends ModelService { + public final static String TYPE_MODEL_SUB_LIST = "modelSubList"; + public final static String TYPE_MODEL_SUB_LOAD = "modelSubLoad"; + public final static String TYPE_MODEL_SUB_SAVE = "modelSubSave"; + public final static String TYPE_MODEL_SUB_DEL = "modelSubDel"; protected AbstractHandler createHandler(String type) { switch (type) { - case TYPE_MODEL_LIST: case TYPE_MODEL_LOAD: - case TYPE_MODEL_ADD: - return new LCMsLoadHandler(); + return new LCMsLoadHandler(); case TYPE_MODEL_SAVE: - return new LCMsSaveHandler(); + return new LCMsSaveHandler(); case TYPE_MODEL_DEL: return new LCMsDelHandler(); + case TYPE_MODEL_SUB_LIST: + return new ModelListHandler(LCMsConfig.dsSList); + case TYPE_MODEL_SUB_LOAD: + return new ModelLoadHandler(LCMsConfig.dsSCard); + case TYPE_MODEL_SUB_SAVE: + return new ModelSaveHandler(LCMsConfig.dsSCard); + case TYPE_MODEL_SUB_DEL: + return new ModelDelHandler(LCMsConfig.dsSCard); } return super.createHandler(type); } - - //保存 - public R modelSave(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((LCMsSaveHandler) handler).save()); - } - - //读取 - public R modelLoad(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((LCMsLoadHandler) handler).mLoad()); - } - - //新增 - public R modelAdd(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_ADD, handler -> ((LCMsLoadHandler) handler).mAdd()); + //子表单独保存 + public R modelSubSave(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_SAVE, handler -> ((ModelSaveHandler) handler).save()); } - //删除 - public R modelDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCMsDelHandler) handler).del()); + //子表读取 + public R modelSubLoad(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_LOAD, handler -> ((ModelLoadHandler) handler).load()); } - //主表列表数据 - public R modelMList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).mList()); + //子表新增初始化 + public R modelSubAdd(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_LOAD, handler -> ((ModelLoadHandler) handler).add()); } - //主表列表总记录数及合计栏 - public R modelMListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getMTotal()); + //子表删除 + public R modelSubDel(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_DEL, handler -> ((ModelDelHandler) handler).del()); } //子表列表数据 - public R modelSList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).sList()); + public R modelSubList(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_LIST, handler -> ((ModelListHandler) handler).data()); } - //子表列表总记录数及合计栏 - public R modelSListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getSTotal()); + //列子表表总记录数及合计栏 + public R modelSubListTotal(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_SUB_LIST, handler -> ((ModelListHandler) handler).getTotal()); } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/normal/LCNormalService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/normal/LCNormalService.java index 37f91ed..6a2bf01 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/normal/LCNormalService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/normal/LCNormalService.java @@ -1,7 +1,7 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.normal; import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; +import cc.smtweb.system.bpm.web.engine.model.common.ModelService; /** * @Author:lip diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java index 5231863..0fc325e 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/single/LCSingleService.java @@ -1,7 +1,7 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.single; import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; +import cc.smtweb.system.bpm.web.engine.model.common.ModelService; /** * Created by Akmm at 2022-08-12 15:37 diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeSaveHandler.java index ec7d13e..09a135a 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeSaveHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeSaveHandler.java @@ -1,7 +1,7 @@ package cc.smtweb.system.bpm.web.sys.base.billType; import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; +import cc.smtweb.system.bpm.web.engine.model.common.ModelSaveHandler; import org.apache.commons.lang3.StringUtils; /** diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeService.java index c278ecc..c1d25be 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/base/billType/BillTypeService.java @@ -3,7 +3,6 @@ package cc.smtweb.system.bpm.web.sys.base.billType; import cc.smtweb.framework.core.annotation.SwService; import cc.smtweb.framework.core.mvc.service.AbstractHandler; import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; -import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; import cc.smtweb.system.bpm.web.engine.model.listcard.single.LCSingleService; /** @@ -14,12 +13,13 @@ import cc.smtweb.system.bpm.web.engine.model.listcard.single.LCSingleService; public class BillTypeService extends LCSingleService { @Override protected AbstractHandler createHandler(String type) { - if (TYPE_COMBO.equals(type)) return new DefaultComboHandler(BillType.ENTITY_NAME); - return super.createHandler(type); - } + switch (type) { + case TYPE_COMBO: + return new DefaultComboHandler(BillType.ENTITY_NAME); + case TYPE_MODEL_SAVE: + return new BillTypeSaveHandler(); - @Override - protected ModelSaveHandler getSaveHandler() { - return new BillTypeSaveHandler(); + } + return super.createHandler(type); } }