diff --git a/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java b/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java index f18fa94..9e5c568 100644 --- a/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java +++ b/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java @@ -10,5 +10,6 @@ public interface SwConsts { String KEY_PARENT_ID = "pr"; //级次码、字符串连接符 String SPLIT_CHAR = "-"; - + //默认根节点 + String DEF_ROOT_ID = "-1"; } diff --git a/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/TreeHelper.java b/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/TreeHelper.java index 63a1b21..f67ea17 100644 --- a/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/TreeHelper.java +++ b/smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/TreeHelper.java @@ -12,31 +12,46 @@ import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.db.vo.ModelField; import cc.smtweb.framework.core.db.vo.ModelTable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; /** * Created by Akmm at 2022/3/17 19:56 */ public class TreeHelper { + private static Map mapInstance; + static { + mapInstance = new ConcurrentHashMap<>(); + } private String tableName; private ModelTable table; - private AbstractCache cache; + protected AbstractCache cache; private EntityDao dao; private String fieldParent; private String fieldLevelCode; - //todo 待扩展,进缓存 + public static TreeHelper getTreeHelper(String tableName) { - return new TreeHelper(tableName); + return mapInstance.computeIfAbsent(tableName, k-> new TreeHelper(tableName)); + } + + public static TreeHelper getTreeHelper(String tableName, Class clazz) { + TreeHelper helper = mapInstance.get(tableName); + if (helper == null) { + try { + helper = clazz.newInstance(); + mapInstance.put(tableName, helper); + } catch (Exception e) { + throw new SwException(e); + } + } + return helper; } //先禁止外部创建 - private TreeHelper(String tableName) { + protected TreeHelper(String tableName) { this.tableName = tableName; table = ModelTableCache.getInstance().getByName(tableName); cache = CacheManager.getIntance().getCache(tableName); diff --git a/smtweb-framework/sw-framework-core/src/main/resources/config/demo.json b/smtweb-framework/sw-framework-core/src/main/resources/config/demo.json index 0631cf2..a03de12 100644 --- a/smtweb-framework/sw-framework-core/src/main/resources/config/demo.json +++ b/smtweb-framework/sw-framework-core/src/main/resources/config/demo.json @@ -103,8 +103,8 @@ }, { "name": "prj", - "title": "按目录", - "fields": "mc_prj_id", + "title": "按项目", + "fields": "mc_prj_id,mc_parent_id", "type": "L" } ] diff --git a/smtweb-framework/sw-framework-core/target/classes/config/demo.json b/smtweb-framework/sw-framework-core/target/classes/config/demo.json index 0631cf2..a03de12 100644 --- a/smtweb-framework/sw-framework-core/target/classes/config/demo.json +++ b/smtweb-framework/sw-framework-core/target/classes/config/demo.json @@ -103,8 +103,8 @@ }, { "name": "prj", - "title": "按目录", - "fields": "mc_prj_id", + "title": "按项目", + "fields": "mc_prj_id,mc_parent_id", "type": "L" } ] diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java index ba6680f..372ec38 100644 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHandler.java @@ -26,14 +26,14 @@ public class ModelCatalogTreeHandler extends AbstractTreeHandler { private long prj_id;//所属项目 private int type;//查询类型:0-目录;1-表定义;2-页面定义 - private TreeHelper mcTreeHelper = null; + private ModelCatalogTreeHelper mcTreeHelper = null; @Override public void init(SwMap params, UserSession us) { super.init(params, us); type = params.readInt("type"); prj_id = params.readLong("prj_id"); - mcTreeHelper = (TreeHelper) TreeHelper.getTreeHelper(ModelCatalog.ENTITY_NAME); + mcTreeHelper = (ModelCatalogTreeHelper) TreeHelper.getTreeHelper(ModelCatalog.ENTITY_NAME, ModelCatalogTreeHelper.class); } @Override @@ -69,11 +69,7 @@ public class ModelCatalogTreeHandler extends AbstractTreeHandler { protected List getChildren(long id) { List listRet = new ArrayList<>(); List list; - if (id > 0) { - list = mcTreeHelper.getChildren(id, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); - } else { - list = mcTreeHelper.getChildren(-1, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); - } + list = mcTreeHelper.getChildren(id, prj_id, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); listRet.addAll(list); diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHelper.java new file mode 100644 index 0000000..8cc0b32 --- /dev/null +++ b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/table/ModelCatalogTreeHelper.java @@ -0,0 +1,34 @@ +package cc.smtweb.system.bpm.web.design.table; + +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.mvc.service.TreeHelper; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; + +/** + * Created by Akmm at 2022/3/25 10:47 + */ +public class ModelCatalogTreeHelper extends TreeHelper { + //按项目的缓存key,确保此表缓存配置:prj:prjid_parentid + private final static String CACHE_KEY = "prj"; + + public ModelCatalogTreeHelper() { + super(ModelCatalog.ENTITY_NAME); + } + + public List getChildren(long id, long prj_id, Comparator comparator) { + if (id > 0) { + return getChildren(id, comparator); + } + Collection set = cache.getListByKey(CACHE_KEY, prj_id + SwConsts.SPLIT_CHAR + SwConsts.DEF_ROOT_ID); + + List list = set == null ? new ArrayList<>() : new ArrayList<>(set); + if (comparator != null) + list.sort(comparator); + return list; + } +}