fix: 已有部门的用户登录时不再自动覆盖部门设置
This commit is contained in:
parent
a6997c55f4
commit
599f9ef4a8
@ -498,7 +498,17 @@ public class UserService {
|
||||
}
|
||||
|
||||
// 3. 同步部门(支持多部门)
|
||||
if (dingDepartments != null && !dingDepartments.isEmpty()) {
|
||||
// 🔥 重要:如果用户已有部门设置,则不再自动覆盖(保留手动调整的部门)
|
||||
boolean userHasDepartment = user.getDeptId() != null && user.getDeptId() > 0;
|
||||
|
||||
if (userHasDepartment) {
|
||||
// 用户已有部门,只记录日志,不覆盖
|
||||
log.info("用户已有部门设置,跳过部门同步: userId={}, deptId={}, deptName={}",
|
||||
user.getId(), user.getDeptId(), user.getDeptName());
|
||||
} else if (dingDepartments != null && !dingDepartments.isEmpty()) {
|
||||
// 用户没有部门,尝试从钉钉同步
|
||||
log.info("用户无部门设置,尝试从钉钉同步: userId={}", user.getId());
|
||||
|
||||
// 匹配多个部门
|
||||
List<Long> matchedDeptIds = matchSystemDepartments(dingDepartments);
|
||||
|
||||
@ -519,22 +529,14 @@ public class UserService {
|
||||
user.getId(), currentRoleIds);
|
||||
boolean isAdmin = currentRoleIds != null &&
|
||||
(currentRoleIds.contains("1") || currentRoleIds.contains("2"));
|
||||
log.info("syncUserFromDingTalk - isAdmin={}, currentRoleIds.contains('1')={}, currentRoleIds.contains('2')={}",
|
||||
isAdmin, currentRoleIds != null && currentRoleIds.contains("1"),
|
||||
currentRoleIds != null && currentRoleIds.contains("2"));
|
||||
if (!isAdmin) {
|
||||
// 只有非管理员用户才根据部门类型设置角色
|
||||
String newRoleIds = "receiving".equals(primaryDept.getDeptType()) ? "5" : "6";
|
||||
log.info("syncUserFromDingTalk - 非管理员用户,设置角色: userId={}, newRoleIds={}",
|
||||
user.getId(), newRoleIds);
|
||||
user.setRoleIds(newRoleIds);
|
||||
} else {
|
||||
log.info("用户已是管理员,保留管理员角色: userId={}, roleIds={}",
|
||||
user.getId(), currentRoleIds);
|
||||
}
|
||||
user.setStatus(1); // 启用用户
|
||||
needUpdate = true;
|
||||
log.info("同步用户多个部门: userId={}, 部门数量={}, 主部门={}",
|
||||
log.info("首次同步用户部门: userId={}, 部门数量={}, 主部门={}",
|
||||
user.getId(), matchedDeptIds.size(), primaryDept.getDeptName());
|
||||
}
|
||||
} else {
|
||||
@ -554,28 +556,16 @@ public class UserService {
|
||||
user.setDeptName(defaultDept.getDeptName());
|
||||
// 根据部门类型设置角色(但如果用户已经是管理员,保留管理员角色)
|
||||
String currentRoleIds = user.getRoleIds();
|
||||
log.info("syncUserFromDingTalk - 检查管理员角色(默认部门): userId={}, currentRoleIds={}",
|
||||
user.getId(), currentRoleIds);
|
||||
boolean isAdmin = currentRoleIds != null &&
|
||||
(currentRoleIds.contains("1") || currentRoleIds.contains("2"));
|
||||
log.info("syncUserFromDingTalk - isAdmin={}", isAdmin);
|
||||
if (!isAdmin) {
|
||||
// 只有非管理员用户才根据部门类型设置角色
|
||||
String newRoleIds = "receiving".equals(defaultDept.getDeptType()) ? "5" : "6";
|
||||
log.info("syncUserFromDingTalk - 非管理员用户,设置角色: userId={}, newRoleIds={}",
|
||||
user.getId(), newRoleIds);
|
||||
user.setRoleIds(newRoleIds);
|
||||
} else {
|
||||
log.info("用户已是管理员,保留管理员角色: userId={}, roleIds={}",
|
||||
user.getId(), currentRoleIds);
|
||||
}
|
||||
user.setStatus(1); // 启用用户
|
||||
needUpdate = true;
|
||||
log.warn("已有用户无法匹配,使用默认部门: userId={}, deptId={}, deptName={}, 钉钉部门: {}",
|
||||
user.getId(), defaultDept.getId(), defaultDept.getDeptName(),
|
||||
dingDepartments.stream()
|
||||
.map(d -> String.valueOf(d.get("name")))
|
||||
.collect(Collectors.joining(", ")));
|
||||
log.warn("用户无法匹配钉钉部门,使用默认部门: userId={}, deptId={}, deptName={}",
|
||||
user.getId(), defaultDept.getId(), defaultDept.getDeptName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user