@@ -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.framework.core.db.vo.ModelTable; | ||||
import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; | 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.flow.FlowListener; | ||||
import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelDelHandler; | |||||
/** | /** | ||||
* Created by Akmm at 2022-09-01 15:03 | * 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; | protected FlowInstance flowInstance; | ||||
@Override | @Override | ||||
protected void localDel(long id, ModelTable table) { | protected void localDel(long id, ModelTable table) { | ||||
long taskId = params.readLong("taskId"); | long taskId = params.readLong("taskId"); |
@@ -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.common.SwMap; | ||||
import cc.smtweb.framework.core.db.EntityHelper; | 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 | * 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() { | static IBuildSqlListener sqlListener = new IBuildSqlListener() { | ||||
@Override | @Override | ||||
public void buildSelect(PageDataset dataSet, StringBuilder sql) { | public void buildSelect(PageDataset dataSet, StringBuilder sql) { | ||||
sql.append("\ninner join " + EntityHelper.getSchemaTableName(ProcInst.ENTITY_NAME) + " on pri_id=" + dataSet._getModelTable().getIdField()); | 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 | @Override | ||||
protected SqlPara buildSqlPara() { | protected SqlPara buildSqlPara() { | ||||
return DynPageHelper.buildSelectSqlEx(pageDataSet, filter, sqlListener); | return DynPageHelper.buildSelectSqlEx(pageDataSet, filter, sqlListener); |
@@ -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.common.SwMap; | ||||
import cc.smtweb.framework.core.db.impl.DefaultEntity; | import cc.smtweb.framework.core.db.impl.DefaultEntity; | ||||
import cc.smtweb.framework.core.mvc.service.SwListData; | import cc.smtweb.framework.core.mvc.service.SwListData; | ||||
import cc.smtweb.system.bpm.web.design.form.define.PageDataset; | 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.dynPage.DynRetBean; | ||||
import cc.smtweb.system.bpm.web.engine.flow.FlowHelper; | 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.FlowInstance; | ||||
import cc.smtweb.system.bpm.web.engine.flow.FlowListener; | 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 | * Created by Akmm at 2022-08-26 17:15 | ||||
* 流程加载 | * 流程加载 | ||||
*/ | */ | ||||
public class FlowSingleLoadHandler<T extends DefaultEntity> extends ModelLoadHandler<T> implements FlowListener { | |||||
public class FlowModelLoadHandler<T extends DefaultEntity> extends ModelLoadHandler<T> implements FlowListener { | |||||
protected FlowInstance flowInstance; | protected FlowInstance flowInstance; | ||||
@Override | @Override | ||||
protected void afterAdd(SwMap ret) { | protected void afterAdd(SwMap ret) { | ||||
super.afterAdd(ret); | super.afterAdd(ret); | ||||
@@ -51,11 +46,4 @@ public class FlowSingleLoadHandler<T extends DefaultEntity> extends ModelLoadHan | |||||
ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); | ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); | ||||
ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.create(flowInstance.loadComment(), 0))); | 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; | |||||
} | |||||
} | } |
@@ -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.common.SwMap; | ||||
import cc.smtweb.framework.core.db.impl.DefaultEntity; | 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.FlowHelper; | ||||
import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; | 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.flow.FlowListener; | ||||
import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelSaveHandler; | |||||
/** | /** | ||||
* Created by Akmm at 2022-08-26 16:47 | * Created by Akmm at 2022-08-26 16:47 | ||||
* 带流程的简单卡片之保存 | * 带流程的简单卡片之保存 | ||||
*/ | */ | ||||
public class FlowSingleSaveHandler<T extends DefaultEntity> extends ModelSaveHandler<T> implements FlowListener { | |||||
public class FlowModelSaveHandler<T extends DefaultEntity> extends ModelSaveHandler<T> implements FlowListener { | |||||
protected FlowInstance flowInstance; | protected FlowInstance flowInstance; | ||||
@Override | @Override | ||||
protected void readFromPage(SwMap pageData, SwMap filter) { | protected void readFromPage(SwMap pageData, SwMap filter) { | ||||
super.readFromPage(pageData, filter); | super.readFromPage(pageData, filter); |
@@ -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<DefaultEntity>(); | |||||
case TYPE_MODEL_SAVE: | |||||
return new FlowModelSaveHandler<DefaultEntity>(); | |||||
case TYPE_MODEL_DEL: | |||||
return new FlowModelDelHandler(); | |||||
} | |||||
return super.createHandler(type); | |||||
} | |||||
protected R flowHandler(SwMap params, UserSession us, IWorker<FlowTransHandler> 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); | |||||
} | |||||
} |
@@ -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.R; | ||||
import cc.smtweb.framework.core.common.SwMap; | 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.FlowHelper; | ||||
import cc.smtweb.system.bpm.web.engine.flow.FlowInstance; | 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.flow.FlowListener; | ||||
import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelHelper; | |||||
/** | /** | ||||
* Created by Akmm at 2022-09-01 15:03 | * Created by Akmm at 2022-09-01 15:03 | ||||
@@ -34,7 +33,7 @@ public class FlowTransHandler<T extends DefaultEntity> extends AbstractDynPageHa | |||||
private SwMap buildRetData() { | private SwMap buildRetData() { | ||||
SwMap ret = new SwMap(); | SwMap ret = new SwMap(); | ||||
ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); | ret.put(ModelHelper.DATASET_NAME_CARD, DynRetBean.createBean(bean)); | ||||
flowInstance.setPageRetExtra(ret); | flowInstance.setPageRetExtra(ret); | ||||
ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); | ret.put(FlowHelper.DATASET_NAME_FLOW, DynRetBean.createBean(flowInstance.getProcInst())); | ||||
ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); | ret.put(FlowHelper.DATASET_NAME_COMMENT, DynRetBean.createList(SwListData.EMPTY)); |
@@ -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 extends DefaultEntity> { | |||||
/** | |||||
* 构造返回新的明细对象 | |||||
*/ | |||||
T getNewInstance(); | |||||
/** | |||||
* 读取后设置 | |||||
*/ | |||||
void doAfterRead(boolean isNew, T bean); | |||||
} |
@@ -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.AbstractCache; | ||||
import cc.smtweb.framework.core.cache.CacheManager; | 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 | * Created by Akmm at 2022/4/21 17:53 | ||||
* 删除操作 | |||||
* 模型删除handler | |||||
*/ | */ | ||||
public class ModelDelHandler extends AbstractDynPageHandler { | 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} | * 删除指定数据集,入参{pageId, dataset, id} | ||||
* | * | ||||
@@ -29,8 +37,7 @@ public class ModelDelHandler extends AbstractDynPageHandler { | |||||
if (id == 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); | if (id == 0L) throw new BizException("没有收到待删除记录Id(" + id + ")!"); | ||||
//数据集 | //数据集 | ||||
PageDataset pageDataSet = findCardDataset(cardDsName); | PageDataset pageDataSet = findCardDataset(cardDsName); | ||||
checkBean(pageDataSet, id); | |||||
checkDel(pageDataSet,id); | |||||
DbEngine.getInstance().doTrans(new IDbWorker() { | DbEngine.getInstance().doTrans(new IDbWorker() { | ||||
@Override | @Override | ||||
@@ -79,7 +86,7 @@ public class ModelDelHandler extends AbstractDynPageHandler { | |||||
* @param pageDataSet | * @param pageDataSet | ||||
* @param id | * @param id | ||||
*/ | */ | ||||
protected void checkBean(PageDataset pageDataSet, long id) { | |||||
protected void checkDel(PageDataset pageDataSet, long id) { | |||||
//校验外键引用关系 | //校验外键引用关系 | ||||
EntityHelper.checkExists(pageDataSet.masterTable, id); | EntityHelper.checkExists(pageDataSet.masterTable, id); | ||||
} | } |
@@ -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<T extends DefaultEntity> { | |||||
//页面上新增的行 | |||||
protected List<T> insertList = new ArrayList<T>(); | |||||
//页面上修改的行 | |||||
protected List<T> updateList = new ArrayList<T>(); | |||||
//页面上删除的行Id | |||||
protected List<Long> deleteList = new ArrayList<Long>(); | |||||
public List<T> getInsertList() { | |||||
return insertList; | |||||
} | |||||
public List<T> getUpdateList() { | |||||
return updateList; | |||||
} | |||||
public List<Long> getDeleteList() { | |||||
return deleteList; | |||||
} | |||||
public void setInsertList(List<T> insertList) { | |||||
this.insertList = insertList; | |||||
} | |||||
public void setUpdateList(List<T> updateList) { | |||||
this.updateList = updateList; | |||||
} | |||||
public void setDeleteList(List<Long> 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<T> intf){ | |||||
SwMap details = pageData.readMap(key); | |||||
List<Map<String,Object>> 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<Map<String,Object>> 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<Long> deleted = details.readLongSet("deleted"); | |||||
if(!CommUtil.isEmpty(deleted)){ | |||||
deleteList.addAll(deleted); | |||||
} | |||||
} | |||||
public void batchSave(EntityDao<T> 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<Boolean,T> 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<T> dao = DbEngine.getInstance().findDao(table.getTableName()); | |||||
List<Map<String,Object>> 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<Map<String,Object>> 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<Long> 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<T> dao = DbEngine.getInstance().findDao(table.getTableName()); | |||||
batchSave(dao); | |||||
} | |||||
} |
@@ -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.framework.core.common.SwMap; | ||||
import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; | import cc.smtweb.system.bpm.web.engine.dynPage.DynRetBean; |
@@ -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.R; | ||||
import cc.smtweb.framework.core.common.SwMap; | 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 | * Created by Akmm at 2022-09-15 15:01 | ||||
* 列表类服务handler | |||||
* 模型列表handler | |||||
*/ | */ | ||||
public class ModelListHandler extends DynPageListHandler { | public class ModelListHandler extends DynPageListHandler { | ||||
protected String dsName; | |||||
protected String dsName = ModelHelper.DATASET_NAME_LIST; | |||||
private ModelListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { | private ModelListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { | ||||
super(pageId, filter, pageDataSet); | super(pageId, filter, pageDataSet); | ||||
} | } | ||||
@@ -24,7 +24,9 @@ public class ModelListHandler extends DynPageListHandler { | |||||
public ModelListHandler(String dsName) { | public ModelListHandler(String dsName) { | ||||
this.dsName = dsName; | this.dsName = dsName; | ||||
} | } | ||||
public ModelListHandler() { | |||||
} | |||||
@Override | @Override | ||||
public void init(SwMap params, UserSession us) { | public void init(SwMap params, UserSession us) { | ||||
super.init(params, us); | super.init(params, us); |
@@ -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.R; | ||||
import cc.smtweb.framework.core.common.SwConsts; | 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.framework.core.exception.SwException; | ||||
import cc.smtweb.system.bpm.web.design.form.define.PageDataset; | 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.AbstractDynPageHandler; | ||||
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.dynPage.DynRetBean; | ||||
/** | /** | ||||
* Created by Akmm at 2022-08-16 15:43 | * Created by Akmm at 2022-08-16 15:43 | ||||
* 模型卡片加载handler | |||||
*/ | */ | ||||
public class ModelLoadHandler<T extends DefaultEntity> extends AbstractDynPageHandler { | public class ModelLoadHandler<T extends DefaultEntity> extends AbstractDynPageHandler { | ||||
protected T bean; | 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() { | public R add() { | ||||
@@ -70,47 +77,4 @@ public class ModelLoadHandler<T extends DefaultEntity> extends AbstractDynPageHa | |||||
ret.put(dsName, DynRetBean.createBean(bean)); | ret.put(dsName, DynRetBean.createBean(bean)); | ||||
return 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); | |||||
} | |||||
} | } |
@@ -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.AbstractCache; | ||||
import cc.smtweb.framework.core.cache.CacheManager; | import cc.smtweb.framework.core.cache.CacheManager; | ||||
@@ -27,13 +27,20 @@ import java.util.Map; | |||||
/** | /** | ||||
* Created by Akmm at 2022/4/21 17:53 | * Created by Akmm at 2022/4/21 17:53 | ||||
* 模型保存操作 | |||||
* 模型保存handler | |||||
* 入参:{pageId, data:} | * 入参:{pageId, data:} | ||||
*/ | */ | ||||
public class ModelSaveHandler<T extends DefaultEntity> extends AbstractDynPageHandler { | public class ModelSaveHandler<T extends DefaultEntity> extends AbstractDynPageHandler { | ||||
private Map<String, List<? extends DefaultEntity>> mapTreeBean = new HashMap<>(); | private Map<String, List<? extends DefaultEntity>> mapTreeBean = new HashMap<>(); | ||||
protected T bean; | 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:{}} | * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} | ||||
@@ -118,7 +125,6 @@ public class ModelSaveHandler<T extends DefaultEntity> extends AbstractDynPageHa | |||||
} | } | ||||
return vo; | return vo; | ||||
} | } | ||||
/** | /** | ||||
* 保存校验 | * 保存校验 | ||||
* | * |
@@ -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.annotation.SwBody; | ||||
import cc.smtweb.framework.core.common.R; | import cc.smtweb.framework.core.common.R; | ||||
import cc.smtweb.framework.core.common.SwMap; | 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.AbstractHandler; | ||||
import cc.smtweb.framework.core.session.UserSession; | import cc.smtweb.framework.core.session.UserSession; | ||||
import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; | import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; | ||||
/** | /** | ||||
* Created by Akmm at 2022-08-12 15:37 | * Created by Akmm at 2022-08-12 15:37 | ||||
* 单页面简单列表卡片服务类 | |||||
* 模型通用服务类 | |||||
*/ | */ | ||||
public class ModelService extends DynPageService { | public class ModelService extends DynPageService { | ||||
public final static String TYPE_MODEL_LIST = "modelList"; | 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_LOAD = "modelLoad"; | ||||
public final static String TYPE_MODEL_SAVE = "modelSave"; | public final static String TYPE_MODEL_SAVE = "modelSave"; | ||||
public final static String TYPE_MODEL_DEL = "modelDel"; | public final static String TYPE_MODEL_DEL = "modelDel"; | ||||
@@ -22,29 +22,16 @@ public class ModelService extends DynPageService { | |||||
protected AbstractHandler createHandler(String type) { | protected AbstractHandler createHandler(String type) { | ||||
switch (type) { | switch (type) { | ||||
case TYPE_MODEL_LIST: | case TYPE_MODEL_LIST: | ||||
return new ModelListHandler(); | |||||
case TYPE_MODEL_LOAD: | case TYPE_MODEL_LOAD: | ||||
case TYPE_MODEL_ADD: | |||||
return getLoadHandler(); | |||||
return new ModelLoadHandler<DefaultEntity>(); | |||||
case TYPE_MODEL_SAVE: | case TYPE_MODEL_SAVE: | ||||
return getSaveHandler(); | |||||
return new ModelSaveHandler<DefaultEntity>(); | |||||
case TYPE_MODEL_DEL: | case TYPE_MODEL_DEL: | ||||
return getDelHandler(); | |||||
return new ModelDelHandler(); | |||||
} | } | ||||
return super.createHandler(type); | 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) { | public R modelSave(@SwBody SwMap params, UserSession us) { | ||||
return pageHandler(params, us, TYPE_MODEL_SAVE, handler -> ((ModelSaveHandler) handler).save()); | 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) { | 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) { | 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) { | 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()); | |||||
} | } | ||||
} | } |
@@ -1,76 +1,12 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.flow.listcard.single; | 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.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 | * Created by Akmm at 2022-08-26 16:35 | ||||
* 带工作流的简单列表+卡片 | * 带工作流的简单列表+卡片 | ||||
*/ | */ | ||||
@SwService | @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<FlowTransHandler> 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 { | |||||
} | } |
@@ -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); | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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<T extends DefaultEntity> extends AbstractDynPageHandler { | |||||
private Map<String, List<T>> 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<T> 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<T> 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<T> 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<T> 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<DefaultEntity> cache = CacheManager.getIntance().getCache(tableName); | |||||
List<T> 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<T> 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); | |||||
} | |||||
} |
@@ -4,9 +4,9 @@ package cc.smtweb.system.bpm.web.engine.model.listcard.lclc1; | |||||
* @Author:lip | * @Author:lip | ||||
* @Date : 2022/9/2 12:00 | * @Date : 2022/9/2 12:00 | ||||
*/ | */ | ||||
public class LCLC1Define { | |||||
public class LCLC1Config { | |||||
public static final String dsLList = "lList"; | public static final String dsLList = "lList"; | ||||
public static final String dsLCard = "lCard"; | 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"; | |||||
} | } |
@@ -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(); | |||||
} | |||||
} |
@@ -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<DefaultEntity> { | |||||
/** | |||||
* 左表新增 | |||||
* | |||||
* @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); | |||||
} | |||||
} |
@@ -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<DefaultEntity> { | |||||
/** | |||||
* 左表保存 | |||||
* | |||||
* @return | |||||
*/ | |||||
public R lSave() { | |||||
cardDsName = LCLC1Define.dsLCard; | |||||
return super.save(); | |||||
} | |||||
/** | |||||
* 右表保存 | |||||
* | |||||
* @return | |||||
*/ | |||||
public R rSave() { | |||||
cardDsName = LCLC1Define.dsRCard; | |||||
return super.save(); | |||||
} | |||||
} |
@@ -4,11 +4,10 @@ import cc.smtweb.framework.core.annotation.SwBody; | |||||
import cc.smtweb.framework.core.annotation.SwService; | import cc.smtweb.framework.core.annotation.SwService; | ||||
import cc.smtweb.framework.core.common.R; | import cc.smtweb.framework.core.common.R; | ||||
import cc.smtweb.framework.core.common.SwMap; | 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.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 | * @Author:lip | ||||
@@ -16,80 +15,51 @@ import cc.smtweb.system.bpm.web.engine.model.listcard.abshandler.ModelService; | |||||
*/ | */ | ||||
@SwService | @SwService | ||||
public class LCLC1Service extends ModelService { | 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 | @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<DefaultEntity>(LCLC1Config.dsLCard); | |||||
case TYPE_MODEL_LEFT_SAVE: | |||||
return new ModelSaveHandler<DefaultEntity>(LCLC1Config.dsLCard); | |||||
case TYPE_MODEL_LEFT_DEL: | |||||
return new ModelDelHandler(LCLC1Config.dsLCard); | |||||
} | |||||
return super.createHandler(type); | |||||
} | } | ||||
//保存 | |||||
//左表保存 | |||||
public R modelLSave(@SwBody SwMap params, UserSession us) { | 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) { | 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) { | 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) { | 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) { | 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) { | 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()); | |||||
} | |||||
} | } |
@@ -1,7 +1,7 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.lclt2; | package cc.smtweb.system.bpm.web.engine.model.listcard.lclt2; | ||||
import cc.smtweb.framework.core.annotation.SwService; | 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 | * @Author:lip | ||||
@@ -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; | |||||
} | |||||
} | |||||
} |
@@ -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"; | |||||
} |
@@ -1,87 +1,46 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; | 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.DbEngine; | ||||
import cc.smtweb.framework.core.db.EntityDao; | 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.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.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 | * @Author:lip | ||||
* @Date : 2022/8/28 20:40 | * @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<? extends DefaultEntity> masterDao = engine.findDao(masterTable.getName()); | |||||
EntityDao<? extends DefaultEntity> subDao = engine.findDao(subTable.getName()); | |||||
// | |||||
List<? extends DefaultEntity> 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<? extends DefaultEntity> 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -1,70 +1,14 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; | 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 | * @Author:lip | ||||
* @Date : 2022/8/28 21:44 | * @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<T extends DefaultEntity> extends ModelLoadHandler<T> { | |||||
/** | |||||
* 子列表分页数据 | |||||
* | |||||
* @return | |||||
*/ | |||||
public R getSTotal() { | |||||
return doTotal(LCMsDefine.dsSList); | |||||
} | |||||
} | } |
@@ -1,101 +1,73 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.lcms; | 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.common.SwMap; | ||||
import cc.smtweb.framework.core.db.DbEngine; | 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.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.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 | * @Author:lip | ||||
* @Date : 2022/8/28 21:03 | * @Date : 2022/8/28 21:03 | ||||
* 主子表保存handler | |||||
*/ | */ | ||||
public class LCMsSaveHandler extends AbsSaveHandler<DefaultEntity> { | |||||
/** | |||||
* 保存指定数据集操作,入参:{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<T extends DefaultEntity> extends ModelSaveHandler<T> { | |||||
// 子表明细 | |||||
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<DefaultEntity> inserted = new ArrayList<>(); | |||||
ArrayList<DefaultEntity> 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<Long> 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<DefaultEntity> 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 <E> | |||||
*/ | |||||
protected <E extends DefaultEntity> ModelDetail<E> readDetailFromPage(String dsName, SwMap pageData, SwMap filter, BiConsumer<Boolean,E> afterReadBean) { | |||||
ModelDetail<E> modelDetail = new ModelDetail<E>(); | |||||
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 <E> | |||||
*/ | |||||
protected <E extends DefaultEntity> void saveDetail(String dsName, ModelDetail<E> modelDetail){ | |||||
PageDataset pageDataset = findDataset(dsName); | |||||
modelDetail.batchSave(pageDataset); | |||||
} | } | ||||
} | } |
@@ -4,74 +4,68 @@ import cc.smtweb.framework.core.annotation.SwBody; | |||||
import cc.smtweb.framework.core.annotation.SwService; | import cc.smtweb.framework.core.annotation.SwService; | ||||
import cc.smtweb.framework.core.common.R; | import cc.smtweb.framework.core.common.R; | ||||
import cc.smtweb.framework.core.common.SwMap; | 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.AbstractHandler; | ||||
import cc.smtweb.framework.core.session.UserSession; | 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 | * @Author:lip | ||||
* @Date : 2022/8/28 20:38 | * @Date : 2022/8/28 20:38 | ||||
* 卡片列表(主子表)接口服务类 | |||||
*/ | */ | ||||
@SwService | @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) { | protected AbstractHandler createHandler(String type) { | ||||
switch (type) { | switch (type) { | ||||
case TYPE_MODEL_LIST: | |||||
case TYPE_MODEL_LOAD: | case TYPE_MODEL_LOAD: | ||||
case TYPE_MODEL_ADD: | |||||
return new LCMsLoadHandler(); | |||||
return new LCMsLoadHandler<DefaultEntity>(); | |||||
case TYPE_MODEL_SAVE: | case TYPE_MODEL_SAVE: | ||||
return new LCMsSaveHandler(); | |||||
return new LCMsSaveHandler<DefaultEntity>(); | |||||
case TYPE_MODEL_DEL: | case TYPE_MODEL_DEL: | ||||
return new LCMsDelHandler(); | return new LCMsDelHandler(); | ||||
case TYPE_MODEL_SUB_LIST: | |||||
return new ModelListHandler(LCMsConfig.dsSList); | |||||
case TYPE_MODEL_SUB_LOAD: | |||||
return new ModelLoadHandler<DefaultEntity>(LCMsConfig.dsSCard); | |||||
case TYPE_MODEL_SUB_SAVE: | |||||
return new ModelSaveHandler<DefaultEntity>(LCMsConfig.dsSCard); | |||||
case TYPE_MODEL_SUB_DEL: | |||||
return new ModelDelHandler(LCMsConfig.dsSCard); | |||||
} | } | ||||
return super.createHandler(type); | 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()); | |||||
} | } | ||||
} | } |
@@ -1,7 +1,7 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.normal; | package cc.smtweb.system.bpm.web.engine.model.listcard.normal; | ||||
import cc.smtweb.framework.core.annotation.SwService; | 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 | * @Author:lip | ||||
@@ -1,7 +1,7 @@ | |||||
package cc.smtweb.system.bpm.web.engine.model.listcard.single; | package cc.smtweb.system.bpm.web.engine.model.listcard.single; | ||||
import cc.smtweb.framework.core.annotation.SwService; | 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 | * Created by Akmm at 2022-08-12 15:37 | ||||
@@ -1,7 +1,7 @@ | |||||
package cc.smtweb.system.bpm.web.sys.base.billType; | package cc.smtweb.system.bpm.web.sys.base.billType; | ||||
import cc.smtweb.framework.core.exception.BizException; | 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; | import org.apache.commons.lang3.StringUtils; | ||||
/** | /** | ||||
@@ -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.annotation.SwService; | ||||
import cc.smtweb.framework.core.mvc.service.AbstractHandler; | import cc.smtweb.framework.core.mvc.service.AbstractHandler; | ||||
import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; | 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; | 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 { | public class BillTypeService extends LCSingleService { | ||||
@Override | @Override | ||||
protected AbstractHandler createHandler(String type) { | protected AbstractHandler createHandler(String type) { | ||||
if (TYPE_COMBO.equals(type)) return new DefaultComboHandler<BillType>(BillType.ENTITY_NAME); | |||||
return super.createHandler(type); | |||||
} | |||||
switch (type) { | |||||
case TYPE_COMBO: | |||||
return new DefaultComboHandler<BillType>(BillType.ENTITY_NAME); | |||||
case TYPE_MODEL_SAVE: | |||||
return new BillTypeSaveHandler(); | |||||
@Override | |||||
protected ModelSaveHandler<BillType> getSaveHandler() { | |||||
return new BillTypeSaveHandler(); | |||||
} | |||||
return super.createHandler(type); | |||||
} | } | ||||
} | } |