diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index c7a728e..f5afdcb 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -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 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()); } } }