From 5cc62689f00aed14131a65031ca046b9e8d397e1 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sat, 24 May 2025 17:42:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AD=90=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E4=B9=9F=E6=9B=B4=E6=96=B0=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=92=8C=E4=BA=BA=E5=91=98=E7=9A=84=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/MemoryOrgOwnershipServiceImpl.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/wflow/workflow/service/impl/MemoryOrgOwnershipServiceImpl.java b/src/main/java/com/wflow/workflow/service/impl/MemoryOrgOwnershipServiceImpl.java index 50d83e4..f917d5e 100644 --- a/src/main/java/com/wflow/workflow/service/impl/MemoryOrgOwnershipServiceImpl.java +++ b/src/main/java/com/wflow/workflow/service/impl/MemoryOrgOwnershipServiceImpl.java @@ -28,10 +28,10 @@ import java.util.stream.Collectors; public class MemoryOrgOwnershipServiceImpl implements OrgOwnershipService { //用户ID与其所有层级所属部门ID级联映射 - private static final Map> userDeptMap = new ConcurrentHashMap<>(); + private static Map> userDeptMap = new ConcurrentHashMap<>(); //部门ID与其所有父级部门ID级联关系映射 - private static final Map> deptAndDeptMap = new ConcurrentHashMap<>(); + private static Map> deptAndDeptMap = new ConcurrentHashMap<>(); @Autowired private OrgRepositoryService orgRepositoryService; @@ -96,32 +96,34 @@ public class MemoryOrgOwnershipServiceImpl implements OrgOwnershipService { * 实例化时从数据库加载组织架构关系 */ @PostConstruct - public void loadByDbToCatch(){ + public void loadByDbToCatch() { //查询全量数据 log.info("开始加载全量组织架构关系数据"); List userDepartments = orgRepositoryService.getSysAllUserDepts(); List departments = orgRepositoryService.getSysAllDepts(); - userDeptMap.clear(); - deptAndDeptMap.clear(); + //先加载部门级联关系,部门map化 + // 构建新的临时 Map + Map> newDeptAndDeptMap = new ConcurrentHashMap<>(); Map deptMap = departments.stream().collect(Collectors.toMap(DeptDo::getId, v -> v)); deptMap.forEach((k, v) -> { Set set = new LinkedHashSet<>(); loadCascade(set, deptMap, v); - deptAndDeptMap.put(k, set); + newDeptAndDeptMap.put(k, set); }); //再加载用户与所属部门的级联关系 + Map> newUserDeptMap = new ConcurrentHashMap<>(); userDepartments.forEach(ud -> { if (ud.getDeptId() != null) { - Set userDeptSet = userDeptMap.get(ud.getUserId()); - if (CollectionUtil.isEmpty(userDeptSet)){ - userDeptSet = new LinkedHashSet<>(); - userDeptMap.put(ud.getUserId(), userDeptSet); - } + Set userDeptSet = newUserDeptMap.computeIfAbsent(ud.getUserId(), k -> new LinkedHashSet<>()); userDeptSet.add(ud.getDeptId()); - userDeptSet.addAll(deptAndDeptMap.getOrDefault(ud.getDeptId(), new HashSet<>())); + userDeptSet.addAll(newDeptAndDeptMap.getOrDefault(ud.getDeptId(), new HashSet<>())); } }); + + // 原子替换引用 + deptAndDeptMap = newDeptAndDeptMap; + userDeptMap = newUserDeptMap; } /**