feat(feishu): 新增飞书认证及飞书客户端服务实现

- 新增 FeishuAuthServiceImpl,实现飞书OAuth授权流程和用户登录
- 实现应用访问令牌获取、用户访问令牌获取和用户信息查询功能
- 新增基于手机号的用户获取或创建逻辑及默认角色分配
- 新增 FeishuClientServiceImpl,封装飞书员工查询相关API调用
- 实现分页查询所有在职员工及按部门查询员工功能
- 使用 Hutool HTTP 调用飞书开放API,避免反射模块化问题
- 添加异常处理及日志记录,确保服务稳定运行
This commit is contained in:
2026-03-31 15:18:04 +08:00
parent 8008d367e8
commit 135e723c64
2 changed files with 7 additions and 6 deletions

View File

@@ -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<SysUser> 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);

View File

@@ -81,7 +81,7 @@ public class FeishuClientServiceImpl implements FeishuClientService {
Map<String, Object> 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)