🐛 OA人员同步在部门匹配失败时仍清理历史脏部门关系
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+44
-28
@@ -793,12 +793,13 @@ public class OaUserListSyncHelper {
|
||||
.map(UserDept::getId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
Set<Long> reboundUserIds = userDeptList.stream()
|
||||
.map(UserDept::getUserId)
|
||||
// 本批已同步人员都要对齐部门:即使 findDept 失败没绑上新部门,也必须清掉历史脏关系,
|
||||
// 否则会继续挂在运输事业部「运营管理部」等旧部门下被列表查出来。
|
||||
Set<Long> syncedUserIds = userMap.values().stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
List<Long> staleUserDeptIds = existingUserDeptList.stream()
|
||||
.filter(userDept -> userDept.getId() != null && reboundUserIds.contains(userDept.getUserId()))
|
||||
.filter(userDept -> userDept.getId() != null && syncedUserIds.contains(userDept.getUserId()))
|
||||
.map(UserDept::getId)
|
||||
.filter(userDeptId -> !currentUserDeptIds.contains(userDeptId))
|
||||
.toList();
|
||||
@@ -825,6 +826,10 @@ public class OaUserListSyncHelper {
|
||||
}
|
||||
Collection<Long> userIds = userMap.values();
|
||||
List<UserDeptIdsVO> list = userDeptService.queryUserDeptIds(userIds);
|
||||
Set<Long> usersWithDept = list.stream()
|
||||
.map(UserDeptIdsVO::getUserId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
Set<Long> noRoleUserIds = userService.list(Wrappers.<User>lambdaQuery()
|
||||
.in(User::getId, userIds)
|
||||
.and(wrapper -> wrapper.isNull(User::getRoleId)
|
||||
@@ -834,31 +839,42 @@ public class OaUserListSyncHelper {
|
||||
.map(User::getId)
|
||||
.collect(Collectors.toSet());
|
||||
String defaultRoleId = getDefaultRoleId();
|
||||
List<User> updateUserParams = list.stream()
|
||||
.filter(userDeptIds -> {
|
||||
if (StringUtils.isBlank(userDeptIds.getDeptIds())) {
|
||||
return false;
|
||||
}
|
||||
int deptIdLength = userDeptIds.getDeptIds().length();
|
||||
int deptCodesLength = StringUtils.length(userDeptIds.getDeptCodes());
|
||||
if (deptIdLength > MAX_DEPT_ID_LENGTH || deptCodesLength > MAX_DEPT_ID_LENGTH) {
|
||||
ComposeLogUtil.getLastLog().warn(
|
||||
"用户部门字段超长已跳过回写 userId={} deptIdLen={} deptCodesLen={} max={}",
|
||||
userDeptIds.getUserId(), deptIdLength, deptCodesLength, MAX_DEPT_ID_LENGTH);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.map(userDeptIds -> {
|
||||
User user = new User();
|
||||
user.setId(userDeptIds.getUserId());
|
||||
user.setDeptId(userDeptIds.getDeptIds());
|
||||
user.setDeptCodes(userDeptIds.getDeptCodes());
|
||||
if (noRoleUserIds.contains(userDeptIds.getUserId())) {
|
||||
user.setRoleId(defaultRoleId);
|
||||
}
|
||||
return user;
|
||||
}).toList();
|
||||
List<User> updateUserParams = new ArrayList<>();
|
||||
for (UserDeptIdsVO userDeptIds : list) {
|
||||
if (userDeptIds.getUserId() == null || StringUtils.isBlank(userDeptIds.getDeptIds())) {
|
||||
continue;
|
||||
}
|
||||
int deptIdLength = userDeptIds.getDeptIds().length();
|
||||
int deptCodesLength = StringUtils.length(userDeptIds.getDeptCodes());
|
||||
if (deptIdLength > MAX_DEPT_ID_LENGTH || deptCodesLength > MAX_DEPT_ID_LENGTH) {
|
||||
ComposeLogUtil.getLastLog().warn(
|
||||
"用户部门字段超长已跳过回写 userId={} deptIdLen={} deptCodesLen={} max={}",
|
||||
userDeptIds.getUserId(), deptIdLength, deptCodesLength, MAX_DEPT_ID_LENGTH);
|
||||
continue;
|
||||
}
|
||||
User user = new User();
|
||||
user.setId(userDeptIds.getUserId());
|
||||
user.setDeptId(userDeptIds.getDeptIds());
|
||||
user.setDeptCodes(userDeptIds.getDeptCodes());
|
||||
if (noRoleUserIds.contains(userDeptIds.getUserId())) {
|
||||
user.setRoleId(defaultRoleId);
|
||||
}
|
||||
updateUserParams.add(user);
|
||||
}
|
||||
// 本批已同步但已无任何部门关系的人员,清空 blade_user 上残留的 dept_id/dept_codes
|
||||
for (Long userId : syncedUserIds) {
|
||||
if (usersWithDept.contains(userId)) {
|
||||
continue;
|
||||
}
|
||||
User user = new User();
|
||||
user.setId(userId);
|
||||
user.setDeptId("");
|
||||
user.setDeptCodes("");
|
||||
if (noRoleUserIds.contains(userId)) {
|
||||
user.setRoleId(defaultRoleId);
|
||||
}
|
||||
updateUserParams.add(user);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(updateUserParams)) {
|
||||
userService.updateBatchById(updateUserParams);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user