feat(feishu): 新增飞书认证及飞书客户端服务实现
- 新增 FeishuAuthServiceImpl,实现飞书OAuth授权流程和用户登录 - 实现应用访问令牌获取、用户访问令牌获取和用户信息查询功能 - 新增基于手机号的用户获取或创建逻辑及默认角色分配 - 新增 FeishuClientServiceImpl,封装飞书员工查询相关API调用 - 实现分页查询所有在职员工及按部门查询员工功能 - 使用 Hutool HTTP 调用飞书开放API,避免反射模块化问题 - 添加异常处理及日志记录,确保服务稳定运行
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user