From 599f9ef4a8fb1a50ae6debb74bcde6ad041d05d6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 11:05:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B7=B2=E6=9C=89=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E7=9A=84=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=87=AA=E5=8A=A8=E8=A6=86=E7=9B=96=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/designhub/service/UserService.java | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) 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()); } } }