From 2282a5ef4fab4579d7dffeec4fbb85d9bab3f006 Mon Sep 17 00:00:00 2001 From: lip Date: Tue, 13 Sep 2022 18:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/web/design/form/model/LcNormalWorker.java | 14 ++- .../model/listcard/lclc1/LCLC1LoadHandler.java | 4 +- .../engine/model/listcard/lclc1/LCLC1Service.java | 14 +-- .../engine/model/listcard/lclc2/LCLC2Service.java | 12 +++ .../engine/model/listcard/lclt/LCLTService.java | 12 +++ .../model/listcard/lcltms/LCLtMsService.java | 12 +++ .../web/engine/model/listcard/lcms/LCMsDefine.java | 14 +++ .../engine/model/listcard/lcms/LCMsDelHandler.java | 87 ++++++++++++++++++ .../model/listcard/lcms/LCMsLoadHandler.java | 70 ++++++++++++++ .../model/listcard/lcms/LCMsSaveHandler.java | 101 +++++++++++++++++++++ .../engine/model/listcard/lcms/LCMsService.java | 77 ++++++++++++++++ .../model/listcard/mastersub/LCMsDefine.java | 14 --- .../model/listcard/mastersub/LCMsDelHandler.java | 96 -------------------- .../model/listcard/mastersub/LCMsLoadHandler.java | 70 -------------- .../model/listcard/mastersub/LCMsSaveHandler.java | 101 --------------------- .../model/listcard/mastersub/LCMsService.java | 82 ----------------- .../static/template/default/model_card_ms.ftl | 34 +++---- 17 files changed, 418 insertions(+), 396 deletions(-) create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc2/LCLC2Service.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt/LCLTService.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcltms/LCLtMsService.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDefine.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDelHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsLoadHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsSaveHandler.java delete mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsService.java diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/model/LcNormalWorker.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/model/LcNormalWorker.java index 9842b9f..7b13537 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/model/LcNormalWorker.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/model/LcNormalWorker.java @@ -1,6 +1,7 @@ package cc.smtweb.system.bpm.web.design.form.model; 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.util.JsonUtil; @@ -26,8 +27,17 @@ public class LcNormalWorker extends BaseModelWorker { String baseName = ModelFormHelper.getPageName(bean); String listName = baseName + StringUtil.upFirst(SwEnum.PageType.LIST.value); String cardName = baseName + StringUtil.upFirst(SwEnum.PageType.CARD.value); - - bean.setOption(JsonUtil.encodeString(bean.getOpts())); + // + SwMap opts = bean.getOpts(); + SwMap cfg = opts.readMap(ModelFormHelper.OPT_CONFIG); + // + SwMap cfgPage = new SwMap(); + cfg.put(ModelFormHelper.OPT_PAGE, cfgPage); + // + cfgPage.put(SwEnum.PageType.LIST.value, listName); + cfgPage.put(SwEnum.PageType.CARD.value, cardName); + bean.setOption(JsonUtil.encodeString(opts)); + // ModelForm listPage; ModelForm cardPage; if (bean.isNew()) { 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 index 597d19c..fb7c8b9 100644 --- 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 @@ -55,7 +55,7 @@ public class LCLC1LoadHandler extends ModelLoadHandler { * @return */ public R lList() { - return super.list(LCLC1Define.dsLCard); + return super.list(LCLC1Define.dsLList); } /** @@ -64,7 +64,7 @@ public class LCLC1LoadHandler extends ModelLoadHandler { * @return */ public R rList() { - return super.list(LCLC1Define.dsRCard); + return super.list(LCLC1Define.dsRList); } /** 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 700c93a..e51a38d 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 @@ -47,12 +47,7 @@ public class LCLC1Service extends ModelService { } //删除 - public R modelLLDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).lDel()); - } - - //删除 - public R modelLCDel(@SwBody SwMap params, UserSession us) { + public R modelLDel(@SwBody SwMap params, UserSession us) { return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).lDel()); } @@ -83,12 +78,7 @@ public class LCLC1Service extends ModelService { } //删除 - public R modelRLDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).rDel()); - } - - //删除 - public R modelRCDel(@SwBody SwMap params, UserSession us) { + public R modelRDel(@SwBody SwMap params, UserSession us) { return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCLC1DelHandler) handler).rDel()); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc2/LCLC2Service.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc2/LCLC2Service.java new file mode 100644 index 0000000..e04d00f --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclc2/LCLC2Service.java @@ -0,0 +1,12 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lclc2; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.web.engine.model.listcard.lclc1.LCLC1Service; + +/** + * @Author:lip + * @Date : 2022/9/13 15:28 + */ +@SwService +public class LCLC2Service extends LCLC1Service { +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt/LCLTService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt/LCLTService.java new file mode 100644 index 0000000..008a0da --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lclt/LCLTService.java @@ -0,0 +1,12 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lclt; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.web.engine.model.listcard.normal.LCNormalService; + +/** + * @Author:lip + * @Date : 2022/9/13 15:30 + */ +@SwService +public class LCLTService extends LCNormalService { +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcltms/LCLtMsService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcltms/LCLtMsService.java new file mode 100644 index 0000000..ea03a24 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcltms/LCLtMsService.java @@ -0,0 +1,12 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lcltms; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.web.engine.model.listcard.lcms.LCMsService; + +/** + * @Author:lip + * @Date : 2022/9/13 15:32 + */ +@SwService +public class LCLtMsService extends LCMsService { +} 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 new file mode 100644 index 0000000..18b6518 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDefine.java @@ -0,0 +1,14 @@ +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 new file mode 100644 index 0000000..b169cb0 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsDelHandler.java @@ -0,0 +1,87 @@ +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; + +/** + * @Author:lip + * @Date : 2022/8/28 20:40 + */ +public class LCMsDelHandler extends AbsDelHandler { + + /** + * 列表删除 + * + * @return + */ + public R del() { + return doDel(); + } + + /** + * 删除指定数据集,入参{pageId, dataset, id} + * + * @return + */ + 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())); + } +} 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 new file mode 100644 index 0000000..ee38599 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsLoadHandler.java @@ -0,0 +1,70 @@ +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; +/** + * @Author:lip + * @Date : 2022/8/28 21:44 + */ +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); + } + + /** + * 子列表分页数据 + * + * @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 new file mode 100644 index 0000000..3e82cb5 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsSaveHandler.java @@ -0,0 +1,101 @@ +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 java.util.ArrayList; +import java.util.Set; + +/** + * @Author:lip + * @Date : 2022/8/28 21:03 + */ +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 + "!"); + + //获取子表关联字段 + 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); + }); + 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, "未获取到子表"); + + EntityDao dao = DbEngine.getInstance().findDao(subTable.getName()); + dao.batchInsertEntity(inserted); + dao.batchUpdateEntity(updated); + if (deleted != null) { + dao.deleteEntity(deleted); + } + } + + @Override + public void doAfterDbCommit() { + afterCommit(masterBean); + } + + @Override + public void doAfterDbRollback() { + afterRollback(masterBean); + } + }); + return R.success(ModelHelper.buildRetData(masterDataSet.name, masterBean.getData())); + } +} 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 new file mode 100644 index 0000000..ecc1ade --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/lcms/LCMsService.java @@ -0,0 +1,77 @@ +package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; + +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.session.UserSession; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; + +/** + * @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 + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_MODEL_LIST: + case TYPE_MODEL_LOAD: + case TYPE_MODEL_ADD: + return new LCMsLoadHandler(); + case TYPE_MODEL_SAVE: + return new LCMsSaveHandler(); + case TYPE_MODEL_DEL: + return new LCMsDelHandler(); + } + 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 modelDel(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCMsDelHandler) handler).del()); + } + + //主表列表数据 + public R modelMList(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).mList()); + } + + //主表列表总记录数及合计栏 + public R modelMListTotal(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getMTotal()); + } + + //子表列表数据 + public R modelSList(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).sList()); + } + + //子表列表总记录数及合计栏 + public R modelSListTotal(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getSTotal()); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDefine.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDefine.java deleted file mode 100644 index 0112e1d..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDefine.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.mastersub; - -/** - * @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/mastersub/LCMsDelHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDelHandler.java deleted file mode 100644 index 33637fa..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsDelHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.mastersub; - -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; - -/** - * @Author:lip - * @Date : 2022/8/28 20:40 - */ -public class LCMsDelHandler extends AbsDelHandler { - - /** - * 列表删除 - * - * @return - */ - public R lDel() { - return del(); - } - - /** - * 卡片删除 - * - * @return - */ - public R cDel() { - return del(); - } - - /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return - */ - private R del() { - 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())); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsLoadHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsLoadHandler.java deleted file mode 100644 index 2e3b897..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsLoadHandler.java +++ /dev/null @@ -1,70 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.mastersub; - -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; -/** - * @Author:lip - * @Date : 2022/8/28 21:44 - */ -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); - } - - /** - * 子列表分页数据 - * - * @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/mastersub/LCMsSaveHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsSaveHandler.java deleted file mode 100644 index 25f6096..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsSaveHandler.java +++ /dev/null @@ -1,101 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.mastersub; - -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 java.util.ArrayList; -import java.util.Set; - -/** - * @Author:lip - * @Date : 2022/8/28 21:03 - */ -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 + "!"); - - //获取子表关联字段 - 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); - }); - 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, "未获取到子表"); - - EntityDao dao = DbEngine.getInstance().findDao(subTable.getName()); - dao.batchInsertEntity(inserted); - dao.batchUpdateEntity(updated); - if (deleted != null) { - dao.deleteEntity(deleted); - } - } - - @Override - public void doAfterDbCommit() { - afterCommit(masterBean); - } - - @Override - public void doAfterDbRollback() { - afterRollback(masterBean); - } - }); - return R.success(ModelHelper.buildRetData(masterDataSet.name, masterBean.getData())); - } -} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsService.java deleted file mode 100644 index 86969a0..0000000 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/model/listcard/mastersub/LCMsService.java +++ /dev/null @@ -1,82 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.model.listcard.mastersub; - -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.session.UserSession; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; - -/** - * @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 - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_MODEL_LIST: - case TYPE_MODEL_LOAD: - case TYPE_MODEL_ADD: - return new LCMsLoadHandler(); - case TYPE_MODEL_SAVE: - return new LCMsSaveHandler(); - case TYPE_MODEL_DEL: - return new LCMsDelHandler(); - } - 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 modelLDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCMsDelHandler) handler).lDel()); - } - - //卡片删除 - public R modelCDel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_DEL, handler -> ((LCMsDelHandler) handler).cDel()); - } - - //主表列表数据 - public R modelMList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).mList()); - } - - //主表列表总记录数及合计栏 - public R modelMListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getMTotal()); - } - - //子表列表数据 - public R modelSList(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).sList()); - } - - //子表列表总记录数及合计栏 - public R modelSListTotal(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_MODEL_LIST, handler -> ((LCMsLoadHandler) handler).getSTotal()); - } -} diff --git a/smtweb-framework/bpm/src/main/resources/static/template/default/model_card_ms.ftl b/smtweb-framework/bpm/src/main/resources/static/template/default/model_card_ms.ftl index cb7867d..79fa180 100644 --- a/smtweb-framework/bpm/src/main/resources/static/template/default/model_card_ms.ftl +++ b/smtweb-framework/bpm/src/main/resources/static/template/default/model_card_ms.ftl @@ -36,7 +36,7 @@ "shape": "panel", "props": { "size": "56", - "label": "${group.label}", + "label": "标题", "colNum": 2, "alignY": "center", "paddingLeft": 16, @@ -77,7 +77,7 @@ "label": "${field.label}", "dataset": "${field.dataset}", "required": "${field.required}", - "field": "${field.field}", + "field": "${field.id}", "placeholder": "请输入内容", "labelWidth": 150, "readonly": "${field.readonly}", @@ -234,7 +234,7 @@ "shape": "panel", "props": { "size": "400", - "label": "列表", + "label": "子表列表", "colNum": 0, "paddingLeft": 16, "paddingRight": 16, @@ -246,12 +246,12 @@ "id": "id${newId()}", "type": "fx-table", "props": { - "label": "表格", + "label": "子表表格", "border": true, "stripe": true, "showHeader": true, "fit": true, - "dataset": "${group.dataset}", + "dataset": "${layout.listSub[0].dataset}", "actionWidth": 150 }, "slots": { @@ -276,11 +276,11 @@ "label": "编辑", "type": "text", "leftIcon": "edit", - "action": "button:edit", + "action": "button:loadRow", "dataset": "${layout.listSub[0].dataset}", - "link": true, - "linkType": "", - "fxLink": "" + "linkType": "dialog", + "fxLink": "dialog:cardSubDialog", + "fxLink_text": "子表编辑卡片" } }, { @@ -290,7 +290,8 @@ "label": "删除", "type": "text", "leftIcon": "delete-themes", - "action": "button:remove", + "action": "button:delRow", + "dataset": "${layout.listSub[0].dataset}", "preAction": "", "link": true, "confirm": "" @@ -341,7 +342,8 @@ "type": "fx-button-group", "props": { "showDropdown": false, - "textAlign": "center" + "textAlign": "center", + "dataset": "${layout.cardMaster[0].dataset}" }, "slots": { "default": [ @@ -473,7 +475,7 @@ "label": "保存", "leftIcon": "save", "type": "success", - "action": "button:save", + "action": "button:saveRow", "dataset": "${assist_dialog.dataset}" }, "id": "id${newId()}" @@ -481,12 +483,10 @@ { "type": "fx-button", "props": { - "label": "保存并新增", + "label": "保存行并新增", "type": "primary", - "action": "button:saveRow", - "linkType": "curr", - "dataset": "${layout.listSub[0].dataset}", - "nextAction": "button:addRow" + "action": "button:saveAddRow", + "dataset": "${assist_dialog.dataset}" }, "id": "${newId()}", "events": {}