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/common/FlowModelDelHandler.java similarity index 70% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowDelHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelDelHandler.java index 3e58c16..b862bf3 100644 --- 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/common/FlowModelDelHandler.java @@ -1,17 +1,15 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; +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; -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 { +public class FlowModelDelHandler extends ModelDelHandler implements FlowListener { protected FlowInstance flowInstance; - @Override protected void localDel(long id, ModelTable table) { long taskId = params.readLong("taskId"); 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/common/FlowModelListHandler.java similarity index 82% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowListHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelListHandler.java index b7dea8f..1a5d63e 100644 --- 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/common/FlowModelListHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.EntityHelper; @@ -12,19 +12,15 @@ import cc.smtweb.system.bpm.web.engine.flow.entity.ProcInst; /** * Created by Akmm at 2022-08-29 11:41 + * 流程列表handler */ -public class FlowListHandler extends DynPageListHandler { +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()); } }; - - public FlowListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { - super(pageId, filter, pageDataSet); - } - @Override protected SqlPara buildSqlPara() { return DynPageHelper.buildSelectSqlEx(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/common/FlowModelLoadHandler.java similarity index 72% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleLoadHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelLoadHandler.java index eb6c293..294cf15 100644 --- 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/common/FlowModelLoadHandler.java @@ -1,25 +1,20 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; +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.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 { +public class FlowModelLoadHandler extends ModelLoadHandler implements FlowListener { protected FlowInstance flowInstance; - @Override protected void afterAdd(SwMap ret) { super.afterAdd(ret); @@ -51,11 +46,4 @@ public class FlowSingleLoadHandler extends ModelLoadHan 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/common/FlowModelSaveHandler.java similarity index 90% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowSingleSaveHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowModelSaveHandler.java index 72ed92e..4d0d5b2 100644 --- 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/common/FlowModelSaveHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.impl.DefaultEntity; @@ -9,15 +9,13 @@ 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 { +public class FlowModelSaveHandler extends ModelSaveHandler implements FlowListener { protected FlowInstance flowInstance; - @Override protected void readFromPage(SwMap pageData, SwMap filter) { super.readFromPage(pageData, filter); 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/flow/listcard/single/FlowTransHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java similarity index 95% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/flow/listcard/single/FlowTransHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/FlowTransHandler.java index 9fa1019..09e5b3d 100644 --- 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/common/FlowTransHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.common.R; import cc.smtweb.framework.core.common.SwMap; @@ -11,7 +11,6 @@ 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 @@ -34,7 +33,7 @@ public class FlowTransHandler extends AbstractDynPageHa 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)); 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/listcard/abshandler/ModelDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java similarity index 87% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelDelHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelDelHandler.java index 57f38d3..96c0ba7 100644 --- 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/common/ModelDelHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; @@ -15,10 +15,18 @@ import cc.smtweb.system.bpm.web.engine.dynPage.AbstractDynPageHandler; /** * Created by Akmm at 2022/4/21 17:53 - * 删除操作 + * 模型删除handler */ public class ModelDelHandler extends AbstractDynPageHandler { - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; + private String cardDsName = ModelHelper.DATASET_NAME_CARD; + + public ModelDelHandler() { + } + + public ModelDelHandler(String cardDsName) { + this.cardDsName = cardDsName; + } + /** * 删除指定数据集,入参{pageId, dataset, id} * @@ -29,8 +37,7 @@ public class ModelDelHandler extends AbstractDynPageHandler { if (id == 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); //数据集 PageDataset pageDataSet = findCardDataset(cardDsName); - - checkBean(pageDataSet, id); + checkDel(pageDataSet,id); DbEngine.getInstance().doTrans(new IDbWorker() { @Override @@ -79,7 +86,7 @@ public class ModelDelHandler extends AbstractDynPageHandler { * @param pageDataSet * @param id */ - protected void checkBean(PageDataset pageDataSet, long 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/listcard/abshandler/ModelHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java similarity index 87% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelHelper.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelHelper.java index 2ee6104..a843eac 100644 --- 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/common/ModelHelper.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +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; 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/common/ModelListHandler.java similarity index 90% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelListHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelListHandler.java index 00ef78a..7a79cdb 100644 --- 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/common/ModelListHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.common.R; import cc.smtweb.framework.core.common.SwMap; @@ -13,10 +13,10 @@ import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; /** * Created by Akmm at 2022-09-15 15:01 - * 列表类服务handler + * 模型列表handler */ public class ModelListHandler extends DynPageListHandler { - protected String dsName; + protected String dsName = ModelHelper.DATASET_NAME_LIST; private ModelListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { super(pageId, filter, pageDataSet); } @@ -24,7 +24,9 @@ public class ModelListHandler extends DynPageListHandler { public ModelListHandler(String dsName) { this.dsName = dsName; } + public ModelListHandler() { + } @Override public void init(SwMap params, UserSession us) { super.init(params, us); 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/common/ModelLoadHandler.java similarity index 66% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelLoadHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelLoadHandler.java index e184105..f5a27b1 100644 --- 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/common/ModelLoadHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.common.R; import cc.smtweb.framework.core.common.SwConsts; @@ -10,15 +10,22 @@ 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 + * 模型卡片加载handler */ public class ModelLoadHandler extends AbstractDynPageHandler { protected T bean; - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; + private String cardDsName = ModelHelper.DATASET_NAME_CARD; + + public ModelLoadHandler() { + } + + public ModelLoadHandler(String cardDsName) { + this.cardDsName = cardDsName; + } //新增卡片操作,初始化定义的数据集 public R add() { @@ -70,47 +77,4 @@ public class ModelLoadHandler extends AbstractDynPageHa 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/common/ModelSaveHandler.java similarity index 97% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelSaveHandler.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelSaveHandler.java index 407e9f9..326c874 100644 --- 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/common/ModelSaveHandler.java @@ -1,4 +1,4 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +package cc.smtweb.system.bpm.web.engine.model.common; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; @@ -27,13 +27,20 @@ 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; - protected String cardDsName = ModelHelper.DATASET_NAME_CARD; + 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:{}} @@ -118,7 +125,6 @@ public class ModelSaveHandler extends AbstractDynPageHa } return vo; } - /** * 保存校验 * 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/common/ModelService.java similarity index 70% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/abshandler/ModelService.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/common/ModelService.java index 5a64c73..99bb1d5 100644 --- 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/common/ModelService.java @@ -1,19 +1,19 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.abshandler; +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_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"; @@ -22,29 +22,16 @@ public class ModelService extends DynPageService { protected AbstractHandler createHandler(String type) { switch (type) { case TYPE_MODEL_LIST: + return new ModelListHandler(); case TYPE_MODEL_LOAD: - case TYPE_MODEL_ADD: - return getLoadHandler(); + return new ModelLoadHandler(); case TYPE_MODEL_SAVE: - return getSaveHandler(); + return new ModelSaveHandler(); case TYPE_MODEL_DEL: - return getDelHandler(); + return new ModelDelHandler(); } 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()); @@ -57,7 +44,7 @@ public class ModelService extends DynPageService { //读取 public R modelAdd(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_ADD, handler -> ((ModelLoadHandler) handler).add()); + return pageHandler(params, us, TYPE_MODEL_LOAD, handler -> ((ModelLoadHandler) handler).add()); } //删除 @@ -67,11 +54,11 @@ public class ModelService extends DynPageService { //列表数据 public R modelList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((ModelLoadHandler) handler).list()); + 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 -> ((ModelLoadHandler) handler).getTotal()); + 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/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/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/lclc1/LCLC1Define.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java similarity index 62% rename from smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Define.java rename to smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc1/LCLC1Config.java index 2bd1091..726deb7 100644 --- 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/LCLC1Config.java @@ -4,9 +4,9 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; * @Author:lip * @Date : 2022/9/2 12:00 */ -public class LCLC1Define { +public class LCLC1Config { public static final String dsLList = "lList"; public static final String dsLCard = "lCard"; - public static final String dsRList = "rList"; - public static final String dsRCard = "rCard"; + 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/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); } }