更新子账号也更新工作流的部门和人员的缓存

This commit is contained in:
guoshengxiong 2025-05-24 17:37:52 +08:00
parent 281996db12
commit d01f5cd1ec

View File

@ -28,10 +28,10 @@ import java.util.stream.Collectors;
public class MemoryOrgOwnershipServiceImpl implements OrgOwnershipService { public class MemoryOrgOwnershipServiceImpl implements OrgOwnershipService {
//用户ID与其所有层级所属部门ID级联映射 //用户ID与其所有层级所属部门ID级联映射
private static final Map<String, Set<String>> userDeptMap = new ConcurrentHashMap<>(); private static Map<String, Set<String>> userDeptMap = new ConcurrentHashMap<>();
//部门ID与其所有父级部门ID级联关系映射 //部门ID与其所有父级部门ID级联关系映射
private static final Map<String, Set<String>> deptAndDeptMap = new ConcurrentHashMap<>(); private static Map<String, Set<String>> deptAndDeptMap = new ConcurrentHashMap<>();
@Autowired @Autowired
private OrgRepositoryService orgRepositoryService; private OrgRepositoryService orgRepositoryService;
@ -96,32 +96,34 @@ public class MemoryOrgOwnershipServiceImpl implements OrgOwnershipService {
* 实例化时从数据库加载组织架构关系 * 实例化时从数据库加载组织架构关系
*/ */
@PostConstruct @PostConstruct
public void loadByDbToCatch(){ public void loadByDbToCatch() {
//查询全量数据 //查询全量数据
log.info("开始加载全量组织架构关系数据"); log.info("开始加载全量组织架构关系数据");
List<UserDeptDo> userDepartments = orgRepositoryService.getSysAllUserDepts(); List<UserDeptDo> userDepartments = orgRepositoryService.getSysAllUserDepts();
List<DeptDo> departments = orgRepositoryService.getSysAllDepts(); List<DeptDo> departments = orgRepositoryService.getSysAllDepts();
userDeptMap.clear();
deptAndDeptMap.clear();
//先加载部门级联关系部门map化 //先加载部门级联关系部门map化
// 构建新的临时 Map
Map<String, Set<String>> newDeptAndDeptMap = new ConcurrentHashMap<>();
Map<String, DeptDo> deptMap = departments.stream().collect(Collectors.toMap(DeptDo::getId, v -> v)); Map<String, DeptDo> deptMap = departments.stream().collect(Collectors.toMap(DeptDo::getId, v -> v));
deptMap.forEach((k, v) -> { deptMap.forEach((k, v) -> {
Set<String> set = new LinkedHashSet<>(); Set<String> set = new LinkedHashSet<>();
loadCascade(set, deptMap, v); loadCascade(set, deptMap, v);
deptAndDeptMap.put(k, set); newDeptAndDeptMap.put(k, set);
}); });
//再加载用户与所属部门的级联关系 //再加载用户与所属部门的级联关系
Map<String, Set<String>> newUserDeptMap = new ConcurrentHashMap<>();
userDepartments.forEach(ud -> { userDepartments.forEach(ud -> {
if (ud.getDeptId() != null) { if (ud.getDeptId() != null) {
Set<String> userDeptSet = userDeptMap.get(ud.getUserId()); Set<String> userDeptSet = newUserDeptMap.computeIfAbsent(ud.getUserId(), k -> new LinkedHashSet<>());
if (CollectionUtil.isEmpty(userDeptSet)){
userDeptSet = new LinkedHashSet<>();
userDeptMap.put(ud.getUserId(), userDeptSet);
}
userDeptSet.add(ud.getDeptId()); userDeptSet.add(ud.getDeptId());
userDeptSet.addAll(deptAndDeptMap.getOrDefault(ud.getDeptId(), new HashSet<>())); userDeptSet.addAll(newDeptAndDeptMap.getOrDefault(ud.getDeptId(), new HashSet<>()));
} }
}); });
// 原子替换引用
deptAndDeptMap = newDeptAndDeptMap;
userDeptMap = newUserDeptMap;
} }
/** /**