diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/UserServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/UserServiceApi.java index ebb6d908b..df69fe2ae 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/UserServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/UserServiceApi.java @@ -25,6 +25,7 @@ package cn.stylefeng.roses.kernel.system.api; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; +import cn.stylefeng.roses.kernel.system.api.pojo.user.OAuth2AuthUserDTO; import cn.stylefeng.roses.kernel.system.api.pojo.user.OnlineUserDTO; import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; import cn.stylefeng.roses.kernel.system.api.pojo.user.UserLoginInfoDTO; @@ -159,4 +160,12 @@ public interface UserServiceApi { */ String getUserAvatarUrlByUserId(Long userId); + /** + * 创建并保存OAuth2用户信息 + * + * @author fengshuonan + * @date 2022/7/1 19:03 + */ + void createAndSaveOAuth2User(OAuth2AuthUserDTO oAuth2AuthUserDTO); + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java index 5597d11d6..7b783901e 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java @@ -77,4 +77,14 @@ public interface SystemConstants { */ String THEME_GUNS_PLATFORM = "GUNS_PLATFORM"; + /** + * 默认OAuth2用户组织机构id + */ + Long OAUTH2_USER_ORG_ID = 1339554696976781407L; + + /** + * 默认OAuth2用户角色id + */ + Long OAUTH2_USER_ROLE_ID = 1339550467939639305L; + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/OAuth2AuthUserDTO.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/OAuth2AuthUserDTO.java new file mode 100644 index 000000000..18baa39ca --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/OAuth2AuthUserDTO.java @@ -0,0 +1,62 @@ +package cn.stylefeng.roses.kernel.system.api.pojo.user; + +import cn.stylefeng.roses.kernel.rule.enums.SexEnum; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +import java.io.Serializable; + +/** + * 第三方OAuth2用户信息 + * + * @author fengshuonan + * @date 2022/7/1 18:05 + */ +@Data +public class OAuth2AuthUserDTO implements Serializable { + /** + * 用户第三方系统的唯一id。在调用方集成该组件时,可以用uuid + source唯一确定一个用户 + */ + private String uuid; + + /** + * 用户名 + */ + private String username; + + /** + * 用户昵称 + */ + private String nickname; + + /** + * 用户头像 + */ + private String avatar; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 用户备注(各平台中的用户个人介绍) + */ + private String remark; + + /** + * 性别 + */ + private SexEnum sexEnum; + + /** + * 用户来源 + */ + private String source; + + /** + * 第三方平台返回的原始用户信息 + */ + private JSONObject rawUserInfo; + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/SysUserCreateFactory.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/SysUserCreateFactory.java index 2fb7f834a..63fb3f1cd 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/SysUserCreateFactory.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/SysUserCreateFactory.java @@ -26,14 +26,16 @@ package cn.stylefeng.roses.kernel.system.modular.user.factory; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.extra.spring.SpringUtil; import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; import cn.stylefeng.roses.kernel.rule.enums.SexEnum; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.system.api.enums.UserStatusEnum; import cn.stylefeng.roses.kernel.system.api.expander.SystemConfigExpander; -import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUser; +import cn.stylefeng.roses.kernel.system.api.pojo.user.OAuth2AuthUserDTO; import cn.stylefeng.roses.kernel.system.api.pojo.user.request.SysUserRequest; +import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUser; /** * 用户信息填充,用于创建和修改用户时,添加一些基础信息 @@ -118,4 +120,35 @@ public class SysUserCreateFactory { sysUser.setPhone(sysUserRequest.getPhone()); } + /** + * 创建第三方应用在本应用的用户 + * + * @author fengshuonan + * @Date 2019/6/9 19:11 + */ + public static SysUser createOAuth2User(OAuth2AuthUserDTO oAuth2AuthUserDTO) { + + SysUser systemUser = new SysUser(); + + // 设置名字 + systemUser.setRealName(oAuth2AuthUserDTO.getNickname()); + systemUser.setNickName(oAuth2AuthUserDTO.getNickname()); + + // 设置账号 + systemUser.setAccount("OAUTH2_" + oAuth2AuthUserDTO.getSource() + "_" + oAuth2AuthUserDTO.getUsername()); + + // 设置密码 + PasswordStoredEncryptApi passwordStoredEncryptApi = SpringUtil.getBean(PasswordStoredEncryptApi.class); + systemUser.setPassword(passwordStoredEncryptApi.encrypt(RandomUtil.randomString(20))); + + // 设置性别 + systemUser.setSex(oAuth2AuthUserDTO.getSexEnum().getCode()); + + // 设置邮箱电话 + systemUser.setEmail(oAuth2AuthUserDTO.getEmail()); + systemUser.setPhone("未设置"); + + return systemUser; + } + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index 298234551..655fef7ab 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -68,6 +68,8 @@ import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; import cn.stylefeng.roses.kernel.system.api.pojo.user.*; import cn.stylefeng.roses.kernel.system.api.pojo.user.request.OnlineUserRequest; import cn.stylefeng.roses.kernel.system.api.pojo.user.request.SysUserRequest; +import cn.stylefeng.roses.kernel.system.api.pojo.user.request.UserOrgRequest; +import cn.stylefeng.roses.kernel.system.api.pojo.user.request.UserRoleRequest; import cn.stylefeng.roses.kernel.system.api.util.DataScopeUtil; import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUser; import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserDataScope; @@ -99,6 +101,9 @@ import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; +import static cn.stylefeng.roses.kernel.system.api.constants.SystemConstants.OAUTH2_USER_ORG_ID; +import static cn.stylefeng.roses.kernel.system.api.constants.SystemConstants.OAUTH2_USER_ROLE_ID; + /** * 用户服务实现类 * @@ -942,6 +947,32 @@ public class SysUserServiceImpl extends ServiceImpl impl return this.getUserAvatarUrl(sysUser.getAvatar()); } + @Override + public void createAndSaveOAuth2User(OAuth2AuthUserDTO oAuth2AuthUserDTO) { + + // 请求bean转为实体,填充一些基本属性 + SysUser oAuth2User = SysUserCreateFactory.createOAuth2User(oAuth2AuthUserDTO); + SysUserCreateFactory.fillAddSysUser(oAuth2User); + + // 设置用户默认头像 + oAuth2User.setAvatar(FileConstants.DEFAULT_AVATAR_FILE_ID); + + // 保存用户 + this.save(oAuth2User); + + // 设置OAuth2用户默认绑定的角色,默认绑定的公司信息 + UserRoleRequest userRoleRequest = new UserRoleRequest(); + userRoleRequest.setUserId(oAuth2User.getUserId()); + userRoleRequest.setRoleId(OAUTH2_USER_ROLE_ID); + this.sysUserRoleService.add(userRoleRequest); + + // 保存默认公司信息 + UserOrgRequest userOrgRequest = new UserOrgRequest(); + userOrgRequest.setUserId(oAuth2User.getUserId()); + userOrgRequest.setOrgId(OAUTH2_USER_ORG_ID); + this.sysUserOrgService.add(userOrgRequest); + } + /** * 获取系统用户 *