diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index 2d79335..459fe24 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -678,12 +678,29 @@ public class UserService { } } - // 3. 查找或创建用户(使用unionId作为唯一标识) + // 3. 查找或创建用户 + // 🔥 优先通过ding_user_id查找(处理旧用户数据),其次通过unionId生成的email查找 String email = "dingtalk_" + unionId + "@dingtalk.local"; - User user = userMapper.selectOne( - new LambdaQueryWrapper() - .eq(User::getEmail, email) - ); + User user = null; + + // 优先通过钉钉用户ID查找 + if (dingtalkUserId != null) { + user = userMapper.selectOne( + new LambdaQueryWrapper() + .eq(User::getDingUserId, dingtalkUserId) + ); + if (user != null) { + log.info("通过ding_user_id找到已有用户(免登): userId={}, realName={}", user.getId(), user.getRealName()); + } + } + + // 如果通过ding_user_id找不到,再通过email查找 + if (user == null) { + user = userMapper.selectOne( + new LambdaQueryWrapper() + .eq(User::getEmail, email) + ); + } if (user == null) { // 首次登录:创建用户 @@ -809,12 +826,28 @@ public class UserService { } // 4. 查找或创建用户 - // 使用unionId作为唯一标识 + // 优先通过ding_user_id查找(更可靠),其次通过unionId生成的email查找 String email = "dingtalk_" + unionId + "@dingtalk.local"; - User user = userMapper.selectOne( - new LambdaQueryWrapper() - .eq(User::getEmail, email) - ); + User user = null; + + // 🔥 优先通过钉钉用户ID查找(处理旧用户数据) + if (dingtalkUserId != null) { + user = userMapper.selectOne( + new LambdaQueryWrapper() + .eq(User::getDingUserId, dingtalkUserId) + ); + if (user != null) { + log.info("通过ding_user_id找到已有用户: userId={}, realName={}", user.getId(), user.getRealName()); + } + } + + // 如果通过ding_user_id找不到,再通过email查找 + if (user == null) { + user = userMapper.selectOne( + new LambdaQueryWrapper() + .eq(User::getEmail, email) + ); + } if (user == null) { // 首次登录:创建用户但不分配部门