diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java index 100114a..4d4e880 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java @@ -8,6 +8,7 @@ import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.EntityDao; import cc.smtweb.framework.core.db.vo.ModelCatalog; +import java.util.ArrayList; import java.util.List; /** @@ -22,8 +23,8 @@ public class ModelCatalogCache extends AbstractCache { } public ModelCatalogCache() { - regList(SwConsts.KEY_PARENT_ID, k-> String.valueOf(k.getParentId())); - regList(CACHE_KEY, k-> k.getPrjId() + SwConsts.SPLIT_CHAR + k.getParentId()); + regList(SwConsts.KEY_PARENT_ID, k -> String.valueOf(k.getParentId())); + regList(CACHE_KEY, k -> k.getPrjId() + SwConsts.SPLIT_CHAR + k.getParentId()); } @Override @@ -52,4 +53,24 @@ public class ModelCatalogCache extends AbstractCache { } return sret.substring(1); } + + public List getAllParent(long value) { + List list = new ArrayList<>(); + list.add(value); + getAllParent(value, list); + return list; + } + + private void getAllParent(long value, List ids) { + Long parent_id = getParentId(value); + if (parent_id == null) return; + ids.add(parent_id); + getAllParent(parent_id, ids); + } + + public Long getParentId(long id) { + ModelCatalog bean = get(id); + if (bean == null || bean.isEmpty()) return null; + return bean.getParentId(); + } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java index e1a308d..0b6c366 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java @@ -3,51 +3,100 @@ package cc.smtweb.system.bpm.web.design.preview; import cc.smtweb.framework.core.annotation.SwParam; import cc.smtweb.framework.core.annotation.SwService; import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwEnum; import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.framework.core.session.UserSession; import cc.smtweb.framework.core.util.CommUtil; import cc.smtweb.system.bpm.util.TreeDataUtil; +import cc.smtweb.system.bpm.web.design.db.ModelCatalogCache; import cc.smtweb.system.bpm.web.design.db.ModelProjectCache; import cc.smtweb.system.bpm.web.design.form.ModelForm; import cc.smtweb.system.bpm.web.design.form.ModelFormCache; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @SwService public class PreviewMenuTreeService { - @SwParam - private DbEngine dbEngine; - - public R treeAll(@SwParam("module") String module, UserSession us) { - String prj_id = ModelProjectCache.getInstance().getIdByModule(module); - List listForm; - if (StringUtils.isNotEmpty(prj_id)) { - listForm = new ArrayList<>(ModelFormCache.getInstance().getFormsByPrj(Long.parseLong(prj_id))); - } else { - listForm = new ArrayList<>(ModelFormCache.getInstance().getAll()); - } - listForm.sort((o1, o2) -> CommUtil.chineseCompare(o1.getTitle(), o2.getTitle())); - if (listForm.isEmpty()) throw new BizException("此项目无页面设计!"); - - List list = new ArrayList<>(listForm.size()); - for (ModelForm form: listForm) { - MenuVO menu = new MenuVO(); - menu.setId(form.getId()); - menu.setName(form.getTitle()); - menu.setPath("/bpm/" + form.getId()); -// menu.setParentId(-1L); - list.add(menu); + @SwParam + private DbEngine dbEngine; + + public R treeAll(@SwParam("module") String module, UserSession us) { + String prj_id = ModelProjectCache.getInstance().getIdByModule(module); + + List listForm; + if (StringUtils.isNotEmpty(prj_id)) { + listForm = new ArrayList<>(ModelFormCache.getInstance().getFormsByPrj(Long.parseLong(prj_id))); + } else { + listForm = new ArrayList<>(ModelFormCache.getInstance().getAll()); + } + listForm.sort((o1, o2) -> CommUtil.chineseCompare(o1.getTitle(), o2.getTitle())); + if (listForm.isEmpty()) throw new BizException("此项目无页面设计!"); + + List list = new ArrayList<>(); + Map map = new HashMap<>(); + for (ModelForm form : listForm) { + if (SwEnum.FormType.PAGE.value != form.getType()) continue; + List parentLog = ModelCatalogCache.getInstance().getAllParent(form.getMcId()); + for (Long parent_id : parentLog) { + if (map.containsKey(parent_id)) continue; + ModelCatalog catalog = ModelCatalogCache.getInstance().get(parent_id); + if (catalog == null || catalog.isEmpty()) continue; + MenuVO menu = setMenuParent(parent_id, map, list); + if (menu == null) continue; + setMenuChildren(map.get(menu.getParentId()), menu); + } + MenuVO menu = new MenuVO(); + menu.setId(form.getId()); + menu.setName(form.getTitle()); + menu.setPath("/bpm/" + form.getId()); + menu.setParentId(form.getMcId()); + + setMenuChildren(map.get(form.getMcId()), menu); + } + + MenuVO root = new MenuVO(); + root.setName("项目"); + root.setPath(module); + root.setId(-1L); + List data = TreeDataUtil.buildTree(root, list, MenuVO.createTreeHandler()); + + return R.success(data); } - MenuVO root = new MenuVO(); - root.setName("项目"); - root.setPath(module); - List data = TreeDataUtil.buildTree(root, list, MenuVO.createTreeHandler()); + private MenuVO setMenuParent(Long parent_id, Map map, List list) { + MenuVO parent = map.get(parent_id); + if (parent != null) return parent; - return R.success(data); - } + ModelCatalog parentBean = ModelCatalogCache.getInstance().get(parent_id); + if (parentBean == null) return null; + parent = map.get(parentBean.getId()); + if (parent != null) return parent; + parent = new MenuVO(); + parent.setId(parentBean.getId()); + parent.setName(parentBean.getName()); + parent.setPath(""); + parent.setParentId(parentBean.getParentId()); + if (parentBean.getParentId() == -1) { + list.add(parent); + } + map.put(parentBean.getId(), parent); + setMenuParent(parentBean.getParentId(), map, list); + return parent; + } + + private void setMenuChildren(MenuVO parent, MenuVO child) { + if (parent == null) return; + List childs = parent.getChildren(); + if (childs == null) { + childs = new ArrayList<>(); + parent.setChildren(childs); + } + childs.add(child); + } } diff --git a/smtweb-framework/bpm/src/main/resources/codegen/ts/formatter.ts b/smtweb-framework/bpm/src/main/resources/codegen/ts/formatter.ts index f292db8..8f159b5 100644 --- a/smtweb-framework/bpm/src/main/resources/codegen/ts/formatter.ts +++ b/smtweb-framework/bpm/src/main/resources/codegen/ts/formatter.ts @@ -5,7 +5,7 @@ export default { methods: { timeFormatter(row: string, column: any, cellValue: string) { // 日期时间 - // temp 20210226113627 -> 2021-02-26 11:36:27 + // temp.json 20210226113627 -> 2021-02-26 11:36:27 if (cellValue && cellValue.length >= 14) { const pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/; return cellValue.replace(pattern, '$1-$2-$3 $4:$5:$6');