From 135e723c64aeaa0ce6f47007dda5d9b00832e991 Mon Sep 17 00:00:00 2001 From: JiaoTianBo Date: Tue, 31 Mar 2026 15:18:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(feishu):=20=E6=96=B0=E5=A2=9E=E9=A3=9E?= =?UTF-8?q?=E4=B9=A6=E8=AE=A4=E8=AF=81=E5=8F=8A=E9=A3=9E=E4=B9=A6=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E6=9C=8D=E5=8A=A1=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 FeishuAuthServiceImpl,实现飞书OAuth授权流程和用户登录 - 实现应用访问令牌获取、用户访问令牌获取和用户信息查询功能 - 新增基于手机号的用户获取或创建逻辑及默认角色分配 - 新增 FeishuClientServiceImpl,封装飞书员工查询相关API调用 - 实现分页查询所有在职员工及按部门查询员工功能 - 使用 Hutool HTTP 调用飞书开放API,避免反射模块化问题 - 添加异常处理及日志记录,确保服务稳定运行 --- .../service/system/impl/FeishuAuthServiceImpl.java | 11 ++++++----- .../service/system/impl/FeishuClientServiceImpl.java | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/cn/yinlihupo/service/system/impl/FeishuAuthServiceImpl.java b/src/main/java/cn/yinlihupo/service/system/impl/FeishuAuthServiceImpl.java index e93a0fd..fd36451 100644 --- a/src/main/java/cn/yinlihupo/service/system/impl/FeishuAuthServiceImpl.java +++ b/src/main/java/cn/yinlihupo/service/system/impl/FeishuAuthServiceImpl.java @@ -91,14 +91,15 @@ public class FeishuAuthServiceImpl implements FeishuAuthService { String avatar = userInfo.getStr("avatar_url"); String email = userInfo.getStr("email"); String openId = userInfo.getStr("open_id"); + String userId = userInfo.getStr("user_id"); // 去除手机号前缀 +86 phone = PhoneUtils.normalizePhone(phone); - log.info("飞书用户信息: phone={}, name={}, openId={}", phone, realName, openId); + log.info("飞书用户信息: phone={}, name={}, openId={}, userId={}", phone, realName, openId, userId); // 5. 根据手机号获取或创建用户 - return getOrCreateUserByPhone(phone, realName, avatar, email, openId); + return getOrCreateUserByPhone(phone, realName, avatar, email, userId); } /** @@ -174,7 +175,7 @@ public class FeishuAuthServiceImpl implements FeishuAuthService { @Override @Transactional(rollbackFor = Exception.class) - public SysUser getOrCreateUserByPhone(String phone, String realName, String avatar, String email, String openId) { + public SysUser getOrCreateUserByPhone(String phone, String realName, String avatar, String email, String userId) { // 根据手机号查询用户 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getPhone, phone); @@ -193,14 +194,14 @@ public class FeishuAuthServiceImpl implements FeishuAuthService { user.setUpdateTime(now); // 使用openId作为用户名(如果没有设置过) if (user.getUsername() == null || user.getUsername().isEmpty()) { - user.setUsername(openId); + user.setUsername(userId); } sysUserMapper.updateById(user); } else { // 用户不存在,创建新用户 log.info("用户不存在,创建新用户, phone: {}", phone); user = new SysUser(); - user.setUsername(openId); + user.setUsername(userId); user.setRealName(realName); user.setNickname(realName); user.setAvatar(avatar); diff --git a/src/main/java/cn/yinlihupo/service/system/impl/FeishuClientServiceImpl.java b/src/main/java/cn/yinlihupo/service/system/impl/FeishuClientServiceImpl.java index 08ef95e..838ad2d 100644 --- a/src/main/java/cn/yinlihupo/service/system/impl/FeishuClientServiceImpl.java +++ b/src/main/java/cn/yinlihupo/service/system/impl/FeishuClientServiceImpl.java @@ -81,7 +81,7 @@ public class FeishuClientServiceImpl implements FeishuClientService { Map body = convertRequestToMap(request); // 3. 构建查询参数 - String url = EMPLOYEES_FILTER_API + "?department_id_type=open_department_id&employee_id_type=open_id"; + String url = EMPLOYEES_FILTER_API + "?department_id_type=open_department_id&employee_id_type=user_id"; // 4. 发起请求 try (HttpResponse response = HttpRequest.post(url)