Commit add08b1ecd6e0e516318ff7265e3e6ab509e38fd

Authored by YunaiV
1 parent ab6ec2f0

多模块重构 4:system 模块的调整,实现 social API~~

Showing 127 changed files with 1490 additions and 1428 deletions

Too many changes.

To preserve performance only 100 of 127 files are displayed.

yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java
1 1 package cn.iocoder.yudao.framework.common.enums;
2 2  
3   -import cn.hutool.core.lang.Matcher;
4 3 import cn.hutool.core.util.ArrayUtil;
  4 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
5 5 import lombok.AllArgsConstructor;
6 6 import lombok.Getter;
7 7  
  8 +import java.util.Arrays;
  9 +
8 10 /**
9 11 * 全局用户类型枚举
10 12 */
11 13 @AllArgsConstructor
12 14 @Getter
13   -public enum UserTypeEnum {
  15 +public enum UserTypeEnum implements IntArrayValuable {
14 16  
15 17 MEMBER(1, "会员"), // 面向 c 端,普通用户
16 18 ADMIN(2, "管理员"); // 面向 b 端,管理后台
17 19  
  20 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray();
  21 +
18 22 /**
19 23 * 类型
20 24 */
... ... @@ -28,4 +32,8 @@ public enum UserTypeEnum {
28 32 return ArrayUtil.firstMatch(userType -> userType.getValue().equals(value), UserTypeEnum.values());
29 33 }
30 34  
  35 + @Override
  36 + public int[] array() {
  37 + return ARRAYS;
  38 + }
31 39 }
... ...
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApi.java renamed to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java
... ... @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
7 7 *
8 8 * @author 芋道源码
9 9 */
10   -public interface UserApi {
  10 +public interface MemberUserApi {
11 11  
12 12 /**
13 13 * 获得会员用户信息
... ...
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java
1 1 package cn.iocoder.yudao.module.member.api.user.dto;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import lombok.Data;
4 5  
5 6 /**
6 7 * 用户信息 Response DTO
7 8 *
8 9 * @author 芋道源码
9 10 */
  11 +@Data
10 12 public class UserRespDTO {
11 13  
12 14 /**
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCodeConstants.java renamed to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
... ... @@ -7,12 +7,21 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
7 7 *
8 8 * member 系统,使用 1-004-000-000 段
9 9 */
10   -public interface MemberErrorCodeConstants {
  10 +public interface ErrorCodeConstants {
11 11  
12   - // ==========用户相关 1004001000============
  12 + // ========== 用户相关 1004001000============
13 13 ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在");
  14 + ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1004001001, "密码校验失败");
14 15  
15   - // ==========文件相关 1004002000 ===========
  16 + // ========== 文件相关 1004002000 ===========
  17 + // TODO 芋艿:可以删除
16 18 ErrorCode FILE_IS_EMPTY = new ErrorCode(1004002000, "文件为空");
17 19  
  20 + // ========== AUTH 模块 1004003000 ==========
  21 + ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1004003000, "登录失败,账号密码不正确");
  22 + ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1004003001, "登录失败,账号被禁用");
  23 + ErrorCode AUTH_LOGIN_FAIL_UNKNOWN = new ErrorCode(1004003002, "登录失败"); // 登录失败的兜底,未知原因
  24 + ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1004003004, "Token 已经过期");
  25 + ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1004003005, "未绑定账号,需要进行绑定");
  26 +
18 27 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/UserApiImpl.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java
... ... @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.member.api.user;
2 2  
3 3 import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
4 4 import cn.iocoder.yudao.module.member.convert.user.UserConvert;
5   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
6   -import cn.iocoder.yudao.module.member.service.user.UserService;
  5 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  6 +import cn.iocoder.yudao.module.member.service.user.MemberUserService;
7 7 import org.springframework.stereotype.Service;
8 8 import org.springframework.validation.annotation.Validated;
9 9  
... ... @@ -16,14 +16,14 @@ import javax.annotation.Resource;
16 16 */
17 17 @Service
18 18 @Validated
19   -public class UserApiImpl implements UserApi {
  19 +public class MemberUserApiImpl implements MemberUserApi {
20 20  
21 21 @Resource
22   - private UserService userService;
  22 + private MemberUserService userService;
23 23  
24 24 @Override
25 25 public UserRespDTO getUser(Long id) {
26   - UserDO user = userService.getUser(id);
  26 + MemberUserDO user = userService.getUser(id);
27 27 return UserConvert.INSTANCE.convert2(user);
28 28 }
29 29  
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java
1 1 package cn.iocoder.yudao.module.member.controller.app.auth;
2 2  
3   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 4 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
6 5 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
7 6 import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
8   -import cn.iocoder.yudao.module.member.service.auth.AuthService;
9   -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
  7 +import cn.iocoder.yudao.module.member.service.auth.MemberAuthService;
10 8 import io.swagger.annotations.Api;
11 9 import io.swagger.annotations.ApiImplicitParam;
12 10 import io.swagger.annotations.ApiImplicitParams;
13 11 import io.swagger.annotations.ApiOperation;
14 12 import lombok.extern.slf4j.Slf4j;
15   -import org.springframework.beans.factory.annotation.Autowired;
16 13 import org.springframework.validation.annotation.Validated;
17 14 import org.springframework.web.bind.annotation.*;
18 15  
... ... @@ -31,14 +28,8 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
31 28 @Slf4j
32 29 public class AppAuthController {
33 30  
34   - @Autowired
35   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在重名
36   - private AuthService authService;
37   -
38   - @Resource
39   - private SysSmsCodeService smsCodeService;
40 31 @Resource
41   - private SysSocialCoreService socialService;
  32 + private MemberAuthService authService;
42 33  
43 34 @PostMapping("/login")
44 35 @ApiOperation("使用手机 + 密码登录")
... ... @@ -62,14 +53,7 @@ public class AppAuthController {
62 53 @ApiOperation(value = "发送手机验证码")
63 54 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
64 55 public CommonResult<Boolean> sendSmsCode(@RequestBody @Valid AppAuthSendSmsReqVO reqVO) {
65   - smsCodeService.sendSmsCode(reqVO.getMobile(), reqVO.getScene(), getClientIP());
66   - return success(true);
67   - }
68   -
69   - @GetMapping("/send-sms-code-login") // TODO 芋艿:post 比较合理
70   - @ApiOperation(value = "向已登录用户发送验证码",notes = "修改手机时验证原手机号使用")
71   - public CommonResult<Boolean> sendSmsCodeLogin() {
72   - smsCodeService.sendSmsCodeLogin(getLoginUserId());
  56 + authService.sendSmsCode(getLoginUserId(), reqVO);
73 57 return success(true);
74 58 }
75 59  
... ... @@ -100,18 +84,18 @@ public class AppAuthController {
100 84 })
101 85 public CommonResult<String> socialAuthRedirect(@RequestParam("type") Integer type,
102 86 @RequestParam("redirectUri") String redirectUri) {
103   - return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
  87 + return CommonResult.success(authService.getSocialAuthorizeUrl(type, redirectUri));
104 88 }
105 89  
106 90 @PostMapping("/social-login")
107   - @ApiOperation("社交登录,使用 code 授权码")
  91 + @ApiOperation(value = "社交登录,使用 code 授权码", notes = "适合未登录的用户,但是社交账号已绑定用户")
108 92 public CommonResult<AppAuthLoginRespVO> socialLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) {
109 93 String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent());
110 94 return success(AppAuthLoginRespVO.builder().token(token).build());
111 95 }
112 96  
113 97 @PostMapping("/social-login2")
114   - @ApiOperation("社交登录,使用 手机号 + 手机验证码")
  98 + @ApiOperation(value = "社交登录,使用 手机号 + 手机验证码", notes = "适合未登录的用户,进行登录 + 绑定")
115 99 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
116 100 public CommonResult<AppAuthLoginRespVO> socialLogin2(@RequestBody @Valid AppAuthSocialLogin2ReqVO reqVO) {
117 101 String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent());
... ... @@ -119,7 +103,7 @@ public class AppAuthController {
119 103 }
120 104  
121 105 @PostMapping("/social-bind")
122   - @ApiOperation("社交绑定,使用 code 授权码")
  106 + @ApiOperation(value = "社交绑定,使用 code 授权码", notes = "使用在用户已经登录的情况下")
123 107 @PreAuthenticated
124 108 public CommonResult<Boolean> socialBind(@RequestBody @Valid AppAuthSocialBindReqVO reqVO) {
125 109 authService.socialBind(getLoginUserId(), reqVO);
... ... @@ -130,7 +114,7 @@ public class AppAuthController {
130 114 @ApiOperation("取消社交绑定")
131 115 @PreAuthenticated
132 116 public CommonResult<Boolean> socialUnbind(@RequestBody AppAuthSocialUnbindReqVO reqVO) {
133   - socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.MEMBER);
  117 + authService.unbindSocialUser(getLoginUserId(), reqVO);
134 118 return CommonResult.success(true);
135 119 }
136 120  
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthCheckCodeReqVO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
4 4 import cn.iocoder.yudao.framework.common.validation.Mobile;
5   -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum;
  5 +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
6 6 import io.swagger.annotations.ApiModel;
7 7 import io.swagger.annotations.ApiModelProperty;
8 8 import lombok.AllArgsConstructor;
... ... @@ -36,7 +36,7 @@ public class AppAuthCheckCodeReqVO {
36 36  
37 37 @ApiModelProperty(value = "发送场景", example = "1", notes = "对应 MbrSmsSceneEnum 枚举")
38 38 @NotNull(message = "发送场景不能为空")
39   - @InEnum(SysSmsSceneEnum.class)
  39 + @InEnum(SmsSceneEnum.class)
40 40 private Integer scene;
41 41  
42 42 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSendSmsReqVO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.app.auth.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
4 4 import cn.iocoder.yudao.framework.common.validation.Mobile;
5   -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum;
  5 +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
6 6 import io.swagger.annotations.ApiModel;
7 7 import io.swagger.annotations.ApiModelProperty;
8 8 import lombok.Data;
... ... @@ -21,7 +21,7 @@ public class AppAuthSendSmsReqVO {
21 21  
22 22 @ApiModelProperty(value = "发送场景", example = "1", notes = "对应 MbrSmsSceneEnum 枚举")
23 23 @NotNull(message = "发送场景不能为空")
24   - @InEnum(SysSmsSceneEnum.class)
  24 + @InEnum(SmsSceneEnum.class)
25 25 private Integer scene;
26 26  
27 27 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/vo/AppAuthSocialBindReqVO.java
1 1 package cn.iocoder.yudao.module.member.controller.app.auth.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
  4 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
4 5 import io.swagger.annotations.ApiModel;
5 6 import io.swagger.annotations.ApiModelProperty;
6 7 import lombok.AllArgsConstructor;
... ... @@ -19,7 +20,7 @@ import javax.validation.constraints.NotNull;
19 20 public class AppAuthSocialBindReqVO {
20 21  
21 22 @ApiModelProperty(value = "社交平台的类型", required = true, example = "10", notes = "参见 SysUserSocialTypeEnum 枚举值")
22   - @InEnum(SysSocialTypeEnum.class)
  23 + @InEnum(SocialTypeEnum.class)
23 24 @NotNull(message = "社交平台的类型不能为空")
24 25 private Integer type;
25 26  
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserController.java
... ... @@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
5 5 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO;
6 6 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO;
7 7 import cn.iocoder.yudao.module.member.convert.user.UserConvert;
8   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
9   -import cn.iocoder.yudao.module.member.service.user.UserService;
  8 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  9 +import cn.iocoder.yudao.module.member.service.user.MemberUserService;
10 10 import io.swagger.annotations.Api;
11 11 import io.swagger.annotations.ApiOperation;
12 12 import lombok.extern.slf4j.Slf4j;
... ... @@ -21,7 +21,7 @@ import java.io.IOException;
21 21 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.*;
22 22 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
23 23 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
24   -import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE_IS_EMPTY;
  24 +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.FILE_IS_EMPTY;
25 25  
26 26 @Api(tags = "用户 APP - 用户个人中心")
27 27 @RestController
... ... @@ -31,7 +31,7 @@ import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.FILE
31 31 public class AppUserController {
32 32  
33 33 @Resource
34   - private UserService userService;
  34 + private MemberUserService userService;
35 35  
36 36 @PutMapping("/update-nickname")
37 37 @ApiOperation("修改用户昵称")
... ... @@ -56,7 +56,7 @@ public class AppUserController {
56 56 @ApiOperation("获得基本信息")
57 57 @PreAuthenticated
58 58 public CommonResult<AppUserInfoRespVO> getUserInfo() {
59   - UserDO user = userService.getUser(getLoginUserId());
  59 + MemberUserDO user = userService.getUser(getLoginUserId());
60 60 return success(UserConvert.INSTANCE.convert(user));
61 61 }
62 62  
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/auth/AuthConvert.java
... ... @@ -2,7 +2,13 @@ package cn.iocoder.yudao.module.member.convert.auth;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 4 import cn.iocoder.yudao.framework.security.core.LoginUser;
5   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
  5 +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialBindReqVO;
  6 +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLogin2ReqVO;
  7 +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialLoginReqVO;
  8 +import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthSocialUnbindReqVO;
  9 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  10 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
  11 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
6 12 import org.mapstruct.Mapper;
7 13 import org.mapstruct.Mapping;
8 14 import org.mapstruct.factory.Mappers;
... ... @@ -13,11 +19,16 @@ public interface AuthConvert {
13 19 AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class);
14 20  
15 21 @Mapping(source = "mobile", target = "username")
16   - LoginUser convert0(UserDO bean);
  22 + LoginUser convert0(MemberUserDO bean);
17 23  
18   - default LoginUser convert(UserDO bean) {
  24 + default LoginUser convert(MemberUserDO bean) {
19 25 // 目的,为了设置 UserTypeEnum.MEMBER.getValue()
20 26 return convert0(bean).setUserType(UserTypeEnum.MEMBER.getValue());
21 27 }
22 28  
  29 + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialBindReqVO reqVO);
  30 + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLogin2ReqVO reqVO);
  31 + SocialUserBindReqDTO convert(Long userId, Integer value, AppAuthSocialLoginReqVO reqVO);
  32 + SocialUserUnbindReqDTO convert(Long userId, Integer value, AppAuthSocialUnbindReqVO reqVO);
  33 +
23 34 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.convert.user;
2 2  
3 3 import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
4 4 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO;
5   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
  5 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
6 6 import org.mapstruct.Mapper;
7 7 import org.mapstruct.factory.Mappers;
8 8  
... ... @@ -11,7 +11,7 @@ public interface UserConvert {
11 11  
12 12 UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
13 13  
14   - AppUserInfoRespVO convert(UserDO bean);
  14 + AppUserInfoRespVO convert(MemberUserDO bean);
15 15  
16   - UserRespDTO convert2(UserDO bean);
  16 + UserRespDTO convert2(MemberUserDO bean);
17 17 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/address/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.member.dal.dataobject.address;
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java
... ... @@ -22,7 +22,7 @@ import java.util.Date;
22 22 @Builder
23 23 @NoArgsConstructor
24 24 @AllArgsConstructor
25   -public class UserDO extends TenantBaseDO {
  25 +public class MemberUserDO extends TenantBaseDO {
26 26  
27 27 /**
28 28 * 用户ID
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/UserMapper.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java
1 1 package cn.iocoder.yudao.module.member.dal.mysql.user;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
  4 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
5 5 import org.apache.ibatis.annotations.Mapper;
6 6  
7 7 /**
... ... @@ -10,10 +10,10 @@ import org.apache.ibatis.annotations.Mapper;
10 10 * @author 芋道源码
11 11 */
12 12 @Mapper
13   -public interface UserMapper extends BaseMapperX<UserDO> {
  13 +public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
14 14  
15   - default UserDO selectByMobile(String mobile) {
16   - return selectOne(UserDO::getMobile, mobile);
  15 + default MemberUserDO selectByMobile(String mobile) {
  16 + return selectOne(MemberUserDO::getMobile, mobile);
17 17 }
18 18  
19 19 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/SysErrorCodeConstants.java deleted
1   -package cn.iocoder.yudao.module.member.enums;
2   -
3   -import cn.iocoder.yudao.framework.common.exception.ErrorCode;
4   -
5   -/**
6   - * System 错误码枚举类
7   - *
8   - * system 系统,使用 1-005-000-000 段
9   - */
10   -public interface SysErrorCodeConstants {
11   -
12   - // ========== AUTH 模块 1005000000 ==========
13   - ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1005000000, "登录失败,账号密码不正确");
14   - ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1005000001, "登录失败,账号被禁用");
15   - ErrorCode AUTH_LOGIN_FAIL_UNKNOWN = new ErrorCode(1005000002, "登录失败"); // 登录失败的兜底,未知原因
16   - ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1005000003, "Token 已经过期");
17   - ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1005000004, "未绑定账号,需要进行绑定");
18   -
19   - // ========== SMS CODE 模块 1005001000 ==========
20   - ErrorCode USER_SMS_CODE_NOT_FOUND = new ErrorCode(1005001000, "验证码不存在");
21   - ErrorCode USER_SMS_CODE_EXPIRED = new ErrorCode(1005001001, "验证码已过期");
22   - ErrorCode USER_SMS_CODE_USED = new ErrorCode(1005001002, "验证码已使用");
23   - ErrorCode USER_SMS_CODE_NOT_CORRECT = new ErrorCode(1005001003, "验证码不正确");
24   - ErrorCode USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1005001004, "超过每日短信发送数量");
25   - ErrorCode USER_SMS_CODE_SEND_TOO_FAST = new ErrorCode(1005001005, "短信发送过于频率");
26   - ErrorCode USER_SMS_CODE_IS_EXISTS = new ErrorCode(1005001006, "手机号已被使用");
27   - ErrorCode USER_SMS_CODE_IS_UNUSED = new ErrorCode(1005001006, "验证码未被使用");
28   -
29   - // ========== 用户模块 1005002000 ==========
30   - ErrorCode USER_NOT_EXISTS = new ErrorCode(1005002001, "用户不存在");
31   - ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1005002003, "密码校验失败");
32   -}
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/package-info.java 0 → 100644
  1 +/**
  2 + * 占位
  3 + */
  4 +package cn.iocoder.yudao.module.member.enums;
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsTemplateCodeConstants.java deleted
1   -package cn.iocoder.yudao.module.member.enums.sms;
2   -
3   -/**
4   - * yudao-user-server 使用到的短信模板的 Code 编码的枚举
5   - *
6   - * @author 芋道源码
7   - */
8   -public interface SysSmsTemplateCodeConstants {
9   -
10   - /**
11   - * 前台用户短信登录
12   - */
13   - String USER_SMS_LOGIN = "user-sms-login";
14   -
15   - /**
16   - * 用户忘记密码
17   - */
18   - String USER_SMS_RESET_PASSWORD = "user-sms-reset-password";
19   -
20   - /**
21   - * 用户更新手机号
22   - */
23   - String USER_SMS_UPDATE_MOBILE = "user-sms-update-mobile";
24   -
25   -}
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthService.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java
... ... @@ -12,7 +12,7 @@ import javax.validation.Valid;
12 12 *
13 13 * @author 芋道源码
14 14 */
15   -public interface AuthService extends SecurityAuthFrameworkService {
  15 +public interface MemberAuthService extends SecurityAuthFrameworkService {
16 16  
17 17 /**
18 18 * 手机 + 密码登录
... ... @@ -64,6 +64,23 @@ public interface AuthService extends SecurityAuthFrameworkService {
64 64 void socialBind(Long userId, @Valid AppAuthSocialBindReqVO reqVO);
65 65  
66 66 /**
  67 + * 取消社交绑定
  68 + *
  69 + * @param userId 用户编号
  70 + * @param reqVO 解绑信息
  71 + */
  72 + void unbindSocialUser(Long userId, @Valid AppAuthSocialUnbindReqVO reqVO);
  73 +
  74 + /**
  75 + * 获得社交认证 URL
  76 + *
  77 + * @param type 社交平台类型
  78 + * @param redirectUri 跳转地址
  79 + * @return 认证 URL
  80 + */
  81 + String getSocialAuthorizeUrl(Integer type, String redirectUri);
  82 +
  83 + /**
67 84 * 修改用户密码
68 85 * @param userId 用户id
69 86 * @param userReqVO 用户请求实体类
... ... @@ -76,4 +93,12 @@ public interface AuthService extends SecurityAuthFrameworkService {
76 93 */
77 94 void resetPassword(AppAuthResetPasswordReqVO userReqVO);
78 95  
  96 + /**
  97 + * 给用户发送短信验证码
  98 + *
  99 + * @param userId 用户编号
  100 + * @param reqVO 发送信息
  101 + */
  102 + void sendSmsCode(Long userId, AppAuthSendSmsReqVO reqVO);
  103 +
79 104 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/AuthServiceImpl.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java
1 1 package cn.iocoder.yudao.module.member.service.auth;
2 2  
3   -import cn.hutool.core.collection.CollUtil;
4 3 import cn.hutool.core.lang.Assert;
5   -import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO;
6   -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum;
7   -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum;
8   -import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService;
9   -import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService;
10   -import cn.iocoder.yudao.module.system.service.logger.dto.SysLoginLogCreateReqDTO;
11   -import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService;
12 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
13 5 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
14 6 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
... ... @@ -17,14 +9,18 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
17 9 import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken;
18 10 import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
19 11 import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
20   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
21   -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper;
22   -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum;
23   -import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
24   -import cn.iocoder.yudao.module.member.service.user.UserService;
  12 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  13 +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
  14 +import cn.iocoder.yudao.module.member.service.user.MemberUserService;
  15 +import cn.iocoder.yudao.module.system.api.auth.UserSessionApi;
  16 +import cn.iocoder.yudao.module.system.api.logger.LoginLogApi;
  17 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
  18 +import cn.iocoder.yudao.module.system.api.social.SocialUserApi;
  19 +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
  20 +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
  21 +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
25 22 import com.google.common.annotations.VisibleForTesting;
26 23 import lombok.extern.slf4j.Slf4j;
27   -import me.zhyd.oauth.model.AuthUser;
28 24 import org.springframework.context.annotation.Lazy;
29 25 import org.springframework.security.authentication.AuthenticationManager;
30 26 import org.springframework.security.authentication.BadCredentialsException;
... ... @@ -38,46 +34,45 @@ import org.springframework.stereotype.Service;
38 34 import org.springframework.transaction.annotation.Transactional;
39 35  
40 36 import javax.annotation.Resource;
41   -import java.util.List;
42 37 import java.util.Objects;
43 38  
44 39 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
45 40 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
46   -import static cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants.*;
  41 +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
47 42  
48 43 /**
49 44 * 会员的认证 Service 接口
50 45 *
51 46 * @author 芋道源码
52 47 */
53   -@Service("memberAuthService")
  48 +@Service
54 49 @Slf4j
55   -public class AuthServiceImpl implements AuthService {
  50 +public class MemberAuthServiceImpl implements MemberAuthService {
56 51  
57 52 @Resource
58 53 @Lazy // 延迟加载,因为存在相互依赖的问题
59 54 private AuthenticationManager authenticationManager;
60 55  
61 56 @Resource
62   - private UserService userService;
  57 + private MemberUserService userService;
63 58 @Resource
64 59 private SysSmsCodeService smsCodeService;
65 60 @Resource
66   - private SysLoginLogCoreService loginLogCoreService;
  61 + private LoginLogApi loginLogApi;
67 62 @Resource
68   - private SysUserSessionCoreService userSessionCoreService;
  63 + private UserSessionApi userSessionApi;
69 64 @Resource
70   - private SysSocialCoreService socialService;
  65 + private SocialUserApi socialUserApi;
71 66  
72 67 @Resource
73 68 private PasswordEncoder passwordEncoder;
74 69 @Resource
75   - private UserMapper userMapper;
  70 + private MemberUserMapper userMapper;
76 71  
77 72 @Override
78 73 public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
79 74 // 获取 username 对应的 SysUserDO
80   - UserDO user = userService.getUserByMobile(mobile);
  75 + MemberUserDO user = userService.getUserByMobile(mobile);
81 76 if (user == null) {
82 77 throw new UsernameNotFoundException(mobile);
83 78 }
... ... @@ -91,86 +86,87 @@ public class AuthServiceImpl implements AuthService {
91 86 LoginUser loginUser = this.login0(reqVO.getMobile(), reqVO.getPassword());
92 87  
93 88 // 缓存登录用户到 Redis 中,返回 sessionId 编号
94   - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
  89 + return userSessionApi.createUserSession(loginUser, userIp, userAgent);
95 90 }
96 91  
97 92 @Override
98 93 @Transactional
99 94 public String smsLogin(AppAuthSmsLoginReqVO reqVO, String userIp, String userAgent) {
100 95 // 校验验证码
101   - smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.LOGIN_BY_SMS.getScene(),
  96 + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_LOGIN.getScene(),
102 97 reqVO.getCode(), userIp);
103 98  
104 99 // 获得获得注册用户
105   - UserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp);
  100 + MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp);
106 101 Assert.notNull(user, "获取用户失败,结果为空");
107 102  
108 103 // 执行登陆
109   - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SMS, SysLoginResultEnum.SUCCESS);
  104 + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_SMS, LoginResultEnum.SUCCESS);
110 105 LoginUser loginUser = AuthConvert.INSTANCE.convert(user);
111 106  
112 107 // 缓存登录用户到 Redis 中,返回 sessionId 编号
113   - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
  108 + return userSessionApi.createUserSession(loginUser, userIp, userAgent);
114 109 }
115 110  
116 111 @Override
117 112 public String socialLogin(AppAuthSocialLoginReqVO reqVO, String userIp, String userAgent) {
118   - // 使用 code 授权码,进行登录
119   - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
120   - org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
121   -
122   - // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
123   - String unionId = socialService.getAuthUserUnionId(authUser);
124   - List<SysSocialUserDO> socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType());
125   - if (CollUtil.isEmpty(socialUsers)) {
  113 + // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
  114 + Long userId = socialUserApi.getBindUserId(UserTypeEnum.MEMBER.getValue(), reqVO.getType(),
  115 + reqVO.getCode(), reqVO.getState());
  116 + if (userId == null) {
126 117 throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
127 118 }
128 119  
129 120 // 自动登录
130   - UserDO user = userService.getUser(socialUsers.get(0).getUserId());
  121 + MemberUserDO user = userService.getUser(userId);
131 122 if (user == null) {
132 123 throw exception(USER_NOT_EXISTS);
133 124 }
134   - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS);
  125 + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, LoginResultEnum.SUCCESS);
135 126  
136 127 // 创建 LoginUser 对象
137 128 LoginUser loginUser = AuthConvert.INSTANCE.convert(user);
138 129  
139 130 // 绑定社交用户(更新)
140   - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType());
  131 + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO));
141 132  
142 133 // 缓存登录用户到 Redis 中,返回 sessionId 编号
143   - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
  134 + return userSessionApi.createUserSession(loginUser, userIp, userAgent);
144 135 }
145 136  
146 137 @Override
147 138 public String socialLogin2(AppAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) {
148   - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
149   - org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
  139 + // 校验社交平台的认证信息是否正确
  140 + socialUserApi.checkSocialUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
150 141  
151 142 // 使用手机号、手机验证码登录
152 143 AppAuthSmsLoginReqVO loginReqVO = AppAuthSmsLoginReqVO.builder()
153 144 .mobile(reqVO.getMobile()).code(reqVO.getSmsCode()).build();
154 145 String sessionId = this.smsLogin(loginReqVO, userIp, userAgent);
155   - LoginUser loginUser = userSessionCoreService.getLoginUser(sessionId);
  146 + LoginUser loginUser = userSessionApi.getLoginUser(sessionId);
156 147  
157 148 // 绑定社交用户(新增)
158   - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType());
  149 + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(loginUser.getId(), getUserType().getValue(), reqVO));
159 150 return sessionId;
160 151 }
161 152  
162 153 @Override
163 154 public void socialBind(Long userId, AppAuthSocialBindReqVO reqVO) {
164   - // 使用 code 授权码,进行登录
165   - AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
166   - org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
  155 + socialUserApi.bindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO));
  156 + }
167 157  
168   - // 绑定社交用户(新增)
169   - socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType());
  158 + @Override
  159 + public void unbindSocialUser(Long userId, AppAuthSocialUnbindReqVO reqVO) {
  160 + socialUserApi.unbindSocialUser(AuthConvert.INSTANCE.convert(userId, getUserType().getValue(), reqVO));
  161 + }
  162 +
  163 + @Override
  164 + public String getSocialAuthorizeUrl(Integer type, String redirectUri) {
  165 + return socialUserApi.getAuthorizeUrl(type, redirectUri);
170 166 }
171 167  
172 168 private LoginUser login0(String username, String password) {
173   - final SysLoginLogTypeEnum logTypeEnum = SysLoginLogTypeEnum.LOGIN_USERNAME;
  169 + final LoginLogTypeEnum logType = LoginLogTypeEnum.LOGIN_USERNAME;
174 170 // 用户验证
175 171 Authentication authentication;
176 172 try {
... ... @@ -179,28 +175,28 @@ public class AuthServiceImpl implements AuthService {
179 175 authentication = authenticationManager.authenticate(new MultiUsernamePasswordAuthenticationToken(
180 176 username, password, getUserType()));
181 177 } catch (BadCredentialsException badCredentialsException) {
182   - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.BAD_CREDENTIALS);
  178 + this.createLoginLog(username, logType, LoginResultEnum.BAD_CREDENTIALS);
183 179 throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
184 180 } catch (DisabledException disabledException) {
185   - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.USER_DISABLED);
  181 + this.createLoginLog(username, logType, LoginResultEnum.USER_DISABLED);
186 182 throw exception(AUTH_LOGIN_USER_DISABLED);
187 183 } catch (AuthenticationException authenticationException) {
188 184 log.error("[login0][username({}) 发生未知异常]", username, authenticationException);
189   - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.UNKNOWN_ERROR);
  185 + this.createLoginLog(username, logType, LoginResultEnum.UNKNOWN_ERROR);
190 186 throw exception(AUTH_LOGIN_FAIL_UNKNOWN);
191 187 }
192 188 // 登录成功的日志
193 189 Assert.notNull(authentication.getPrincipal(), "Principal 不会为空");
194   - this.createLoginLog(username, logTypeEnum, SysLoginResultEnum.SUCCESS);
  190 + this.createLoginLog(username, logType, LoginResultEnum.SUCCESS);
195 191 return (LoginUser) authentication.getPrincipal();
196 192 }
197 193  
198   - private void createLoginLog(String mobile, SysLoginLogTypeEnum logTypeEnum, SysLoginResultEnum loginResult) {
  194 + private void createLoginLog(String mobile, LoginLogTypeEnum logType, LoginResultEnum loginResult) {
199 195 // 获得用户
200   - UserDO user = userService.getUserByMobile(mobile);
  196 + MemberUserDO user = userService.getUserByMobile(mobile);
201 197 // 插入登录日志
202   - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO();
203   - reqDTO.setLogType(logTypeEnum.getType());
  198 + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
  199 + reqDTO.setLogType(logType.getType());
204 200 reqDTO.setTraceId(TracerUtils.getTraceId());
205 201 if (user != null) {
206 202 reqDTO.setUserId(user.getId());
... ... @@ -209,9 +205,9 @@ public class AuthServiceImpl implements AuthService {
209 205 reqDTO.setUserAgent(ServletUtils.getUserAgent());
210 206 reqDTO.setUserIp(getClientIP());
211 207 reqDTO.setResult(loginResult.getResult());
212   - loginLogCoreService.createLoginLog(reqDTO);
  208 + loginLogApi.createLoginLog(reqDTO);
213 209 // 更新最后登录时间
214   - if (user != null && Objects.equals(SysLoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) {
  210 + if (user != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) {
215 211 userService.updateUserLogin(user.getId(), getClientIP());
216 212 }
217 213 }
... ... @@ -219,7 +215,7 @@ public class AuthServiceImpl implements AuthService {
219 215 @Override
220 216 public LoginUser verifyTokenAndRefresh(String token) {
221 217 // 获得 LoginUser
222   - LoginUser loginUser = userSessionCoreService.getLoginUser(token);
  218 + LoginUser loginUser = userSessionApi.getLoginUser(token);
223 219 if (loginUser == null) {
224 220 return null;
225 221 }
... ... @@ -231,31 +227,31 @@ public class AuthServiceImpl implements AuthService {
231 227 private void refreshLoginUserCache(String token, LoginUser loginUser) {
232 228 // 每 1/3 的 Session 超时时间,刷新 LoginUser 缓存
233 229 if (System.currentTimeMillis() - loginUser.getUpdateTime().getTime() <
234   - userSessionCoreService.getSessionTimeoutMillis() / 3) {
  230 + userSessionApi.getSessionTimeoutMillis() / 3) {
235 231 return;
236 232 }
237 233  
238 234 // 重新加载 UserDO 信息
239   - UserDO user = userService.getUser(loginUser.getId());
  235 + MemberUserDO user = userService.getUser(loginUser.getId());
240 236 if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) {
241 237 // 校验 token 时,用户被禁用的情况下,也认为 token 过期,方便前端跳转到登录界面
242 238 throw exception(AUTH_TOKEN_EXPIRED);
243 239 }
244 240  
245 241 // 刷新 LoginUser 缓存
246   - userSessionCoreService.refreshUserSession(token, loginUser);
  242 + userSessionApi.refreshUserSession(token, loginUser);
247 243 }
248 244  
249 245 @Override
250 246 public LoginUser mockLogin(Long userId) {
251 247 // 获取用户编号对应的 UserDO
252   - UserDO user = userService.getUser(userId);
  248 + MemberUserDO user = userService.getUser(userId);
253 249 if (user == null) {
254 250 throw new UsernameNotFoundException(String.valueOf(userId));
255 251 }
256 252  
257 253 // 执行登陆
258   - this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_MOCK, SysLoginResultEnum.SUCCESS);
  254 + this.createLoginLog(user.getMobile(), LoginLogTypeEnum.LOGIN_MOCK, LoginResultEnum.SUCCESS);
259 255  
260 256 // 创建 LoginUser 对象
261 257 return AuthConvert.INSTANCE.convert(user);
... ... @@ -264,12 +260,12 @@ public class AuthServiceImpl implements AuthService {
264 260 @Override
265 261 public void logout(String token) {
266 262 // 查询用户信息
267   - LoginUser loginUser = userSessionCoreService.getLoginUser(token);
  263 + LoginUser loginUser = userSessionApi.getLoginUser(token);
268 264 if (loginUser == null) {
269 265 return;
270 266 }
271 267 // 删除 session
272   - userSessionCoreService.deleteUserSession(token);
  268 + userSessionApi.deleteUserSession(token);
273 269 // 记录登出日志
274 270 this.createLogoutLog(loginUser.getId(), loginUser.getUsername());
275 271 }
... ... @@ -282,10 +278,10 @@ public class AuthServiceImpl implements AuthService {
282 278 @Override
283 279 public void updatePassword(Long userId, AppAuthUpdatePasswordReqVO reqVO) {
284 280 // 检验旧密码
285   - UserDO userDO = checkOldPassword(userId, reqVO.getOldPassword());
  281 + MemberUserDO userDO = checkOldPassword(userId, reqVO.getOldPassword());
286 282  
287 283 // 更新用户密码
288   - UserDO mbrUserDO = UserDO.builder().id(userDO.getId())
  284 + MemberUserDO mbrUserDO = MemberUserDO.builder().id(userDO.getId())
289 285 .password(passwordEncoder.encode(reqVO.getPassword())).build();
290 286 userMapper.updateById(mbrUserDO);
291 287 }
... ... @@ -293,19 +289,24 @@ public class AuthServiceImpl implements AuthService {
293 289 @Override
294 290 public void resetPassword(AppAuthResetPasswordReqVO reqVO) {
295 291 // 检验用户是否存在
296   - UserDO userDO = checkUserIfExists(reqVO.getMobile());
  292 + MemberUserDO userDO = checkUserIfExists(reqVO.getMobile());
297 293  
298 294 // 使用验证码
299   - smsCodeService.useSmsCode(reqVO.getMobile(),SysSmsSceneEnum.FORGET_MOBILE_BY_SMS.getScene(), reqVO.getCode(),
  295 + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_FORGET_PASSWORD.getScene(), reqVO.getCode(),
300 296 getClientIP());
301 297  
302 298 // 更新密码
303   - UserDO mbrUserDO = UserDO.builder().build();
  299 + MemberUserDO mbrUserDO = MemberUserDO.builder().build();
304 300 mbrUserDO.setId(userDO.getId());
305 301 mbrUserDO.setPassword(passwordEncoder.encode(reqVO.getPassword()));
306 302 userMapper.updateById(mbrUserDO);
307 303 }
308 304  
  305 + @Override
  306 + public void sendSmsCode(Long userId, AppAuthSendSmsReqVO reqVO) {
  307 + // TODO 芋艿:修改
  308 + }
  309 +
309 310 /**
310 311 * 校验旧密码
311 312 *
... ... @@ -314,8 +315,8 @@ public class AuthServiceImpl implements AuthService {
314 315 * @return MemberUserDO 用户实体
315 316 */
316 317 @VisibleForTesting
317   - public UserDO checkOldPassword(Long id, String oldPassword) {
318   - UserDO user = userMapper.selectById(id);
  318 + public MemberUserDO checkOldPassword(Long id, String oldPassword) {
  319 + MemberUserDO user = userMapper.selectById(id);
319 320 if (user == null) {
320 321 throw exception(USER_NOT_EXISTS);
321 322 }
... ... @@ -326,8 +327,8 @@ public class AuthServiceImpl implements AuthService {
326 327 return user;
327 328 }
328 329  
329   - public UserDO checkUserIfExists(String mobile) {
330   - UserDO user = userMapper.selectByMobile(mobile);
  330 + public MemberUserDO checkUserIfExists(String mobile) {
  331 + MemberUserDO user = userMapper.selectByMobile(mobile);
331 332 if (user == null) {
332 333 throw exception(USER_NOT_EXISTS);
333 334 }
... ... @@ -335,16 +336,16 @@ public class AuthServiceImpl implements AuthService {
335 336 }
336 337  
337 338 private void createLogoutLog(Long userId, String username) {
338   - SysLoginLogCreateReqDTO reqDTO = new SysLoginLogCreateReqDTO();
339   - reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
  339 + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
  340 + reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType());
340 341 reqDTO.setTraceId(TracerUtils.getTraceId());
341 342 reqDTO.setUserId(userId);
342 343 reqDTO.setUserType(getUserType().getValue());
343 344 reqDTO.setUsername(username);
344 345 reqDTO.setUserAgent(ServletUtils.getUserAgent());
345 346 reqDTO.setUserIp(getClientIP());
346   - reqDTO.setResult(SysLoginResultEnum.SUCCESS.getResult());
347   - loginLogCoreService.createLoginLog(reqDTO);
  347 + reqDTO.setResult(LoginResultEnum.SUCCESS.getResult());
  348 + loginLogApi.createLoginLog(reqDTO);
348 349 }
349 350  
350 351 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserService.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java
1 1 package cn.iocoder.yudao.module.member.service.user;
2 2  
3 3 import cn.iocoder.yudao.framework.common.validation.Mobile;
4   -import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO;
5 4 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO;
6   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
  5 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
7 6  
8 7 import java.io.InputStream;
9 8  
... ... @@ -12,7 +11,7 @@ import java.io.InputStream;
12 11 *
13 12 * @author 芋道源码
14 13 */
15   -public interface UserService {
  14 +public interface MemberUserService {
16 15  
17 16 /**
18 17 * 通过手机查询用户
... ... @@ -20,7 +19,7 @@ public interface UserService {
20 19 * @param mobile 手机
21 20 * @return 用户对象
22 21 */
23   - UserDO getUserByMobile(String mobile);
  22 + MemberUserDO getUserByMobile(String mobile);
24 23  
25 24 /**
26 25 * 基于手机号创建用户。
... ... @@ -30,7 +29,7 @@ public interface UserService {
30 29 * @param registerIp 注册 IP
31 30 * @return 用户对象
32 31 */
33   - UserDO createUserIfAbsent(@Mobile String mobile, String registerIp);
  32 + MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp);
34 33  
35 34 /**
36 35 * 更新用户的最后登陆信息
... ... @@ -46,7 +45,7 @@ public interface UserService {
46 45 * @param id 用户ID
47 46 * @return 用户对象信息
48 47 */
49   - UserDO getUser(Long id);
  48 + MemberUserDO getUser(Long id);
50 49  
51 50 /**
52 51 * 修改用户昵称
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/UserServiceImpl.java renamed to yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java
... ... @@ -6,11 +6,11 @@ import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreServic
6 6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 7 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
8 8 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO;
9   -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO;
10   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
11   -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper;
  9 +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO;
  10 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  11 +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
12 12 import cn.iocoder.yudao.module.member.enums.SysErrorCodeConstants;
13   -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum;
  13 +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
14 14 import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
15 15 import com.google.common.annotations.VisibleForTesting;
16 16 import lombok.extern.slf4j.Slf4j;
... ... @@ -25,20 +25,20 @@ import java.util.Date;
25 25  
26 26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
27 27 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
28   -import static cn.iocoder.yudao.module.member.enums.MemberErrorCodeConstants.USER_NOT_EXISTS;
  28 +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS;
29 29  
30 30 /**
31 31 * 会员 User Service 实现类
32 32 *
33 33 * @author 芋道源码
34 34 */
35   -@Service("memberUserService")
  35 +@Service
36 36 @Valid
37 37 @Slf4j
38   -public class UserServiceImpl implements UserService {
  38 +public class MemberUserServiceImpl implements MemberUserService {
39 39  
40 40 @Resource
41   - private UserMapper memberUserMapper;
  41 + private MemberUserMapper memberUserMapper;
42 42  
43 43 @Resource
44 44 private InfFileCoreService fileCoreService;
... ... @@ -49,14 +49,14 @@ public class UserServiceImpl implements UserService {
49 49 private PasswordEncoder passwordEncoder;
50 50  
51 51 @Override
52   - public UserDO getUserByMobile(String mobile) {
  52 + public MemberUserDO getUserByMobile(String mobile) {
53 53 return memberUserMapper.selectByMobile(mobile);
54 54 }
55 55  
56 56 @Override
57   - public UserDO createUserIfAbsent(String mobile, String registerIp) {
  57 + public MemberUserDO createUserIfAbsent(String mobile, String registerIp) {
58 58 // 用户已经存在
59   - UserDO user = memberUserMapper.selectByMobile(mobile);
  59 + MemberUserDO user = memberUserMapper.selectByMobile(mobile);
60 60 if (user != null) {
61 61 return user;
62 62 }
... ... @@ -64,11 +64,11 @@ public class UserServiceImpl implements UserService {
64 64 return this.createUser(mobile, registerIp);
65 65 }
66 66  
67   - private UserDO createUser(String mobile, String registerIp) {
  67 + private MemberUserDO createUser(String mobile, String registerIp) {
68 68 // 生成密码
69 69 String password = IdUtil.fastSimpleUUID();
70 70 // 插入用户
71   - UserDO user = new UserDO();
  71 + MemberUserDO user = new MemberUserDO();
72 72 user.setMobile(mobile);
73 73 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
74 74 user.setPassword(passwordEncoder.encode(password)); // 加密密码
... ... @@ -79,23 +79,23 @@ public class UserServiceImpl implements UserService {
79 79  
80 80 @Override
81 81 public void updateUserLogin(Long id, String loginIp) {
82   - memberUserMapper.updateById(new UserDO().setId(id)
  82 + memberUserMapper.updateById(new MemberUserDO().setId(id)
83 83 .setLoginIp(loginIp).setLoginDate(new Date()));
84 84 }
85 85  
86 86 @Override
87   - public UserDO getUser(Long id) {
  87 + public MemberUserDO getUser(Long id) {
88 88 return memberUserMapper.selectById(id);
89 89 }
90 90  
91 91 @Override
92 92 public void updateUserNickname(Long userId, String nickname) {
93   - UserDO user = this.checkUserExists(userId);
  93 + MemberUserDO user = this.checkUserExists(userId);
94 94 // 仅当新昵称不等于旧昵称时进行修改
95 95 if (nickname.equals(user.getNickname())){
96 96 return;
97 97 }
98   - UserDO userDO = new UserDO();
  98 + MemberUserDO userDO = new MemberUserDO();
99 99 userDO.setId(user.getId());
100 100 userDO.setNickname(nickname);
101 101 memberUserMapper.updateById(userDO);
... ... @@ -107,7 +107,7 @@ public class UserServiceImpl implements UserService {
107 107 // 创建文件
108 108 String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile));
109 109 // 更新头像路径
110   - memberUserMapper.updateById(UserDO.builder().id(userId).avatar(avatar).build());
  110 + memberUserMapper.updateById(MemberUserDO.builder().id(userId).avatar(avatar).build());
111 111 return avatar;
112 112 }
113 113  
... ... @@ -117,27 +117,27 @@ public class UserServiceImpl implements UserService {
117 117 checkUserExists(userId);
118 118  
119 119 // 校验旧手机和旧验证码
120   - SysSmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(),
121   - SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene());
  120 + SmsCodeDO sysSmsCodeDO = smsCodeService.checkCodeIsExpired(reqVO.getOldMobile(), reqVO.getOldCode(),
  121 + SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene());
122 122 // 判断旧 code 是否未被使用,如果是,抛出异常
123 123 if (Boolean.FALSE.equals(sysSmsCodeDO.getUsed())){
124 124 throw ServiceExceptionUtil.exception(SysErrorCodeConstants.USER_SMS_CODE_IS_UNUSED);
125 125 }
126 126  
127 127 // 使用新验证码
128   - smsCodeService.useSmsCode(reqVO.getMobile(), SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene(),
  128 + smsCodeService.useSmsCode(reqVO.getMobile(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene(),
129 129 reqVO.getCode(),getClientIP());
130 130  
131 131 // 更新用户手机
132   - memberUserMapper.updateById(UserDO.builder().id(userId).mobile(reqVO.getMobile()).build());
  132 + memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build());
133 133 }
134 134  
135 135 @VisibleForTesting
136   - public UserDO checkUserExists(Long id) {
  136 + public MemberUserDO checkUserExists(Long id) {
137 137 if (id == null) {
138 138 return null;
139 139 }
140   - UserDO user = memberUserMapper.selectById(id);
  140 + MemberUserDO user = memberUserMapper.selectById(id);
141 141 if (user == null) {
142 142 throw exception(USER_NOT_EXISTS);
143 143 }
... ...
yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/auth/SysAuthServiceTest.java
1 1 package cn.iocoder.yudao.module.member.service.auth;
2 2  
  3 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
3 4 import cn.iocoder.yudao.module.system.service.auth.SysUserSessionCoreService;
4 5 import cn.iocoder.yudao.module.system.service.logger.SysLoginLogCoreService;
5 6 import cn.iocoder.yudao.module.system.service.social.SysSocialCoreService;
... ... @@ -8,10 +9,9 @@ import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
8 9 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
9 10 import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthResetPasswordReqVO;
10 11 import cn.iocoder.yudao.module.member.controller.app.auth.vo.AppAuthUpdatePasswordReqVO;
11   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
12   -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper;
  12 +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
13 13 import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
14   -import cn.iocoder.yudao.module.member.service.user.UserService;
  14 +import cn.iocoder.yudao.module.member.service.user.MemberUserService;
15 15 import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest;
16 16 import org.junit.jupiter.api.Test;
17 17 import org.springframework.boot.test.mock.mockito.MockBean;
... ... @@ -32,17 +32,17 @@ import static org.mockito.Mockito.when;
32 32  
33 33 // TODO @芋艿:单测的 review,等逻辑都达成一致后
34 34 /**
35   - * {@link AuthService} 的单元测试类
  35 + * {@link MemberAuthService} 的单元测试类
36 36 *
37 37 * @author 宋天
38 38 */
39   -@Import({AuthServiceImpl.class, YudaoRedisAutoConfiguration.class})
  39 +@Import({MemberAuthServiceImpl.class, YudaoRedisAutoConfiguration.class})
40 40 public class SysAuthServiceTest extends BaseDbAndRedisUnitTest {
41 41  
42 42 @MockBean
43 43 private AuthenticationManager authenticationManager;
44 44 @MockBean
45   - private UserService userService;
  45 + private MemberUserService userService;
46 46 @MockBean
47 47 private SysSmsCodeService smsCodeService;
48 48 @MockBean
... ... @@ -56,14 +56,14 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest {
56 56 @MockBean
57 57 private PasswordEncoder passwordEncoder;
58 58 @Resource
59   - private UserMapper mbrUserMapper;
  59 + private MemberUserMapper mbrUserMapper;
60 60 @Resource
61   - private AuthServiceImpl authService;
  61 + private MemberAuthServiceImpl authService;
62 62  
63 63 @Test
64 64 public void testUpdatePassword_success(){
65 65 // 准备参数
66   - UserDO userDO = randomUserDO();
  66 + MemberUserDO userDO = randomUserDO();
67 67 mbrUserMapper.insert(userDO);
68 68  
69 69 // 新密码
... ... @@ -88,7 +88,7 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest {
88 88 @Test
89 89 public void testResetPassword_success(){
90 90 // 准备参数
91   - UserDO userDO = randomUserDO();
  91 + MemberUserDO userDO = randomUserDO();
92 92 mbrUserMapper.insert(userDO);
93 93  
94 94 // 随机密码
... ... @@ -113,12 +113,12 @@ public class SysAuthServiceTest extends BaseDbAndRedisUnitTest {
113 113 // ========== 随机对象 ==========
114 114  
115 115 @SafeVarargs
116   - private static UserDO randomUserDO(Consumer<UserDO>... consumers) {
117   - Consumer<UserDO> consumer = (o) -> {
  116 + private static MemberUserDO randomUserDO(Consumer<MemberUserDO>... consumers) {
  117 + Consumer<MemberUserDO> consumer = (o) -> {
118 118 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
119 119 o.setPassword(randomString());
120 120 };
121   - return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers));
  121 + return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers));
122 122 }
123 123  
124 124  
... ...
yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/MbrUserServiceImplTest.java renamed to yudao-module-member/yudao-module-member-impl/src/test/java/cn/iocoder/yudao/module/member/service/user/UserServiceImplTest.java
... ... @@ -6,11 +6,11 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6 6 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
7 7 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
8 8 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO;
9   -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO;
10   -import cn.iocoder.yudao.module.member.dal.dataobject.user.UserDO;
11   -import cn.iocoder.yudao.module.member.dal.mysql.user.UserMapper;
12   -import cn.iocoder.yudao.module.member.enums.sms.SysSmsSceneEnum;
13   -import cn.iocoder.yudao.module.member.service.auth.AuthServiceImpl;
  9 +import cn.iocoder.yudao.module.member.dal.dataobject.sms.SmsCodeDO;
  10 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
  11 +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
  12 +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
  13 +import cn.iocoder.yudao.module.member.service.auth.MemberAuthServiceImpl;
14 14 import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
15 15 import cn.iocoder.yudao.module.member.test.BaseDbAndRedisUnitTest;
16 16 import org.junit.jupiter.api.Test;
... ... @@ -31,24 +31,24 @@ import static org.mockito.Mockito.*;
31 31  
32 32 // TODO @芋艿:单测的 review,等逻辑都达成一致后
33 33 /**
34   - * {@link UserServiceImpl} 的单元测试类
  34 + * {@link MemberUserServiceImpl} 的单元测试类
35 35 *
36 36 * @author 宋天
37 37 */
38   -@Import({UserServiceImpl.class, YudaoRedisAutoConfiguration.class})
39   -public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest {
  38 +@Import({MemberUserServiceImpl.class, YudaoRedisAutoConfiguration.class})
  39 +public class UserServiceImplTest extends BaseDbAndRedisUnitTest {
40 40  
41 41 @Resource
42   - private UserServiceImpl mbrUserService;
  42 + private MemberUserServiceImpl mbrUserService;
43 43  
44 44 @Resource
45 45 private StringRedisTemplate stringRedisTemplate;
46 46  
47 47 @Resource
48   - private UserMapper userMapper;
  48 + private MemberUserMapper userMapper;
49 49  
50 50 @MockBean
51   - private AuthServiceImpl authService;
  51 + private MemberAuthServiceImpl authService;
52 52  
53 53 @MockBean
54 54 private InfFileCoreService fileCoreService;
... ... @@ -57,12 +57,12 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest {
57 57 private PasswordEncoder passwordEncoder;
58 58  
59 59 @MockBean
60   - private SysSmsCodeService sysSmsCodeService;
  60 + private SmsCodeService smsCodeService;
61 61  
62 62 @Test
63 63 public void testUpdateNickName_success(){
64 64 // mock 数据
65   - UserDO userDO = randomUserDO();
  65 + MemberUserDO userDO = randomUserDO();
66 66 userMapper.insert(userDO);
67 67  
68 68 // 随机昵称
... ... @@ -79,7 +79,7 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest {
79 79 @Test
80 80 public void testUpdateAvatar_success(){
81 81 // mock 数据
82   - UserDO dbUser = randomUserDO();
  82 + MemberUserDO dbUser = randomUserDO();
83 83 userMapper.insert(dbUser);
84 84  
85 85 // 准备参数
... ... @@ -99,18 +99,18 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest {
99 99 public void updateMobile_success(){
100 100 // mock数据
101 101 String oldMobile = randomNumbers(11);
102   - UserDO userDO = randomUserDO();
  102 + MemberUserDO userDO = randomUserDO();
103 103 userDO.setMobile(oldMobile);
104 104 userMapper.insert(userDO);
105 105  
106 106 // 旧手机和旧验证码
107   - SysSmsCodeDO codeDO = new SysSmsCodeDO();
  107 + SmsCodeDO codeDO = new SmsCodeDO();
108 108 String oldCode = RandomUtil.randomString(4);
109 109 codeDO.setMobile(userDO.getMobile());
110 110 codeDO.setCode(oldCode);
111   - codeDO.setScene(SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene());
  111 + codeDO.setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene());
112 112 codeDO.setUsed(Boolean.FALSE);
113   - when(sysSmsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO);
  113 + when(smsCodeService.checkCodeIsExpired(codeDO.getMobile(),codeDO.getCode(),codeDO.getScene())).thenReturn(codeDO);
114 114  
115 115 // 更新手机号
116 116 String newMobile = randomNumbers(11);
... ... @@ -128,11 +128,11 @@ public class MbrUserServiceImplTest extends BaseDbAndRedisUnitTest {
128 128 // ========== 随机对象 ==========
129 129  
130 130 @SafeVarargs
131   - private static UserDO randomUserDO(Consumer<UserDO>... consumers) {
132   - Consumer<UserDO> consumer = (o) -> {
  131 + private static MemberUserDO randomUserDO(Consumer<MemberUserDO>... consumers) {
  132 + Consumer<MemberUserDO> consumer = (o) -> {
133 133 o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
134 134 };
135   - return randomPojo(UserDO.class, ArrayUtils.append(consumer, consumers));
  135 + return randomPojo(MemberUserDO.class, ArrayUtils.append(consumer, consumers));
136 136 }
137 137  
138 138 }
... ...
yudao-module-system/yudao-module-system-api/pom.xml
... ... @@ -21,6 +21,20 @@
21 21 <groupId>cn.iocoder.boot</groupId>
22 22 <artifactId>yudao-common</artifactId>
23 23 </dependency>
  24 +
  25 + <!-- 参数校验 -->
  26 + <dependency>
  27 + <groupId>org.springframework.boot</groupId>
  28 + <artifactId>spring-boot-starter-validation</artifactId>
  29 + <optional>true</optional>
  30 + </dependency>
  31 + <!-- 用户信息 -->
  32 + <dependency>
  33 + <groupId>cn.iocoder.boot</groupId>
  34 + <artifactId>yudao-spring-boot-starter-security</artifactId>
  35 + <optional>true</optional>
  36 + </dependency>
  37 +
24 38 </dependencies>
25 39  
26 40 </project>
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.auth;
  2 +
  3 +import cn.iocoder.yudao.framework.security.core.LoginUser;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +/**
  9 + * 在线用户 Session API 接口
  10 + *
  11 + * @author 芋道源码
  12 + */
  13 +public interface UserSessionApi {
  14 +
  15 + /**
  16 + * 创建在线用户 Session
  17 + *
  18 + * @param loginUser 登录用户
  19 + * @param userIp 用户 IP
  20 + * @param userAgent 用户 UA
  21 + * @return Session 编号
  22 + */
  23 + String createUserSession(@NotNull(message = "登录用户不能为空") LoginUser loginUser, String userIp, String userAgent);
  24 +
  25 + /**
  26 + * 刷新在线用户 Session 的更新时间
  27 + *
  28 + * @param sessionId Session 编号
  29 + * @param loginUser 登录用户
  30 + */
  31 + void refreshUserSession(@NotEmpty(message = "Session编号不能为空") String sessionId,
  32 + @NotNull(message = "登录用户不能为空") LoginUser loginUser);
  33 +
  34 + /**
  35 + * 删除在线用户 Session
  36 + *
  37 + * @param sessionId Session 编号
  38 + */
  39 + void deleteUserSession(String sessionId);
  40 +
  41 + /**
  42 + * 获得 Session 编号对应的在线用户
  43 + *
  44 + * @param sessionId Session 编号
  45 + * @return 在线用户
  46 + */
  47 + LoginUser getLoginUser(String sessionId);
  48 +
  49 + /**
  50 + * 获得 Session 超时时间,单位:毫秒
  51 + *
  52 + * @return 超时时间
  53 + */
  54 + Long getSessionTimeoutMillis();
  55 +
  56 +}
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger;
  2 +
  3 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
  4 +
  5 +import javax.validation.Valid;
  6 +
  7 +/**
  8 + * 登录日志的 API 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface LoginLogApi {
  13 +
  14 + /**
  15 + * 创建登录日志
  16 + *
  17 + * @param reqDTO 日志信息
  18 + */
  19 + void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO);
  20 +
  21 +}
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/dto/LoginLogCreateReqDTO.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/LoginLogCreateReqDTO.java
1   -package cn.iocoder.yudao.module.system.service.logger.dto;
  1 +package cn.iocoder.yudao.module.system.api.logger.dto;
2 2  
3 3 import lombok.Data;
4 4  
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java 0 → 100644
  1 +/**
  2 + * System API 包,定义暴露给其它模块的 API
  3 + */
  4 +package cn.iocoder.yudao.module.system.api;
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social;
  2 +
  3 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
  4 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
  5 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
  6 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  7 +
  8 +import javax.validation.Valid;
  9 +
  10 +/**
  11 + * 社交用户的 API 接口
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +public interface SocialUserApi {
  16 +
  17 + /**
  18 + * 获得社交平台的授权 URL
  19 + *
  20 + * @param type 社交平台的类型 {@link SocialTypeEnum}
  21 + * @param redirectUri 重定向 URL
  22 + * @return 社交平台的授权 URL
  23 + */
  24 + String getAuthorizeUrl(Integer type, String redirectUri);
  25 +
  26 + /**
  27 + * 绑定社交用户
  28 + *
  29 + * @param reqDTO 绑定信息
  30 + */
  31 + void bindSocialUser(@Valid SocialUserBindReqDTO reqDTO);
  32 +
  33 + /**
  34 + * 取消绑定社交用户
  35 + *
  36 + * @param reqDTO 解绑
  37 + */
  38 + void unbindSocialUser(@Valid SocialUserUnbindReqDTO reqDTO);
  39 +
  40 + /**
  41 + * 校验社交用户的认证信息是否正确
  42 + * 如果校验不通过,则抛出 {@link ServiceException} 业务异常
  43 + *
  44 + * @param type 社交平台的类型
  45 + * @param code 授权码
  46 + * @param state state
  47 + */
  48 + void checkSocialUser(Integer type, String code, String state);
  49 +
  50 + /**
  51 + * 获得社交用户的绑定用户编号
  52 + * 注意,返回的是 MemberUser 或者 AdminUser 的 id 编号!
  53 + * 该方法会执行和 {@link #checkSocialUser(Integer, String, String)} 一样的逻辑。
  54 + * 所以在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常
  55 + *
  56 + * @param userType 用户类型
  57 + * @param type 社交平台的类型
  58 + * @param code 授权码
  59 + * @param state state
  60 + * @return 绑定用户编号
  61 + */
  62 + Long getBindUserId(Integer userType, Integer type, String code, String state);
  63 +
  64 +}
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social.dto;
  2 +
  3 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  5 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  6 +import lombok.Data;
  7 +
  8 +import javax.validation.constraints.NotEmpty;
  9 +import javax.validation.constraints.NotNull;
  10 +
  11 +/**
  12 + * 取消绑定社交用户 Request DTO
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Data
  17 +public class SocialUserBindReqDTO {
  18 +
  19 + /**
  20 + * 用户编号
  21 + */
  22 + @NotNull(message = "用户编号不能为空")
  23 + private Long userId;
  24 + /**
  25 + * 用户类型
  26 + */
  27 + @InEnum(UserTypeEnum.class)
  28 + @NotNull(message = "用户类型不能为空")
  29 + private Integer userType;
  30 +
  31 + /**
  32 + * 社交平台的类型
  33 + */
  34 + @InEnum(SocialTypeEnum.class)
  35 + @NotNull(message = "社交平台的类型不能为空")
  36 + private Integer type;
  37 + /**
  38 + * 授权码
  39 + */
  40 + @NotEmpty(message = "授权码不能为空")
  41 + private String code;
  42 + /**
  43 + * state
  44 + */
  45 + @NotEmpty(message = "state 不能为空")
  46 + private String state;
  47 +
  48 +}
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserUnbindReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social.dto;
  2 +
  3 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  5 +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  6 +import lombok.Data;
  7 +
  8 +import javax.validation.constraints.NotEmpty;
  9 +import javax.validation.constraints.NotNull;
  10 +
  11 +/**
  12 + * 社交绑定 Request DTO,使用 code 授权码
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Data
  17 +public class SocialUserUnbindReqDTO {
  18 +
  19 + /**
  20 + * 用户编号
  21 + */
  22 + @NotNull(message = "用户编号不能为空")
  23 + private Long userId;
  24 + /**
  25 + * 用户类型
  26 + */
  27 + @InEnum(UserTypeEnum.class)
  28 + @NotNull(message = "用户类型不能为空")
  29 + private Integer userType;
  30 +
  31 + /**
  32 + * 社交平台的类型
  33 + */
  34 + @InEnum(SocialTypeEnum.class)
  35 + @NotNull(message = "社交平台的类型不能为空")
  36 + private Integer type;
  37 +
  38 + /**
  39 + * 社交平台的 unionId
  40 + */
  41 + @NotEmpty(message = "社交平台的 unionId 不能为空")
  42 + private String unionId;
  43 +
  44 +}
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
... ... @@ -87,12 +87,31 @@ public interface ErrorCodeConstants {
87 87 ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1002011000, "短信模板不存在");
88 88 ErrorCode SMS_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1002011001, "已经存在编码为【{}】的短信模板");
89 89  
90   - // ========== 租户模块 1002012000 ==========
91   - ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1002012000, "租户不存在");
92   -
93   - // ========== 错误码模块 1002013000 ==========
94   - ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误码不存在");
95   - ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "已经存在编码为【{}】的错误码");
96   -
  90 + // ========== 短信发送 1002012000 ==========
  91 + ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在");
  92 + ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失");
  93 + ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1002012002, "短信模板不存在");
  94 +
  95 + // ========== 短信验证码 1002013000 ==========
  96 + ErrorCode SMS_CODE_NOT_FOUND = new ErrorCode(1002013000, "验证码不存在");
  97 + ErrorCode SMS_CODE_EXPIRED = new ErrorCode(1002013001, "验证码已过期");
  98 + ErrorCode SMS_CODE_USED = new ErrorCode(1002013002, "验证码已使用");
  99 + ErrorCode SMS_CODE_NOT_CORRECT = new ErrorCode(1002013004, "验证码不正确");
  100 + ErrorCode SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1002013005, "超过每日短信发送数量");
  101 + ErrorCode SMS_CODE_SEND_TOO_FAST = new ErrorCode(1002013006, "短信发送过于频率");
  102 + ErrorCode SMS_CODE_IS_EXISTS = new ErrorCode(1002013007, "手机号已被使用");
  103 + ErrorCode SMS_CODE_IS_UNUSED = new ErrorCode(1002013008, "验证码未被使用");
  104 +
  105 + // ========== 租户模块 1002014000 ==========
  106 + ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1002014000, "租户不存在");
  107 +
  108 + // ========== 错误码模块 1002015000 ==========
  109 + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002015000, "错误码不存在");
  110 + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002015001, "已经存在编码为【{}】的错误码");
  111 +
  112 + // ========== 社交用户 1002015000 ==========
  113 + ErrorCode SOCIAL_USER_AUTH_FAILURE = new ErrorCode(1002015000, "社交授权失败,原因是:{}");
  114 + ErrorCode SOCIAL_USER_UNBIND_NOT_SELF = new ErrorCode(1002015001, "社交解绑失败,非当前用户绑定");
  115 + ErrorCode SOCIAL_USER_NOT_FOUND = new ErrorCode(1002015001, "社交授权失败,找不到对应的用户");
97 116  
98 117 }
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/SysErrorCodeConstants.java deleted
1   -package cn.iocoder.yudao.module.system.enums;
2   -
3   -import cn.iocoder.yudao.framework.common.exception.ErrorCode;
4   -
5   -/**
6   - * System 错误码枚举类
7   - *
8   - * system 系统,使用 1-006-000-000 段
9   - */
10   -public interface SysErrorCodeConstants {
11   -
12   - // ========== 短信发送 1006000000 ==========
13   - ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1006000000, "手机号不存在");
14   - ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1006000001, "模板参数({})缺失");
15   - ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1006000000, "短信模板不存在");
16   -
17   - // ========== 社交模块 1006002000 ==========
18   - ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1006002000, "社交授权失败,原因是:{}");
19   - ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1006002001, "社交解绑失败,非当前用户绑定");
20   -
21   - // ========== 用户模块 1006003000 ==========
22   - ErrorCode USER_NOT_EXISTS = new ErrorCode(1006003000, "用户不存在");
23   - ErrorCode USER_IS_DISABLE = new ErrorCode(1006003001, "名字为【{}】的用户已被禁用");
24   -
25   - // ========== 部门模块 1006004000 ==========
26   - ErrorCode DEPT_NOT_FOUND = new ErrorCode(1006004000, "当前部门不存在");
27   - ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1006004001, "部门不处于开启状态,不允许选择");
28   -
29   - // ========== 角色模块 1006005000 ==========
30   - ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1006005000, "角色不存在");
31   - ErrorCode ROLE_IS_DISABLE = new ErrorCode(1006005001, "名字为【{}】的角色已被禁用");
32   -
33   - // ========== 岗位模块 1006007000 ==========
34   - ErrorCode POST_NOT_FOUND = new ErrorCode(1006007000, "当前岗位不存在");
35   - ErrorCode POST_NOT_ENABLE = new ErrorCode(1006007001, "岗位({}) 不处于开启状态,不允许选择");
36   -
37   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginLogTypeEnum.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginLogTypeEnum.java
... ... @@ -8,7 +8,7 @@ import lombok.Getter;
8 8 */
9 9 @Getter
10 10 @AllArgsConstructor
11   -public enum SysLoginLogTypeEnum {
  11 +public enum LoginLogTypeEnum {
12 12  
13 13 LOGIN_USERNAME(100), // 使用账号登录
14 14 LOGIN_SOCIAL(101), // 使用社交登录
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/enums/logger/SysLoginResultEnum.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/logger/LoginResultEnum.java
... ... @@ -8,7 +8,7 @@ import lombok.Getter;
8 8 */
9 9 @Getter
10 10 @AllArgsConstructor
11   -public enum SysLoginResultEnum {
  11 +public enum LoginResultEnum {
12 12  
13 13 SUCCESS(0), // 成功
14 14 BAD_CREDENTIALS(10), // 账号或密码不正确
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/enums/sms/SysSmsSceneEnum.java renamed to yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java
1   -package cn.iocoder.yudao.module.member.enums.sms;
  1 +package cn.iocoder.yudao.module.system.enums.sms;
2 2  
  3 +import cn.hutool.core.util.ArrayUtil;
3 4 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 5 import lombok.AllArgsConstructor;
5 6 import lombok.Getter;
... ... @@ -13,42 +14,36 @@ import java.util.Arrays;
13 14 */
14 15 @Getter
15 16 @AllArgsConstructor
16   -public enum SysSmsSceneEnum implements IntArrayValuable {
  17 +public enum SmsSceneEnum implements IntArrayValuable {
17 18  
18   - LOGIN_BY_SMS(1,SysSmsTemplateCodeConstants.USER_SMS_LOGIN, "手机号登陆"),
19   - CHANGE_MOBILE_BY_SMS(2,SysSmsTemplateCodeConstants.USER_SMS_UPDATE_MOBILE, "更换手机号"),
20   - FORGET_MOBILE_BY_SMS(3,SysSmsTemplateCodeConstants.USER_SMS_RESET_PASSWORD, "忘记密码"),
21   - ;
  19 + MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机号登陆"),
  20 + MEMBER_UPDATE_MOBILE(2, "user-sms-reset-password", "会员用户 - 修改手机"),
  21 + MEMBER_FORGET_PASSWORD(3, "user-sms-update-mobile", "会员用户 - 忘记密码");
22 22  
23   - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSmsSceneEnum::getScene).toArray();
  23 + // 如果未来希望管理后台支持手机验证码登陆,可以通过添加 ADMIN_MEMBER_LOGIN 枚举
  24 +
  25 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsSceneEnum::getScene).toArray();
24 26  
25 27 /**
26   - * 验证那场景编号
  28 + * 验证场景的编号
27 29 */
28 30 private final Integer scene;
29   -
30 31 /**
31 32 * 模版编码
32 33 */
33   - private final String code;
34   -
  34 + private final String templateCode;
35 35 /**
36 36 * 描述
37 37 */
38   - private final String name;
  38 + private final String description;
39 39  
40 40 @Override
41 41 public int[] array() {
42 42 return ARRAYS;
43 43 }
44 44  
45   - public static String getCodeByScene(Integer scene){
46   - for (SysSmsSceneEnum value : values()) {
47   - if (value.getScene().equals(scene)){
48   - return value.getCode();
49   - }
50   - }
51   - return null;
  45 + public static SmsSceneEnum getCodeByScene(Integer scene) {
  46 + return ArrayUtil.firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene));
52 47 }
53 48  
54 49 }
... ...
yudao-module-system/yudao-module-system-impl/pom.xml
... ... @@ -23,6 +23,11 @@
23 23 <artifactId>yudao-module-system-api</artifactId>
24 24 <version>${revision}</version>
25 25 </dependency>
  26 + <dependency>
  27 + <groupId>cn.iocoder.boot</groupId>
  28 + <artifactId>yudao-module-member-api</artifactId>
  29 + <version>${revision}</version>
  30 + </dependency>
26 31  
27 32 <!-- 业务组件 -->
28 33 <dependency>
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/auth/UserSessionApiImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.auth;
  2 +
  3 +import cn.iocoder.yudao.framework.security.core.LoginUser;
  4 +import cn.iocoder.yudao.module.system.service.auth.UserSessionService;
  5 +import org.springframework.stereotype.Service;
  6 +import org.springframework.validation.annotation.Validated;
  7 +
  8 +import javax.annotation.Resource;
  9 +
  10 +/**
  11 + * 在线用户 Session API 实现类
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Service
  16 +@Validated
  17 +public class UserSessionApiImpl implements UserSessionApi {
  18 +
  19 + @Resource
  20 + private UserSessionService userSessionService;
  21 +
  22 + @Override
  23 + public String createUserSession(LoginUser loginUser, String userIp, String userAgent) {
  24 + return userSessionService.createUserSession(loginUser, userIp, userAgent);
  25 + }
  26 +
  27 + @Override
  28 + public void refreshUserSession(String sessionId, LoginUser loginUser) {
  29 + userSessionService.refreshUserSession(sessionId, loginUser);
  30 + }
  31 +
  32 + @Override
  33 + public void deleteUserSession(String sessionId) {
  34 + userSessionService.deleteUserSession(sessionId);
  35 + }
  36 +
  37 + @Override
  38 + public LoginUser getLoginUser(String sessionId) {
  39 + return userSessionService.getLoginUser(sessionId);
  40 + }
  41 +
  42 + @Override
  43 + public Long getSessionTimeoutMillis() {
  44 + return userSessionService.getSessionTimeoutMillis();
  45 + }
  46 +
  47 +}
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApiImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger;
  2 +
  3 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
  4 +import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
  5 +import org.springframework.stereotype.Service;
  6 +import org.springframework.validation.annotation.Validated;
  7 +
  8 +import javax.annotation.Resource;
  9 +
  10 +/**
  11 + * 登录日志的 API 实现类
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Service
  16 +@Validated
  17 +public class LoginLogApiImpl implements LoginLogApi {
  18 +
  19 + @Resource
  20 + private LoginLogService loginLogService;
  21 +
  22 + @Override
  23 + public void createLoginLog(LoginLogCreateReqDTO reqDTO) {
  24 + loginLogService.createLoginLog(reqDTO);
  25 + }
  26 +
  27 +}
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api;
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.social;
  2 +
  3 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
  4 +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
  5 +import cn.iocoder.yudao.module.system.service.social.SocialUserService;
  6 +import me.zhyd.oauth.model.AuthUser;
  7 +import org.springframework.stereotype.Service;
  8 +import org.springframework.validation.annotation.Validated;
  9 +
  10 +import javax.annotation.Resource;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  13 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND;
  14 +
  15 +/**
  16 + * 社交用户的 API 实现类
  17 + *
  18 + * @author 芋道源码
  19 + */
  20 +@Service
  21 +@Validated
  22 +public class SocialUserApiImpl implements SocialUserApi {
  23 +
  24 + @Resource
  25 + private SocialUserService socialUserService;
  26 +
  27 + @Override
  28 + public String getAuthorizeUrl(Integer type, String redirectUri) {
  29 + return socialUserService.getAuthorizeUrl(type, redirectUri);
  30 + }
  31 +
  32 + @Override
  33 + public void bindSocialUser(SocialUserBindReqDTO reqDTO) {
  34 + // 使用 code 授权
  35 + AuthUser authUser = socialUserService.getAuthUser(reqDTO.getType(), reqDTO.getCode(),
  36 + reqDTO.getState());
  37 + if (authUser == null) {
  38 + throw exception(SOCIAL_USER_NOT_FOUND);
  39 + }
  40 +
  41 + // 绑定社交用户(新增)
  42 + socialUserService.bindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(),
  43 + reqDTO.getType(), authUser);
  44 + }
  45 +
  46 + @Override
  47 + public void unbindSocialUser(SocialUserUnbindReqDTO reqDTO) {
  48 + socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(),
  49 + reqDTO.getType(), reqDTO.getUnionId());
  50 + }
  51 +
  52 + @Override
  53 + public void checkSocialUser(Integer type, String code, String state) {
  54 + AuthUser authUser = socialUserService.getAuthUser(type, code, state);
  55 + if (authUser == null) {
  56 + throw exception(SOCIAL_USER_NOT_FOUND);
  57 + }
  58 + }
  59 +
  60 + @Override
  61 + public Long getBindUserId(Integer userType, Integer type, String code, String state) {
  62 + AuthUser authUser = socialUserService.getAuthUser(type, code, state);
  63 + if (authUser == null) {
  64 + throw exception(SOCIAL_USER_NOT_FOUND);
  65 + }
  66 +
  67 + //
  68 + return null;
  69 + }
  70 +
  71 +}
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
1 1 package cn.iocoder.yudao.module.system.controller.admin.auth;
2 2  
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  5 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
  7 +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
3 8 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*;
4 9 import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
5 10 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
6   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  11 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
  12 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
7 13 import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum;
8   -import cn.iocoder.yudao.module.system.service.auth.AuthService;
  14 +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
9 15 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
10 16 import cn.iocoder.yudao.module.system.service.permission.RoleService;
11   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
12 17 import cn.iocoder.yudao.module.system.service.social.SocialUserService;
13   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
14   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
15   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16   -import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
17   -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
18   -import cn.iocoder.yudao.module.system.service.user.UserService;
  18 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
19 19 import io.swagger.annotations.Api;
20 20 import io.swagger.annotations.ApiImplicitParam;
21 21 import io.swagger.annotations.ApiImplicitParams;
22 22 import io.swagger.annotations.ApiOperation;
23 23 import lombok.extern.slf4j.Slf4j;
24   -import org.springframework.beans.factory.annotation.Autowired;
25 24 import org.springframework.validation.annotation.Validated;
26 25 import org.springframework.web.bind.annotation.*;
27 26  
... ... @@ -42,12 +41,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
42 41 @Slf4j
43 42 public class AuthController {
44 43  
45   - @Autowired
46   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // AuthService 存在重名
47   - private AuthService authService;
48   - @Autowired
49   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
50   - private UserService userService;
  44 + @Resource
  45 + private AdminAuthService authService;
  46 + @Resource
  47 + private AdminUserService userService;
51 48 @Resource
52 49 private RoleService roleService;
53 50 @Resource
... ... @@ -68,12 +65,12 @@ public class AuthController {
68 65 @ApiOperation("获取登录用户的权限信息")
69 66 public CommonResult<AuthPermissionInfoRespVO> getPermissionInfo() {
70 67 // 获得用户信息
71   - UserDO user = userService.getUser(getLoginUserId());
  68 + AdminUserDO user = userService.getUser(getLoginUserId());
72 69 if (user == null) {
73 70 return null;
74 71 }
75 72 // 获得角色列表
76   - List<SysRoleDO> roleList = roleService.getRolesFromCache(getLoginUserRoleIds());
  73 + List<RoleDO> roleList = roleService.getRolesFromCache(getLoginUserRoleIds());
77 74 // 获得菜单列表
78 75 List<MenuDO> menuList = permissionService.getRoleMenusFromCache(
79 76 getLoginUserRoleIds(), // 注意,基于登录的角色,因为后续的权限判断也是基于它
... ... @@ -136,7 +133,7 @@ public class AuthController {
136 133 @DeleteMapping("/social-unbind")
137 134 @ApiOperation("取消社交绑定")
138 135 public CommonResult<Boolean> socialUnbind(@RequestBody AuthSocialUnbindReqVO reqVO) {
139   - socialCoreService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN);
  136 + socialCoreService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getUnionId());
140 137 return CommonResult.success(true);
141 138 }
142 139  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/UserSessionController.java
... ... @@ -6,16 +6,15 @@ import cn.iocoder.yudao.module.system.convert.auth.UserSessionConvert;
6 6 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
7 7 import cn.iocoder.yudao.module.system.service.auth.UserSessionService;
8 8 import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO;
9   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
10   -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
11 10 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
12 11 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 12 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
14   -import cn.iocoder.yudao.module.system.service.user.UserService;
  13 +import cn.iocoder.yudao.module.system.service.dept.DeptService;
  14 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
15 15 import io.swagger.annotations.Api;
16 16 import io.swagger.annotations.ApiImplicitParam;
17 17 import io.swagger.annotations.ApiOperation;
18   -import org.springframework.beans.factory.annotation.Autowired;
19 18 import org.springframework.security.access.prepost.PreAuthorize;
20 19 import org.springframework.validation.annotation.Validated;
21 20 import org.springframework.web.bind.annotation.*;
... ... @@ -35,12 +34,11 @@ public class UserSessionController {
35 34  
36 35 @Resource
37 36 private UserSessionService userSessionService;
38   - @Autowired
39   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
40   - private UserService userService;
  37 + @Resource
  38 + private AdminUserService userService;
41 39  
42 40 @Resource
43   - private SysDeptCoreService deptCoreService;
  41 + private DeptService deptService;
44 42  
45 43 @GetMapping("/page")
46 44 @ApiOperation("获得 Session 分页列表")
... ... @@ -50,10 +48,10 @@ public class UserSessionController {
50 48 PageResult<SysUserSessionDO> pageResult = userSessionService.getUserSessionPage(reqVO);
51 49  
52 50 // 获得拼接需要的数据
53   - Map<Long, UserDO> userMap = userService.getUserMap(
  51 + Map<Long, AdminUserDO> userMap = userService.getUserMap(
54 52 convertList(pageResult.getList(), SysUserSessionDO::getUserId));
55   - Map<Long, SysDeptDO> deptMap = deptCoreService.getDeptMap(
56   - convertList(userMap.values(), UserDO::getDeptId));
  53 + Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(
  54 + convertList(userMap.values(), AdminUserDO::getDeptId));
57 55 // 拼接结果返回
58 56 List<UserSessionPageItemRespVO> sessionList = new ArrayList<>(pageResult.getList().size());
59 57 pageResult.getList().forEach(session -> {
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
1 1 package cn.iocoder.yudao.module.system.controller.admin.dept;
2 2  
3   -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService;
4 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 5 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.*;
... ... @@ -30,9 +29,6 @@ public class DeptController {
30 29 @Resource
31 30 private DeptService deptService;
32 31  
33   - @Resource
34   - private SysDeptCoreService deptCoreService;
35   -
36 32 @PostMapping("create")
37 33 @ApiOperation("创建部门")
38 34 @PreAuthorize("@ss.hasPermission('system:dept:create')")
... ... @@ -84,7 +80,7 @@ public class DeptController {
84 80 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
85 81 @PreAuthorize("@ss.hasPermission('system:dept:query')")
86 82 public CommonResult<DeptRespVO> getDept(@RequestParam("id") Long id) {
87   - return success(DeptConvert.INSTANCE.convert(deptCoreService.getDept(id)));
  83 + return success(DeptConvert.INSTANCE.convert(deptService.getDept(id)));
88 84 }
89 85  
90 86 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java
... ... @@ -6,18 +6,17 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper
6 6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
7 7 import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
8 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
9 10 import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
10   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
11 11 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
12 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 13 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
14 14 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
15 15 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
16 16 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
17   -import cn.iocoder.yudao.module.system.service.user.UserService;
  17 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
18 18 import io.swagger.annotations.Api;
19 19 import io.swagger.annotations.ApiOperation;
20   -import org.springframework.beans.factory.annotation.Autowired;
21 20 import org.springframework.security.access.prepost.PreAuthorize;
22 21 import org.springframework.validation.annotation.Validated;
23 22 import org.springframework.web.bind.annotation.GetMapping;
... ... @@ -44,9 +43,8 @@ public class OperateLogController {
44 43  
45 44 @Resource
46 45 private OperateLogService operateLogService;
47   - @Autowired
48   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
49   - private UserService userService;
  46 + @Resource
  47 + private AdminUserService userService;
50 48  
51 49 @GetMapping("/page")
52 50 @ApiOperation("查看操作日志分页列表")
... ... @@ -56,7 +54,7 @@ public class OperateLogController {
56 54  
57 55 // 获得拼接需要的数据
58 56 Collection<Long> userIds = CollectionUtils.convertList(pageResult.getList(), OperateLogDO::getUserId);
59   - Map<Long, UserDO> userMap = userService.getUserMap(userIds);
  57 + Map<Long, AdminUserDO> userMap = userService.getUserMap(userIds);
60 58 // 拼接数据
61 59 List<OperateLogRespVO> list = new ArrayList<>(pageResult.getList().size());
62 60 pageResult.getList().forEach(operateLog -> {
... ... @@ -77,7 +75,7 @@ public class OperateLogController {
77 75  
78 76 // 获得拼接需要的数据
79 77 Collection<Long> userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId);
80   - Map<Long, UserDO> userMap = userService.getUserMap(userIds);
  78 + Map<Long, AdminUserDO> userMap = userService.getUserMap(userIds);
81 79 // 拼接数据
82 80 List<OperateLogExcelVO> excelDataList = OperateLogConvert.INSTANCE.convertList(list, userMap);
83 81 // 输出
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.java
... ... @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
7 7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
8 8 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
9 9 import cn.iocoder.yudao.module.system.convert.permission.RoleConvert;
10   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  10 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
11 11 import cn.iocoder.yudao.module.system.service.permission.RoleService;
12 12 import io.swagger.annotations.Api;
13 13 import io.swagger.annotations.ApiImplicitParam;
... ... @@ -72,14 +72,14 @@ public class RoleController {
72 72 @ApiOperation("获得角色信息")
73 73 @PreAuthorize("@ss.hasPermission('system:role:query')")
74 74 public CommonResult<RoleRespVO> getRole(@RequestParam("id") Long id) {
75   - SysRoleDO role = roleService.getRole(id);
  75 + RoleDO role = roleService.getRole(id);
76 76 return success(RoleConvert.INSTANCE.convert(role));
77 77 }
78 78  
79 79 @GetMapping("/page")
80 80 @ApiOperation("获得角色分页")
81 81 @PreAuthorize("@ss.hasPermission('system:role:query')")
82   - public CommonResult<PageResult<SysRoleDO>> getRolePage(RolePageReqVO reqVO) {
  82 + public CommonResult<PageResult<RoleDO>> getRolePage(RolePageReqVO reqVO) {
83 83 return success(roleService.getRolePage(reqVO));
84 84 }
85 85  
... ... @@ -87,9 +87,9 @@ public class RoleController {
87 87 @ApiOperation(value = "获取角色精简信息列表", notes = "只包含被开启的角色,主要用于前端的下拉选项")
88 88 public CommonResult<List<RoleSimpleRespVO>> getSimpleRoles() {
89 89 // 获得角色列表,只要开启状态的
90   - List<SysRoleDO> list = roleService.getRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
  90 + List<RoleDO> list = roleService.getRoles(Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
91 91 // 排序后,返回个诶前端
92   - list.sort(Comparator.comparing(SysRoleDO::getSort));
  92 + list.sort(Comparator.comparing(RoleDO::getSort));
93 93 return success(RoleConvert.INSTANCE.convertList02(list));
94 94 }
95 95  
... ... @@ -97,7 +97,7 @@ public class RoleController {
97 97 @OperateLog(type = EXPORT)
98 98 @PreAuthorize("@ss.hasPermission('system:role:export')")
99 99 public void export(HttpServletResponse response, @Validated RoleExportReqVO reqVO) throws IOException {
100   - List<SysRoleDO> list = roleService.getRoleList(reqVO);
  100 + List<RoleDO> list = roleService.getRoleList(reqVO);
101 101 List<RoleExcelVO> data = RoleConvert.INSTANCE.convertList03(list);
102 102 // 输出
103 103 ExcelUtils.write(response, "角色数据.xls", "角色列表", RoleExcelVO.class, data);
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsCallbackController.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.sms;
2 2  
3 3 import cn.hutool.core.util.URLUtil;
4 4 import cn.hutool.extra.servlet.ServletUtil;
5   -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService;
  5 +import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
6 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7 7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
8 8 import cn.iocoder.yudao.framework.sms.core.enums.SmsChannelEnum;
... ... @@ -25,7 +25,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
25 25 public class SmsCallbackController {
26 26  
27 27 @Resource
28   - private SysSmsSendService smsCoreService;
  28 + private SmsSendService smsCoreService;
29 29  
30 30 @PostMapping("/sms/yunpian")
31 31 @ApiOperation(value = "云片短信的回调", notes = "参见 https://www.yunpian.com/official/document/sms/zh_cn/domestic_push_report 文档")
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.java
... ... @@ -4,7 +4,7 @@ import cn.iocoder.yudao.module.system.controller.admin.sms.vo.template.*;
4 4 import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert;
5 5 import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService;
6 6 import cn.iocoder.yudao.module.system.dal.dataobject.sms.SysSmsTemplateDO;
7   -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService;
  7 +import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
8 8 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
9 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
10 10 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
... ... @@ -32,7 +32,7 @@ public class SmsTemplateController {
32 32 @Resource
33 33 private SmsTemplateService smsTemplateService;
34 34 @Resource
35   - private SysSmsSendService smsCoreService;
  35 + private SmsSendService smsCoreService;
36 36  
37 37 @PostMapping("/create")
38 38 @ApiOperation("创建短信模板")
... ... @@ -91,7 +91,7 @@ public class SmsTemplateController {
91 91 @ApiOperation("发送短信")
92 92 @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')")
93 93 public CommonResult<Long> sendSms(@Valid @RequestBody SmsTemplateSendReqVO sendReqVO) {
94   - return success(smsCoreService.sendSingleSms(sendReqVO.getMobile(), null, null,
  94 + return success(smsCoreService.sendSingleSmsToAdmin(sendReqVO.getMobile(), null,
95 95 sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
96 96 }
97 97  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
... ... @@ -4,10 +4,10 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
5 5 import cn.iocoder.yudao.module.system.convert.user.UserConvert;
6 6 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
7   -import cn.iocoder.yudao.module.system.service.user.UserService;
8   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  7 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
  8 +import cn.iocoder.yudao.module.system.service.dept.DeptService;
  9 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
9 10 import cn.iocoder.yudao.module.system.enums.common.SysSexEnum;
10   -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService;
11 11 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
12 12 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
13 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
... ... @@ -18,7 +18,6 @@ import io.swagger.annotations.Api;
18 18 import io.swagger.annotations.ApiImplicitParam;
19 19 import io.swagger.annotations.ApiImplicitParams;
20 20 import io.swagger.annotations.ApiOperation;
21   -import org.springframework.beans.factory.annotation.Autowired;
22 21 import org.springframework.security.access.prepost.PreAuthorize;
23 22 import org.springframework.validation.annotation.Validated;
24 23 import org.springframework.web.bind.annotation.*;
... ... @@ -41,11 +40,10 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
41 40 @Validated
42 41 public class UserController {
43 42  
44   - @Autowired
45   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
46   - private UserService userService;
47 43 @Resource
48   - private SysDeptCoreService deptCoreService;
  44 + private AdminUserService userService;
  45 + @Resource
  46 + private DeptService deptService;
49 47  
50 48 @PostMapping("/create")
51 49 @ApiOperation("新增用户")
... ... @@ -93,14 +91,14 @@ public class UserController {
93 91 @PreAuthorize("@ss.hasPermission('system:user:list')")
94 92 public CommonResult<PageResult<UserPageItemRespVO>> getUserPage(@Valid UserPageReqVO reqVO) {
95 93 // 获得用户分页列表
96   - PageResult<UserDO> pageResult = userService.getUserPage(reqVO);
  94 + PageResult<AdminUserDO> pageResult = userService.getUserPage(reqVO);
97 95 if (CollUtil.isEmpty(pageResult.getList())) {
98 96 return success(new PageResult<>(pageResult.getTotal())); // 返回空
99 97 }
100 98  
101 99 // 获得拼接需要的数据
102   - Collection<Long> deptIds = convertList(pageResult.getList(), UserDO::getDeptId);
103   - Map<Long, SysDeptDO> deptMap = deptCoreService.getDeptMap(deptIds);
  100 + Collection<Long> deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId);
  101 + Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds);
104 102 // 拼接结果返回
105 103 List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size());
106 104 pageResult.getList().forEach(user -> {
... ... @@ -115,7 +113,7 @@ public class UserController {
115 113 @ApiOperation(value = "获取用户精简信息列表", notes = "只包含被开启的用户,主要用于前端的下拉选项")
116 114 public CommonResult<List<UserSimpleRespVO>> getSimpleUsers() {
117 115 // 获用户门列表,只要开启状态的
118   - List<UserDO> list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus());
  116 + List<AdminUserDO> list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus());
119 117 // 排序后,返回给前端
120 118 return success(UserConvert.INSTANCE.convertList04(list));
121 119 }
... ... @@ -135,12 +133,12 @@ public class UserController {
135 133 public void exportUsers(@Validated UserExportReqVO reqVO,
136 134 HttpServletResponse response) throws IOException {
137 135 // 获得用户列表
138   - List<UserDO> users = userService.getUsers(reqVO);
  136 + List<AdminUserDO> users = userService.getUsers(reqVO);
139 137  
140 138 // 获得拼接需要的数据
141   - Collection<Long> deptIds = convertList(users, UserDO::getDeptId);
142   - Map<Long, SysDeptDO> deptMap = deptCoreService.getDeptMap(deptIds);
143   - Map<Long, UserDO> deptLeaderUserMap = userService.getUserMap(
  139 + Collection<Long> deptIds = convertList(users, AdminUserDO::getDeptId);
  140 + Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds);
  141 + Map<Long, AdminUserDO> deptLeaderUserMap = userService.getUserMap(
144 142 convertSet(deptMap.values(), SysDeptDO::getLeaderUserId));
145 143 // 拼接数据
146 144 List<UserExcelVO> excelUsers = new ArrayList<>(users.size());
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java
... ... @@ -5,16 +5,16 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi
5 5 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
6 6 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
7 7 import cn.iocoder.yudao.module.system.convert.user.UserConvert;
  8 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
  9 +import cn.iocoder.yudao.module.system.service.dept.DeptService;
8 10 import cn.iocoder.yudao.module.system.service.dept.PostService;
9 11 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
10 12 import cn.iocoder.yudao.module.system.service.permission.RoleService;
11   -import cn.iocoder.yudao.module.system.service.user.UserService;
  13 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
12 14 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
13 15 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO;
14   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  16 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
15 17 import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO;
16   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
17   -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService;
18 18 import cn.iocoder.yudao.module.system.service.social.SocialUserService;
19 19 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
20 20 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
... ... @@ -22,7 +22,6 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
22 22 import io.swagger.annotations.Api;
23 23 import io.swagger.annotations.ApiOperation;
24 24 import lombok.extern.slf4j.Slf4j;
25   -import org.springframework.beans.factory.annotation.Autowired;
26 25 import org.springframework.validation.annotation.Validated;
27 26 import org.springframework.web.bind.annotation.*;
28 27 import org.springframework.web.multipart.MultipartFile;
... ... @@ -43,11 +42,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
43 42 @Slf4j
44 43 public class UserProfileController {
45 44  
46   - @Autowired
47   - @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
48   - private UserService userService;
49 45 @Resource
50   - private SysDeptCoreService deptCoreService;
  46 + private AdminUserService userService;
  47 + @Resource
  48 + private DeptService deptService;
51 49  
52 50 @Resource
53 51 private PostService postService;
... ... @@ -62,14 +60,14 @@ public class UserProfileController {
62 60 @ApiOperation("获得登录用户信息")
63 61 public CommonResult<UserProfileRespVO> profile() {
64 62 // 获得用户基本信息
65   - UserDO user = userService.getUser(getLoginUserId());
  63 + AdminUserDO user = userService.getUser(getLoginUserId());
66 64 UserProfileRespVO resp = UserConvert.INSTANCE.convert03(user);
67 65 // 获得用户角色
68   - List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
  66 + List<RoleDO> userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
69 67 resp.setRoles(UserConvert.INSTANCE.convertList(userRoles));
70 68 // 获得部门信息
71 69 if (user.getDeptId() != null) {
72   - SysDeptDO dept = deptCoreService.getDept(user.getDeptId());
  70 + SysDeptDO dept = deptService.getDept(user.getDeptId());
73 71 resp.setDept(UserConvert.INSTANCE.convert02(dept));
74 72 }
75 73 // 获得岗位信息
... ... @@ -78,7 +76,7 @@ public class UserProfileController {
78 76 resp.setPosts(UserConvert.INSTANCE.convertList02(posts));
79 77 }
80 78 // 获得社交用户信息
81   - List<SysSocialUserDO> socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN);
  79 + List<SysSocialUserDO> socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue());
82 80 resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers));
83 81 return success(resp);
84 82 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java
... ... @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.system.convert.auth;
3 3 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthMenuRespVO;
4 4 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthPermissionInfoRespVO;
5 5 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
6   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  6 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
  7 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
7 8 import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum;
8   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
9 9 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
10 10 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
11 11 import cn.iocoder.yudao.framework.security.core.LoginUser;
... ... @@ -22,17 +22,17 @@ public interface AuthConvert {
22 22 AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class);
23 23  
24 24 @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略
25   - LoginUser convert0(UserDO bean);
  25 + LoginUser convert0(AdminUserDO bean);
26 26  
27   - default LoginUser convert(UserDO bean) {
  27 + default LoginUser convert(AdminUserDO bean) {
28 28 // 目的,为了设置 UserTypeEnum.ADMIN.getValue()
29 29 return convert0(bean).setUserType(UserTypeEnum.ADMIN.getValue());
30 30 }
31 31  
32   - default AuthPermissionInfoRespVO convert(UserDO user, List<SysRoleDO> roleList, List<MenuDO> menuList) {
  32 + default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList) {
33 33 return AuthPermissionInfoRespVO.builder()
34 34 .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build())
35   - .roles(CollectionUtils.convertSet(roleList, SysRoleDO::getCode))
  35 + .roles(CollectionUtils.convertSet(roleList, RoleDO::getCode))
36 36 .permissions(CollectionUtils.convertSet(menuList, MenuDO::getPermission))
37 37 .build();
38 38 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.system.convert.logger;
3 3 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExcelVO;
4 4 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO;
5 5 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
6   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  6 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
7 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
9 9 import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
... ... @@ -27,7 +27,7 @@ public interface OperateLogConvert {
27 27  
28 28 OperateLogRespVO convert(OperateLogDO bean);
29 29  
30   - default List<OperateLogExcelVO> convertList(List<OperateLogDO> list, Map<Long, UserDO> userMap) {
  30 + default List<OperateLogExcelVO> convertList(List<OperateLogDO> list, Map<Long, AdminUserDO> userMap) {
31 31 return list.stream().map(operateLog -> {
32 32 OperateLogExcelVO excelVO = convert02(operateLog);
33 33 MapUtils.findAndThen(userMap, operateLog.getId(), user -> excelVO.setUserNickname(user.getNickname()));
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/logger/SysLoginLogCoreConvert.java
1 1 package cn.iocoder.yudao.module.system.convert.logger;
2 2  
3 3 import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO;
4   -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO;
  4 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
5 5 import org.mapstruct.Mapper;
6 6 import org.mapstruct.factory.Mappers;
7 7  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/permission/RoleConvert.java
1 1 package cn.iocoder.yudao.module.system.convert.permission;
2 2  
3 3 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  4 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
5 5 import org.mapstruct.Mapper;
6 6 import org.mapstruct.factory.Mappers;
7 7  
... ... @@ -12,14 +12,14 @@ public interface RoleConvert {
12 12  
13 13 RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class);
14 14  
15   - SysRoleDO convert(RoleUpdateReqVO bean);
  15 + RoleDO convert(RoleUpdateReqVO bean);
16 16  
17   - RoleRespVO convert(SysRoleDO bean);
  17 + RoleRespVO convert(RoleDO bean);
18 18  
19   - SysRoleDO convert(RoleCreateReqVO bean);
  19 + RoleDO convert(RoleCreateReqVO bean);
20 20  
21   - List<RoleSimpleRespVO> convertList02(List<SysRoleDO> list);
  21 + List<RoleSimpleRespVO> convertList02(List<RoleDO> list);
22 22  
23   - List<RoleExcelVO> convertList03(List<SysRoleDO> list);
  23 + List<RoleExcelVO> convertList03(List<RoleDO> list);
24 24  
25 25 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java
... ... @@ -6,9 +6,9 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi
6 6 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
7 7 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
8 8 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO;
9   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
10 10 import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO;
11   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  11 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
12 12 import org.mapstruct.Mapper;
13 13 import org.mapstruct.factory.Mappers;
14 14  
... ... @@ -19,31 +19,31 @@ public interface UserConvert {
19 19  
20 20 UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
21 21  
22   - UserPageItemRespVO convert(UserDO bean);
  22 + UserPageItemRespVO convert(AdminUserDO bean);
23 23  
24 24 UserPageItemRespVO.Dept convert(SysDeptDO bean);
25 25  
26   - UserDO convert(UserCreateReqVO bean);
  26 + AdminUserDO convert(UserCreateReqVO bean);
27 27  
28   - UserDO convert(UserUpdateReqVO bean);
  28 + AdminUserDO convert(UserUpdateReqVO bean);
29 29  
30   - UserExcelVO convert02(UserDO bean);
  30 + UserExcelVO convert02(AdminUserDO bean);
31 31  
32   - UserDO convert(UserImportExcelVO bean);
  32 + AdminUserDO convert(UserImportExcelVO bean);
33 33  
34   - UserProfileRespVO convert03(UserDO bean);
  34 + UserProfileRespVO convert03(AdminUserDO bean);
35 35  
36   - List<UserProfileRespVO.Role> convertList(List<SysRoleDO> list);
  36 + List<UserProfileRespVO.Role> convertList(List<RoleDO> list);
37 37  
38 38 UserProfileRespVO.Dept convert02(SysDeptDO bean);
39 39  
40   - UserDO convert(UserProfileUpdateReqVO bean);
  40 + AdminUserDO convert(UserProfileUpdateReqVO bean);
41 41  
42   - UserDO convert(UserProfileUpdatePasswordReqVO bean);
  42 + AdminUserDO convert(UserProfileUpdatePasswordReqVO bean);
43 43  
44 44 List<UserProfileRespVO.Post> convertList02(List<SysPostDO> list);
45 45  
46 46 List<UserProfileRespVO.SocialUser> convertList03(List<SysSocialUserDO> list);
47 47  
48   - List<UserSimpleRespVO> convertList04(List<UserDO> list);
  48 + List<UserSimpleRespVO> convertList04(List<AdminUserDO> list);
49 49 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/SysDeptDO.java
1 1 package cn.iocoder.yudao.module.system.dal.dataobject.dept;
2 2  
3   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  3 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
4 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 5 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
6 6 import com.baomidou.mybatisplus.annotation.TableId;
... ... @@ -41,7 +41,7 @@ public class SysDeptDO extends TenantBaseDO {
41 41 /**
42 42 * 负责人
43 43 *
44   - * 关联 {@link UserDO#getId()}
  44 + * 关联 {@link AdminUserDO#getId()}
45 45 */
46 46 private Long leaderUserId;
47 47 /**
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/OperateLogDO.java
1 1 package cn.iocoder.yudao.module.system.dal.dataobject.logger;
2 2  
3   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  3 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
6 6 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
... ... @@ -48,7 +48,7 @@ public class OperateLogDO extends TenantBaseDO {
48 48 /**
49 49 * 用户编号
50 50 *
51   - * {@link UserDO#getId()}
  51 + * {@link AdminUserDO#getId()}
52 52 */
53 53 private Long userId;
54 54 /**
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/logger/SysLoginLogDO.java
... ... @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.system.dal.dataobject.logger;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import cn.iocoder.yudao.module.system.enums.logger.SysLoginLogTypeEnum;
6   -import cn.iocoder.yudao.module.system.enums.logger.SysLoginResultEnum;
  5 +import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
  6 +import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
7 7 import com.baomidou.mybatisplus.annotation.TableName;
8 8 import lombok.Data;
9 9 import lombok.EqualsAndHashCode;
... ... @@ -29,7 +29,7 @@ public class SysLoginLogDO extends BaseDO {
29 29 /**
30 30 * 日志类型
31 31 *
32   - * 枚举 {@link SysLoginLogTypeEnum}
  32 + * 枚举 {@link LoginLogTypeEnum}
33 33 */
34 34 private Integer logType;
35 35 /**
... ... @@ -55,7 +55,7 @@ public class SysLoginLogDO extends BaseDO {
55 55 /**
56 56 * 登录结果
57 57 *
58   - * 枚举 {@link SysLoginResultEnum}
  58 + * 枚举 {@link LoginResultEnum}
59 59 */
60 60 private Integer result;
61 61 /**
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysRoleDO.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/RoleDO.java
... ... @@ -17,10 +17,10 @@ import java.util.Set;
17 17 *
18 18 * @author ruoyi
19 19 */
20   -@TableName(value = "sys_role", autoResultMap = true)
  20 +@TableName(value = "system_role", autoResultMap = true)
21 21 @Data
22 22 @EqualsAndHashCode(callSuper = true)
23   -public class SysRoleDO extends BaseDO {
  23 +public class RoleDO extends BaseDO {
24 24  
25 25 /**
26 26 * 角色ID
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/SysUserRoleDO.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/UserRoleDO.java
... ... @@ -11,10 +11,10 @@ import lombok.EqualsAndHashCode;
11 11 *
12 12 * @author ruoyi
13 13 */
14   -@TableName("sys_user_role")
  14 +@TableName("system_user_role")
15 15 @Data
16 16 @EqualsAndHashCode(callSuper = true)
17   -public class SysUserRoleDO extends BaseDO {
  17 +public class UserRoleDO extends BaseDO {
18 18  
19 19 /**
20 20 * 自增主键
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/sms/SysSmsCodeDO.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java
1   -package cn.iocoder.yudao.module.member.dal.dataobject.sms;
  1 +package cn.iocoder.yudao.module.system.dal.dataobject.sms;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -13,13 +13,13 @@ import java.util.Date;
13 13 *
14 14 * @author 芋道源码
15 15 */
16   -@TableName("sys_sms_code")
  16 +@TableName("system_sms_code")
17 17 @Data
18 18 @EqualsAndHashCode(callSuper = true)
19 19 @Builder
20 20 @NoArgsConstructor
21 21 @AllArgsConstructor
22   -public class SysSmsCodeDO extends BaseDO {
  22 +public class SmsCodeDO extends BaseDO {
23 23  
24 24 /**
25 25 * 编号
... ... @@ -36,7 +36,7 @@ public class SysSmsCodeDO extends BaseDO {
36 36 /**
37 37 * 发送场景
38 38 *
39   - * 枚举 {@link SysSmsCodeDO}
  39 + * 枚举 {@link SmsCodeDO}
40 40 */
41 41 private Integer scene;
42 42 /**
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/social/SysSocialUserDO.java
1 1 package cn.iocoder.yudao.module.system.dal.dataobject.social;
2 2  
3   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  3 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
4 4 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
5 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6 6 import com.baomidou.mybatisplus.annotation.TableId;
... ... @@ -9,7 +9,7 @@ import lombok.*;
9 9  
10 10 /**
11 11 * 社交用户
12   - * 通过 {@link SysSocialUserDO#getUserId()} 关联到对应的 {@link UserDO}
  12 + * 通过 {@link SysSocialUserDO#getUserId()} 关联到对应的 {@link AdminUserDO}
13 13 *
14 14 * @author weir
15 15 */
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDO.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
... ... @@ -24,7 +24,7 @@ import java.util.Set;
24 24 @Builder
25 25 @NoArgsConstructor
26 26 @AllArgsConstructor
27   -public class UserDO extends TenantBaseDO {
  27 +public class AdminUserDO extends TenantBaseDO {
28 28  
29 29 /**
30 30 * 用户ID
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysMenuMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java
... ... @@ -12,7 +12,7 @@ import java.util.Date;
12 12 import java.util.List;
13 13  
14 14 @Mapper
15   -public interface SysMenuMapper extends BaseMapperX<MenuDO> {
  15 +public interface MenuMapper extends BaseMapperX<MenuDO> {
16 16  
17 17 default MenuDO selectByParentIdAndName(Long parentId, String name) {
18 18 return selectOne(new LambdaQueryWrapper<MenuDO>().eq(MenuDO::getParentId, parentId)
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java
... ... @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6 6 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
7 7 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
8   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  8 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11 import org.springframework.lang.Nullable;
... ... @@ -15,36 +15,36 @@ import java.util.Date;
15 15 import java.util.List;
16 16  
17 17 @Mapper
18   -public interface SysRoleMapper extends BaseMapperX<SysRoleDO> {
  18 +public interface RoleMapper extends BaseMapperX<RoleDO> {
19 19  
20   - default PageResult<SysRoleDO> selectPage(RolePageReqVO reqVO) {
21   - return selectPage(reqVO, new QueryWrapperX<SysRoleDO>().likeIfPresent("name", reqVO.getName())
  20 + default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
  21 + return selectPage(reqVO, new QueryWrapperX<RoleDO>().likeIfPresent("name", reqVO.getName())
22 22 .likeIfPresent("code", reqVO.getCode())
23 23 .eqIfPresent("status", reqVO.getStatus())
24 24 .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));
25 25 }
26 26  
27   - default List<SysRoleDO> listRoles(RoleExportReqVO reqVO) {
28   - return selectList(new QueryWrapperX<SysRoleDO>().likeIfPresent("name", reqVO.getName())
  27 + default List<RoleDO> listRoles(RoleExportReqVO reqVO) {
  28 + return selectList(new QueryWrapperX<RoleDO>().likeIfPresent("name", reqVO.getName())
29 29 .likeIfPresent("code", reqVO.getCode())
30 30 .eqIfPresent("status", reqVO.getStatus())
31 31 .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()));
32 32 }
33 33  
34   - default SysRoleDO selectByName(String name) {
35   - return selectOne(new QueryWrapperX<SysRoleDO>().eq("name", name));
  34 + default RoleDO selectByName(String name) {
  35 + return selectOne(new QueryWrapperX<RoleDO>().eq("name", name));
36 36 }
37 37  
38   - default SysRoleDO selectByCode(String code) {
39   - return selectOne(new QueryWrapperX<SysRoleDO>().eq("code", code));
  38 + default RoleDO selectByCode(String code) {
  39 + return selectOne(new QueryWrapperX<RoleDO>().eq("code", code));
40 40 }
41 41  
42   - default List<SysRoleDO> selectListByStatus(@Nullable Collection<Integer> statuses) {
43   - return selectList(new QueryWrapperX<SysRoleDO>().in("status", statuses));
  42 + default List<RoleDO> selectListByStatus(@Nullable Collection<Integer> statuses) {
  43 + return selectList(new QueryWrapperX<RoleDO>().in("status", statuses));
44 44 }
45 45  
46 46 default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {
47   - return selectOne(new QueryWrapper<SysRoleDO>().select("id")
  47 + return selectOne(new QueryWrapper<RoleDO>().select("id")
48 48 .gt("update_time", maxUpdateTime).last("LIMIT 1")) != null;
49 49 }
50 50  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleMenuMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMenuMapper.java
... ... @@ -12,7 +12,7 @@ import java.util.List;
12 12 import java.util.stream.Collectors;
13 13  
14 14 @Mapper
15   -public interface SysRoleMenuMapper extends BaseMapperX<RoleMenuDO> {
  15 +public interface RoleMenuMapper extends BaseMapperX<RoleMenuDO> {
16 16  
17 17 default List<RoleMenuDO> selectListByRoleId(Long roleId) {
18 18 return selectList(new QueryWrapper<RoleMenuDO>().eq("role_id", roleId));
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysRoleCoreMapper.java deleted
1   -package cn.iocoder.yudao.module.system.dal.mysql.permission;
2   -
3   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
4   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5   -import org.apache.ibatis.annotations.Mapper;
6   -
7   -@Mapper
8   -public interface SysRoleCoreMapper extends BaseMapperX<SysRoleDO> {
9   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleCoreMapper.java deleted
1   -package cn.iocoder.yudao.module.system.dal.mysql.permission;
2   -
3   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO;
4   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5   -import org.apache.ibatis.annotations.Mapper;
6   -
7   -import java.util.Collection;
8   -import java.util.List;
9   -
10   -@Mapper
11   -public interface SysUserRoleCoreMapper extends BaseMapperX<SysUserRoleDO> {
12   -
13   - default List<SysUserRoleDO> selectListByRoleIds(Collection<Long> roleIds) {
14   - return selectList(SysUserRoleDO::getRoleId, roleIds);
15   - }
16   -
17   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/SysUserRoleMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/UserRoleMapper.java
1 1 package cn.iocoder.yudao.module.system.dal.mysql.permission;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO;
  4 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
5 5 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 6 import org.apache.ibatis.annotations.Mapper;
7 7  
... ... @@ -10,20 +10,20 @@ import java.util.List;
10 10 import java.util.stream.Collectors;
11 11  
12 12 @Mapper
13   -public interface SysUserRoleMapper extends BaseMapperX<SysUserRoleDO> {
  13 +public interface UserRoleMapper extends BaseMapperX<UserRoleDO> {
14 14  
15   - default List<SysUserRoleDO> selectListByUserId(Long userId) {
16   - return selectList(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId));
  15 + default List<UserRoleDO> selectListByUserId(Long userId) {
  16 + return selectList(new QueryWrapper<UserRoleDO>().eq("user_id", userId));
17 17 }
18 18  
19   - default List<SysUserRoleDO> selectListByRoleId(Long roleId) {
20   - return selectList(new QueryWrapper<SysUserRoleDO>().eq("role_id", roleId));
  19 + default List<UserRoleDO> selectListByRoleId(Long roleId) {
  20 + return selectList(new QueryWrapper<UserRoleDO>().eq("role_id", roleId));
21 21 }
22 22  
23 23  
24 24 default void insertList(Long userId, Collection<Long> roleIds) {
25   - List<SysUserRoleDO> list = roleIds.stream().map(roleId -> {
26   - SysUserRoleDO entity = new SysUserRoleDO();
  25 + List<UserRoleDO> list = roleIds.stream().map(roleId -> {
  26 + UserRoleDO entity = new UserRoleDO();
27 27 entity.setUserId(userId);
28 28 entity.setRoleId(roleId);
29 29 return entity;
... ... @@ -32,16 +32,20 @@ public interface SysUserRoleMapper extends BaseMapperX&lt;SysUserRoleDO&gt; {
32 32 }
33 33  
34 34 default void deleteListByUserIdAndRoleIdIds(Long userId, Collection<Long> roleIds) {
35   - delete(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId)
  35 + delete(new QueryWrapper<UserRoleDO>().eq("user_id", userId)
36 36 .in("role_id", roleIds));
37 37 }
38 38  
39 39 default void deleteListByUserId(Long userId) {
40   - delete(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId));
  40 + delete(new QueryWrapper<UserRoleDO>().eq("user_id", userId));
41 41 }
42 42  
43 43 default void deleteListByRoleId(Long roleId) {
44   - delete(new QueryWrapper<SysUserRoleDO>().eq("role_id", roleId));
  44 + delete(new QueryWrapper<UserRoleDO>().eq("role_id", roleId));
45 45 }
46 46  
  47 +
  48 + default List<UserRoleDO> selectListByRoleIds(Collection<Long> roleIds) {
  49 + return selectList(UserRoleDO::getRoleId, roleIds);
  50 + }
47 51 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsChannelMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsChannelMapper.java
... ... @@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Select;
11 11 import java.util.Date;
12 12  
13 13 @Mapper
14   -public interface SysSmsChannelMapper extends BaseMapperX<SysSmsChannelDO> {
  14 +public interface SmsChannelMapper extends BaseMapperX<SysSmsChannelDO> {
15 15  
16 16 default PageResult<SysSmsChannelDO> selectPage(SmsChannelPageReqVO reqVO) {
17 17 return selectPage(reqVO, new QueryWrapperX<SysSmsChannelDO>()
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/sms/SysSmsCodeMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsCodeMapper.java
1   -package cn.iocoder.yudao.module.member.dal.mysql.sms;
  1 +package cn.iocoder.yudao.module.system.dal.mysql.sms;
2 2  
  3 +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
3 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 5 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
5   -import cn.iocoder.yudao.module.member.dal.dataobject.sms.SysSmsCodeDO;
  6 +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO;
6 7 import org.apache.ibatis.annotations.Mapper;
7 8  
8   -// TODO @芋艿:拿到 system 模块下
9 9 @Mapper
10   -public interface SysSmsCodeMapper extends BaseMapperX<SysSmsCodeDO> {
  10 +public interface SmsCodeMapper extends BaseMapperX<SmsCodeDO> {
11 11  
12 12 /**
13 13 * 获得手机号的最后一个手机验证码
... ... @@ -17,12 +17,10 @@ public interface SysSmsCodeMapper extends BaseMapperX&lt;SysSmsCodeDO&gt; {
17 17 * @param code 验证码 选填
18 18 * @return 手机验证码
19 19 */
20   - default SysSmsCodeDO selectLastByMobile(String mobile,String code,Integer scene) {
21   - return selectOne(new QueryWrapperX<SysSmsCodeDO>()
22   - .eq("mobile", mobile)
23   - .eqIfPresent("scene", scene)
24   - .eqIfPresent("code", code)
25   - .orderByDesc("id")
26   - .last("LIMIT 1"));
  20 + default SmsCodeDO selectLastByMobile(String mobile, String code, Integer scene) {
  21 + return selectOne(new QueryWrapperX<SmsCodeDO>()
  22 + .eq("mobile", mobile).eqIfPresent("scene", scene).eqIfPresent("code", code)
  23 + .orderByDesc("id").last(SqlConstants.LIMIT1));
27 24 }
  25 +
28 26 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsLogMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsLogMapper.java
... ... @@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
11 11 import java.util.List;
12 12  
13 13 @Mapper
14   -public interface SysSmsLogMapper extends BaseMapperX<SysSmsLogDO> {
  14 +public interface SmsLogMapper extends BaseMapperX<SysSmsLogDO> {
15 15  
16 16 default PageResult<SysSmsLogDO> selectPage(SmsLogPageReqVO reqVO) {
17 17 return selectPage(reqVO, new QueryWrapperX<SysSmsLogDO>()
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SysSmsTemplateMapper.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/sms/SmsTemplateMapper.java
... ... @@ -13,7 +13,7 @@ import java.util.Date;
13 13 import java.util.List;
14 14  
15 15 @Mapper
16   -public interface SysSmsTemplateMapper extends BaseMapperX<SysSmsTemplateDO> {
  16 +public interface SmsTemplateMapper extends BaseMapperX<SysSmsTemplateDO> {
17 17  
18 18 @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1")
19 19 Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.dal.mysql.user;
  2 +
  3 +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
  4 +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
  5 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  8 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  9 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  10 +import org.apache.ibatis.annotations.Mapper;
  11 +
  12 +import java.util.Collection;
  13 +import java.util.List;
  14 +
  15 +@Mapper
  16 +public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
  17 +
  18 + default AdminUserDO selectByUsername(String username) {
  19 + return selectOne(new LambdaQueryWrapper<AdminUserDO>().eq(AdminUserDO::getUsername, username));
  20 + }
  21 +
  22 + default AdminUserDO selectByEmail(String email) {
  23 + return selectOne(new LambdaQueryWrapper<AdminUserDO>().eq(AdminUserDO::getEmail, email));
  24 + }
  25 +
  26 + default AdminUserDO selectByMobile(String mobile) {
  27 + return selectOne(new LambdaQueryWrapper<AdminUserDO>().eq(AdminUserDO::getMobile, mobile));
  28 + }
  29 +
  30 + default PageResult<AdminUserDO> selectPage(UserPageReqVO reqVO, Collection<Long> deptIds) {
  31 + return selectPage(reqVO, new LambdaQueryWrapperX<AdminUserDO>()
  32 + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
  33 + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
  34 + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
  35 + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
  36 + .inIfPresent(AdminUserDO::getDeptId, deptIds));
  37 + }
  38 +
  39 + default List<AdminUserDO> selectList(UserExportReqVO reqVO, Collection<Long> deptIds) {
  40 + return selectList(new LambdaQueryWrapperX<AdminUserDO>()
  41 + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
  42 + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
  43 + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
  44 + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
  45 + .inIfPresent(AdminUserDO::getDeptId, deptIds));
  46 + }
  47 +
  48 + default List<AdminUserDO> selectListByNickname(String nickname) {
  49 + return selectList(new LambdaQueryWrapperX<AdminUserDO>().like(AdminUserDO::getNickname, nickname));
  50 + }
  51 +
  52 + default List<AdminUserDO> selectListByUsername(String username) {
  53 + return selectList(new LambdaQueryWrapperX<AdminUserDO>().like(AdminUserDO::getUsername, username));
  54 + }
  55 +
  56 + default List<AdminUserDO> selectListByStatus(Integer status) {
  57 + return selectList(AdminUserDO::getStatus, status);
  58 + }
  59 +
  60 + default List<AdminUserDO> selectListByDeptIds(Collection<Long> deptIds) {
  61 + return selectList(AdminUserDO::getDeptId, deptIds);
  62 + }
  63 +
  64 +}
  65 +
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserMapper.java deleted
1   -package cn.iocoder.yudao.module.system.dal.mysql.user;
2   -
3   -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
4   -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
5   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
6   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
8   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
9   -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
10   -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
11   -import jodd.util.StringPool;
12   -import org.apache.ibatis.annotations.Mapper;
13   -
14   -import java.util.Collection;
15   -import java.util.List;
16   -import java.util.Optional;
17   -
18   -@Mapper
19   -public interface UserMapper extends BaseMapperX<UserDO> {
20   -
21   - default UserDO selectByUsername(String username) {
22   - return selectOne(new LambdaQueryWrapper<UserDO>().eq(UserDO::getUsername, username));
23   - }
24   -
25   - default UserDO selectByEmail(String email) {
26   - return selectOne(new LambdaQueryWrapper<UserDO>().eq(UserDO::getEmail, email));
27   - }
28   -
29   - default UserDO selectByMobile(String mobile) {
30   - return selectOne(new LambdaQueryWrapper<UserDO>().eq(UserDO::getMobile, mobile));
31   - }
32   -
33   - default PageResult<UserDO> selectPage(UserPageReqVO reqVO, Collection<Long> deptIds) {
34   - return selectPage(reqVO, new LambdaQueryWrapperX<UserDO>()
35   - .likeIfPresent(UserDO::getUsername, reqVO.getUsername())
36   - .likeIfPresent(UserDO::getMobile, reqVO.getMobile())
37   - .eqIfPresent(UserDO::getStatus, reqVO.getStatus())
38   - .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
39   - .inIfPresent(UserDO::getDeptId, deptIds));
40   - }
41   -
42   - default List<UserDO> selectList(UserExportReqVO reqVO, Collection<Long> deptIds) {
43   - return selectList(new LambdaQueryWrapperX<UserDO>()
44   - .likeIfPresent(UserDO::getUsername, reqVO.getUsername())
45   - .likeIfPresent(UserDO::getMobile, reqVO.getMobile())
46   - .eqIfPresent(UserDO::getStatus, reqVO.getStatus())
47   - .betweenIfPresent(UserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
48   - .inIfPresent(UserDO::getDeptId, deptIds));
49   - }
50   -
51   - default List<UserDO> selectListByNickname(String nickname) {
52   - return selectList(new LambdaQueryWrapperX<UserDO>().like(UserDO::getNickname, nickname));
53   - }
54   -
55   - default List<UserDO> selectListByUsername(String username) {
56   - return selectList(new LambdaQueryWrapperX<UserDO>().like(UserDO::getUsername, username));
57   - }
58   -
59   - default List<UserDO> selectListByStatus(Integer status) {
60   - return selectList(UserDO::getStatus, status);
61   - }
62   -
63   - default List<UserDO> selectListByDeptIds(Collection<Long> deptIds) {
64   - return selectList(UserDO::getDeptId, deptIds);
65   - }
66   -
67   -}
68   -
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java
1 1 package cn.iocoder.yudao.module.system.framework.datapermission.config;
2 2  
3 3 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  4 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
5 5 import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer;
6 6 import org.springframework.context.annotation.Bean;
7 7 import org.springframework.context.annotation.Configuration;
... ... @@ -17,7 +17,7 @@ public class DataPermissionConfiguration {
17 17 @Bean
18 18 public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() {
19 19 return rule -> {
20   - rule.addDeptColumn(UserDO.class);
  20 + rule.addDeptColumn(AdminUserDO.class);
21 21 rule.addDeptColumn(SysDeptDO.class, "id");
22 22 };
23 23 }
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeConfiguration.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeConfiguration.java
1   -package cn.iocoder.yudao.module.member.framework.sms;
  1 +package cn.iocoder.yudao.module.system.framework.sms;
2 2  
3 3 import org.springframework.boot.context.properties.EnableConfigurationProperties;
4 4 import org.springframework.context.annotation.Configuration;
... ...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/framework/sms/SmsCodeProperties.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/framework/sms/SmsCodeProperties.java
1   -package cn.iocoder.yudao.module.member.framework.sms;
  1 +package cn.iocoder.yudao.module.system.framework.sms;
2 2  
3 3 import lombok.Data;
4 4 import org.springframework.boot.context.properties.ConfigurationProperties;
5 5 import org.springframework.validation.annotation.Validated;
6 6  
7   -import javax.validation.constraints.NotEmpty;
8 7 import javax.validation.constraints.NotNull;
9 8 import java.time.Duration;
10   -import java.util.Collection;
11 9  
12 10 @ConfigurationProperties(prefix = "yudao.sms-code")
13 11 @Validated
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java
1 1 package cn.iocoder.yudao.module.system.mq.consumer.sms;
2 2  
3 3 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
4   -import cn.iocoder.yudao.module.system.service.sms.SysSmsSendService;
  4 +import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
5 5 import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;
6 6 import lombok.extern.slf4j.Slf4j;
7 7 import org.springframework.stereotype.Component;
... ... @@ -19,7 +19,7 @@ import javax.annotation.Resource;
19 19 public class SmsSendConsumer extends AbstractStreamMessageListener<SmsSendMessage> {
20 20  
21 21 @Resource
22   - private SysSmsSendService smsCoreService;
  22 + private SmsSendService smsCoreService;
23 23  
24 24 @Override
25 25 public void onMessage(SmsSendMessage message) {
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthService.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java
... ... @@ -12,7 +12,7 @@ import javax.validation.Valid;
12 12 *
13 13 * @author 芋道源码
14 14 */
15   -public interface AuthService extends SecurityAuthFrameworkService {
  15 +public interface AdminAuthService extends SecurityAuthFrameworkService {
16 16  
17 17 /**
18 18 * 账号登录
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AuthServiceImpl.java renamed to yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
... ... @@ -13,15 +13,15 @@ import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLo
13 13 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO;
14 14 import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
15 15 import cn.iocoder.yudao.module.system.dal.dataobject.social.SysSocialUserDO;
16   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  16 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
17 17 import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
18 18 import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
19 19 import cn.iocoder.yudao.module.system.service.common.CaptchaService;
20 20 import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
21   -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO;
  21 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
22 22 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
23 23 import cn.iocoder.yudao.module.system.service.social.SocialUserService;
24   -import cn.iocoder.yudao.module.system.service.user.UserService;
  24 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
25 25 import lombok.extern.slf4j.Slf4j;
26 26 import me.zhyd.oauth.model.AuthUser;
27 27 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -50,9 +50,9 @@ import static java.util.Collections.singleton;
50 50 *
51 51 * @author 芋道源码
52 52 */
53   -@Service("adminAuthService")
  53 +@Service
54 54 @Slf4j
55   -public class AuthServiceImpl implements AuthService {
  55 +public class AdminAuthServiceImpl implements AdminAuthService {
56 56  
57 57 @Resource
58 58 @Lazy // 延迟加载,因为存在相互依赖的问题
... ... @@ -60,7 +60,7 @@ public class AuthServiceImpl implements AuthService {
60 60  
61 61 @Autowired
62 62 @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") // UserService 存在重名
63   - private UserService userService;
  63 + private AdminUserService userService;
64 64 @Resource
65 65 private PermissionService permissionService;
66 66 @Resource
... ... @@ -75,7 +75,7 @@ public class AuthServiceImpl implements AuthService {
75 75 @Override
76 76 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
77 77 // 获取 username 对应的 SysUserDO
78   - UserDO user = userService.getUserByUsername(username);
  78 + AdminUserDO user = userService.getUserByUsername(username);
79 79 if (user == null) {
80 80 throw new UsernameNotFoundException(username);
81 81 }
... ... @@ -86,7 +86,7 @@ public class AuthServiceImpl implements AuthService {
86 86 @Override
87 87 public LoginUser mockLogin(Long userId) {
88 88 // 获取用户编号对应的 SysUserDO
89   - UserDO user = userService.getUser(userId);
  89 + AdminUserDO user = userService.getUser(userId);
90 90 if (user == null) {
91 91 throw new UsernameNotFoundException(String.valueOf(userId));
92 92 }
... ... @@ -160,7 +160,7 @@ public class AuthServiceImpl implements AuthService {
160 160  
161 161 private void createLoginLog(String username, LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) {
162 162 // 获得用户
163   - UserDO user = userService.getUserByUsername(username);
  163 + AdminUserDO user = userService.getUserByUsername(username);
164 164 // 插入登录日志
165 165 LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
166 166 reqDTO.setLogType(logTypeEnum.getType());
... ... @@ -198,13 +198,13 @@ public class AuthServiceImpl implements AuthService {
198 198  
199 199 // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
200 200 String unionId = socialService.getAuthUserUnionId(authUser);
201   - List<SysSocialUserDO> socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType());
  201 + List<SysSocialUserDO> socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, getUserType().getValue());
202 202 if (CollUtil.isEmpty(socialUsers)) {
203 203 throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
204 204 }
205 205  
206 206 // 自动登录
207   - UserDO user = userService.getUser(socialUsers.get(0).getUserId());
  207 + AdminUserDO user = userService.getUser(socialUsers.get(0).getUserId());
208 208 if (user == null) {
209 209 throw exception(USER_NOT_EXISTS);
210 210 }
... ... @@ -214,7 +214,7 @@ public class AuthServiceImpl implements AuthService {
214 214 LoginUser loginUser = this.buildLoginUser(user);
215 215  
216 216 // 绑定社交用户(更新)
217   - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType());
  217 + socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser);
218 218  
219 219 // 缓存登录用户到 Redis 中,返回 sessionId 编号
220 220 return userSessionService.createUserSession(loginUser, userIp, userAgent);
... ... @@ -230,7 +230,7 @@ public class AuthServiceImpl implements AuthService {
230 230 LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword());
231 231  
232 232 // 绑定社交用户(新增)
233   - socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, getUserType());
  233 + socialService.bindSocialUser(loginUser.getId(), getUserType().getValue(), reqVO.getType(), authUser);
234 234  
235 235 // 缓存登录用户到 Redis 中,返回 sessionId 编号
236 236 return userSessionService.createUserSession(loginUser, userIp, userAgent);
... ... @@ -243,7 +243,7 @@ public class AuthServiceImpl implements AuthService {
243 243 Assert.notNull(authUser, "授权用户不为空");
244 244  
245 245 // 绑定社交用户(新增)
246   - socialService.bindSocialUser(userId, reqVO.getType(), authUser, getUserType());
  246 + socialService.bindSocialUser(userId, getUserType().getValue(), reqVO.getType(), authUser);
247 247 }
248 248  
249 249 @Override
... ... @@ -296,7 +296,7 @@ public class AuthServiceImpl implements AuthService {
296 296 }
297 297  
298 298 // 重新加载 SysUserDO 信息
299   - UserDO user = userService.getUser(loginUser.getId());
  299 + AdminUserDO user = userService.getUser(loginUser.getId());
300 300 if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) {
301 301 throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被禁用的情况下,也认为 token 过期,方便前端跳转到登录界面
302 302 }
... ... @@ -307,7 +307,7 @@ public class AuthServiceImpl implements AuthService {
307 307 return newLoginUser;
308 308 }
309 309  
310   - private LoginUser buildLoginUser(UserDO user) {
  310 + private LoginUser buildLoginUser(AdminUserDO user) {
311 311 LoginUser loginUser = AuthConvert.INSTANCE.convert(user);
312 312 // 补全字段
313 313 loginUser.setDeptId(user.getDeptId());
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/auth/UserSessionServiceImpl.java
... ... @@ -6,15 +6,15 @@ import cn.hutool.core.util.StrUtil;
6 6 import cn.iocoder.yudao.framework.security.config.SecurityProperties;
7 7 import cn.iocoder.yudao.framework.security.core.LoginUser;
8 8 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.session.UserSessionPageReqVO;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
9 10 import cn.iocoder.yudao.module.system.dal.mysql.auth.SysUserSessionMapper;
10 11 import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
11 12 import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
12 13 import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
13   -import cn.iocoder.yudao.module.system.service.user.UserService;
  14 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
14 15 import cn.iocoder.yudao.module.system.dal.dataobject.auth.SysUserSessionDO;
15   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
16 16 import cn.iocoder.yudao.module.system.dal.redis.auth.LoginUserRedisDAO;
17   -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO;
  17 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
18 18 import cn.iocoder.yudao.framework.common.pojo.PageResult;
19 19 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
20 20 import com.google.common.collect.Lists;
... ... @@ -42,7 +42,7 @@ public class UserSessionServiceImpl implements UserSessionService {
42 42 private SysUserSessionMapper userSessionMapper;
43 43  
44 44 @Resource
45   - private UserService userService;
  45 + private AdminUserService userService;
46 46 @Resource
47 47 private LoginLogService loginLogService;
48 48  
... ... @@ -57,7 +57,7 @@ public class UserSessionServiceImpl implements UserSessionService {
57 57 // 处理基于用户昵称的查询
58 58 Collection<Long> userIds = null;
59 59 if (StrUtil.isNotEmpty(reqVO.getUsername())) {
60   - userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), UserDO::getId);
  60 + userIds = convertSet(userService.getUsersByUsername(reqVO.getUsername()), AdminUserDO::getId);
61 61 if (CollUtil.isEmpty(userIds)) {
62 62 return PageResult.empty();
63 63 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java
1 1 package cn.iocoder.yudao.module.system.service.dept;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
3 5 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
4 6 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
5 7 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
6 8 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
7 9  
  10 +import java.util.Collection;
  11 +import java.util.Collections;
8 12 import java.util.List;
  13 +import java.util.Map;
9 14  
10 15 /**
11 16 * 部门 Service 接口
... ... @@ -59,4 +64,50 @@ public interface DeptService {
59 64 */
60 65 List<SysDeptDO> getDeptsByParentIdFromCache(Long parentId, boolean recursive);
61 66  
  67 + /**
  68 + * 获得部门信息数组
  69 + *
  70 + * @param ids 部门编号数组
  71 + * @return 部门信息数组
  72 + */
  73 + List<SysDeptDO> getDepts(Collection<Long> ids);
  74 +
  75 + /**
  76 + * 获得部门信息
  77 + *
  78 + * @param id 部门编号
  79 + * @return 部门信息
  80 + */
  81 + SysDeptDO getDept(Long id);
  82 +
  83 + /**
  84 + * 校验部门们是否有效。如下情况,视为无效:
  85 + * 1. 部门编号不存在
  86 + * 2. 部门被禁用
  87 + *
  88 + * @param ids 角色编号数组
  89 + */
  90 + void validDepts(Collection<Long> ids);
  91 +
  92 + /**
  93 + * 获得指定编号的部门列表
  94 + *
  95 + * @param ids 部门编号数组
  96 + * @return 部门列表
  97 + */
  98 + List<SysDeptDO> getSimpleDepts(Collection<Long> ids);
  99 +
  100 + /**
  101 + * 获得指定编号的部门 Map
  102 + *
  103 + * @param ids 部门编号数组
  104 + * @return 部门 Map
  105 + */
  106 + default Map<Long, SysDeptDO> getDeptMap(Collection<Long> ids) {
  107 + if (CollUtil.isEmpty(ids)) {
  108 + return Collections.emptyMap();
  109 + }
  110 + List<SysDeptDO> list = getSimpleDepts(ids);
  111 + return CollectionUtils.convertMap(list, SysDeptDO::getId);
  112 + }
62 113 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
... ... @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.system.service.dept;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 5 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
  6 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
6 7 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
7 8 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
8 9 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
9 10 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
10 11 import cn.iocoder.yudao.module.system.convert.dept.DeptConvert;
11   -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper;
12 12 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
  13 +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptMapper;
13 14 import cn.iocoder.yudao.module.system.enums.dept.DeptIdEnum;
14 15 import cn.iocoder.yudao.module.system.mq.producer.dept.DeptProducer;
15 16 import com.google.common.collect.ImmutableMap;
... ... @@ -24,8 +25,8 @@ import javax.annotation.PostConstruct;
24 25 import javax.annotation.Resource;
25 26 import java.util.*;
26 27  
27   -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
28 28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  29 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
29 30  
30 31 /**
31 32 * 部门 Service 实现类
... ... @@ -257,4 +258,39 @@ public class DeptServiceImpl implements DeptService {
257 258 }
258 259 }
259 260  
  261 + @Override
  262 + public List<SysDeptDO> getDepts(Collection<Long> ids) {
  263 + return deptMapper.selectBatchIds(ids);
  264 + }
  265 +
  266 + @Override
  267 + public SysDeptDO getDept(Long id) {
  268 + return deptMapper.selectById(id);
  269 + }
  270 +
  271 + @Override
  272 + public void validDepts(Collection<Long> ids) {
  273 + if (CollUtil.isEmpty(ids)) {
  274 + return;
  275 + }
  276 + // 获得科室信息
  277 + List<SysDeptDO> depts = deptMapper.selectBatchIds(ids);
  278 + Map<Long, SysDeptDO> deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId);
  279 + // 校验
  280 + ids.forEach(id -> {
  281 + SysDeptDO dept = deptMap.get(id);
  282 + if (dept == null) {
  283 + throw exception(DEPT_NOT_FOUND);
  284 + }
  285 + if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
  286 + throw exception(DEPT_NOT_ENABLE, dept.getName());
  287 + }
  288 + });
  289 + }
  290 +
  291 + @Override
  292 + public List<SysDeptDO> getSimpleDepts(Collection<Long> ids) {
  293 + return deptMapper.selectBatchIds(ids);
  294 + }
  295 +
260 296 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostService.java
... ... @@ -86,4 +86,13 @@ public interface PostService {
86 86 */
87 87 SysPostDO getPost(Long id);
88 88  
  89 + /**
  90 + * 校验岗位们是否有效。如下情况,视为无效:
  91 + * 1. 岗位编号不存在
  92 + * 2. 岗位被禁用
  93 + *
  94 + * @param ids 岗位编号数组
  95 + */
  96 + void validPosts(Collection<Long> ids);
  97 +
89 98 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java
1 1 package cn.iocoder.yudao.module.system.service.dept;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 5 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
4 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 7 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO;
... ... @@ -7,17 +9,19 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportRe
7 9 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO;
8 10 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostUpdateReqVO;
9 11 import cn.iocoder.yudao.module.system.convert.dept.PostConvert;
10   -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper;
11 12 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO;
  13 +import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostMapper;
12 14 import org.springframework.stereotype.Service;
13 15 import org.springframework.validation.annotation.Validated;
14 16  
15 17 import javax.annotation.Resource;
16 18 import java.util.Collection;
17 19 import java.util.List;
  20 +import java.util.Map;
18 21  
19   -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
20 22 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  23 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
  24 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
21 25  
22 26 /**
23 27 * 岗位 Service 实现类
... ... @@ -125,4 +129,23 @@ public class PostServiceImpl implements PostService {
125 129 }
126 130 }
127 131  
  132 + @Override
  133 + public void validPosts(Collection<Long> ids) {
  134 + if (CollUtil.isEmpty(ids)) {
  135 + return;
  136 + }
  137 + // 获得岗位信息
  138 + List<SysPostDO> posts = postMapper.selectBatchIds(ids);
  139 + Map<Long, SysPostDO> postMap = convertMap(posts, SysPostDO::getId);
  140 + // 校验
  141 + ids.forEach(id -> {
  142 + SysPostDO post = postMap.get(id);
  143 + if (post == null) {
  144 + throw exception(POST_NOT_FOUND);
  145 + }
  146 + if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) {
  147 + throw exception(POST_NOT_ENABLE, post.getName());
  148 + }
  149 + });
  150 + }
128 151 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysDeptCoreService.java deleted
1   -package cn.iocoder.yudao.module.system.service.dept;
2   -
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
5   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
6   -
7   -import java.util.Collection;
8   -import java.util.Collections;
9   -import java.util.List;
10   -import java.util.Map;
11   -
12   -public interface SysDeptCoreService {
13   - /**
14   - * 获得部门信息数组
15   - *
16   - * @param ids 部门编号数组
17   - * @return 部门信息数组
18   - */
19   - List<SysDeptDO> getDepts(Collection<Long> ids);
20   -
21   - /**
22   - * 获得部门信息
23   - *
24   - * @param id 部门编号
25   - * @return 部门信息
26   - */
27   - SysDeptDO getDept(Long id);
28   -
29   - /**
30   - * 校验部门们是否有效。如下情况,视为无效:
31   - * 1. 部门编号不存在
32   - * 2. 部门被禁用
33   - *
34   - * @param ids 角色编号数组
35   - */
36   - void validDepts(Collection<Long> ids);
37   -
38   - /**
39   - * 获得指定编号的部门列表
40   - *
41   - * @param ids 部门编号数组
42   - * @return 部门列表
43   - */
44   - List<SysDeptDO> getSimpleDepts(Collection<Long> ids);
45   -
46   - /**
47   - * 获得指定编号的部门 Map
48   - *
49   - * @param ids 部门编号数组
50   - * @return 部门 Map
51   - */
52   - default Map<Long, SysDeptDO> getDeptMap(Collection<Long> ids) {
53   - if (CollUtil.isEmpty(ids)) {
54   - return Collections.emptyMap();
55   - }
56   - List<SysDeptDO> list = getSimpleDepts(ids);
57   - return CollectionUtils.convertMap(list, SysDeptDO::getId);
58   - }
59   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/SysPostCoreService.java deleted
1   -package cn.iocoder.yudao.module.system.service.dept;
2   -
3   -import java.util.Collection;
4   -
5   -/**
6   - * 岗位 Core Service 接口
7   - *
8   - * @author 芋道源码
9   - */
10   -public interface SysPostCoreService {
11   - /**
12   - * 校验岗位们是否有效。如下情况,视为无效:
13   - * 1. 岗位编号不存在
14   - * 2. 岗位被禁用
15   - *
16   - * @param ids 岗位编号数组
17   - */
18   - void validPosts(Collection<Long> ids);
19   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysDeptCoreServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.system.service.dept.impl;
2   -
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
5   -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysDeptCoreMapper;
6   -import cn.iocoder.yudao.module.system.service.dept.SysDeptCoreService;
7   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
9   -import lombok.extern.slf4j.Slf4j;
10   -import org.springframework.stereotype.Service;
11   -
12   -import javax.annotation.Resource;
13   -import java.util.Collection;
14   -import java.util.List;
15   -import java.util.Map;
16   -
17   -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_ENABLE;
18   -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.DEPT_NOT_FOUND;
19   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
20   -
21   -/**
22   - * 部门 Core Service 实现类
23   - *
24   - * @author 芋道源码
25   - */
26   -@Service
27   -@Slf4j
28   -public class SysDeptCoreServiceImpl implements SysDeptCoreService {
29   -
30   - @Resource
31   - private SysDeptCoreMapper deptCoreMapper;
32   -
33   - @Override
34   - public List<SysDeptDO> getDepts(Collection<Long> ids) {
35   - return deptCoreMapper.selectBatchIds(ids);
36   - }
37   -
38   - @Override
39   - public SysDeptDO getDept(Long id) {
40   - return deptCoreMapper.selectById(id);
41   - }
42   -
43   - @Override
44   - public void validDepts(Collection<Long> ids) {
45   - if (CollUtil.isEmpty(ids)) {
46   - return;
47   - }
48   - // 获得科室信息
49   - List<SysDeptDO> depts = deptCoreMapper.selectBatchIds(ids);
50   - Map<Long, SysDeptDO> deptMap = CollectionUtils.convertMap(depts, SysDeptDO::getId);
51   - // 校验
52   - ids.forEach(id -> {
53   - SysDeptDO dept = deptMap.get(id);
54   - if (dept == null) {
55   - throw exception(DEPT_NOT_FOUND);
56   - }
57   - if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
58   - throw exception(DEPT_NOT_ENABLE, dept.getName());
59   - }
60   - });
61   - }
62   -
63   - @Override
64   - public List<SysDeptDO> getSimpleDepts(Collection<Long> ids) {
65   - return deptCoreMapper.selectBatchIds(ids);
66   - }
67   -
68   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/dept/impl/SysPostCoreServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.system.service.dept.impl;
2   -
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysPostDO;
5   -import cn.iocoder.yudao.module.system.dal.mysql.dept.SysPostCoreMapper;
6   -import cn.iocoder.yudao.module.system.service.dept.SysPostCoreService;
7   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
9   -import org.springframework.stereotype.Service;
10   -
11   -import javax.annotation.Resource;
12   -import java.util.Collection;
13   -import java.util.List;
14   -import java.util.Map;
15   -
16   -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_ENABLE;
17   -import static cn.iocoder.yudao.module.system.enums.SysErrorCodeConstants.POST_NOT_FOUND;
18   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
19   -
20   -/**
21   - * 岗位 Core Service 实现类
22   - *
23   - * @author 芋道源码
24   - */
25   -@Service
26   -public class SysPostCoreServiceImpl implements SysPostCoreService {
27   -
28   - @Resource
29   - private SysPostCoreMapper sysPostCoreMapper;
30   -
31   - @Override
32   - public void validPosts(Collection<Long> ids) {
33   - if (CollUtil.isEmpty(ids)) {
34   - return;
35   - }
36   - // 获得岗位信息
37   - List<SysPostDO> posts = sysPostCoreMapper.selectBatchIds(ids);
38   - Map<Long, SysPostDO> postMap = CollectionUtils.convertMap(posts, SysPostDO::getId);
39   - // 校验
40   - ids.forEach(id -> {
41   - SysPostDO post = postMap.get(id);
42   - if (post == null) {
43   - throw exception(POST_NOT_FOUND);
44   - }
45   - if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) {
46   - throw exception(POST_NOT_ENABLE, post.getName());
47   - }
48   - });
49   - }
50   -}
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogService.java
... ... @@ -4,8 +4,9 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginL
4 4 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
5 5 import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO;
  7 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
8 8  
  9 +import javax.validation.Valid;
9 10 import java.util.List;
10 11  
11 12 /**
... ... @@ -34,6 +35,6 @@ public interface LoginLogService {
34 35 *
35 36 * @param reqDTO 日志信息
36 37 */
37   - void createLoginLog(LoginLogCreateReqDTO reqDTO);
  38 + void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO);
38 39  
39 40 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImpl.java
1 1 package cn.iocoder.yudao.module.system.service.logger;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
3 4 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
4 5 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
5 6 import cn.iocoder.yudao.module.system.convert.logger.SysLoginLogCoreConvert;
6   -import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
7 7 import cn.iocoder.yudao.module.system.dal.dataobject.logger.SysLoginLogDO;
8   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
9   -import cn.iocoder.yudao.module.system.dal.mysql.logger.SysLoginLogCoreMapper;
10   -import cn.iocoder.yudao.module.system.service.logger.dto.LoginLogCreateReqDTO;
  8 +import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
  9 +import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
11 10 import org.springframework.stereotype.Service;
12 11  
13 12 import javax.annotation.Resource;
... ... @@ -35,7 +34,6 @@ public class LoginLogServiceImpl implements LoginLogService {
35 34 @Override
36 35 public void createLoginLog(LoginLogCreateReqDTO reqDTO) {
37 36 SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO);
38   - // 插入
39 37 loginLogMapper.insert(loginLog);
40 38 }
41 39  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
... ... @@ -6,9 +6,9 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper
6 6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
7 7 import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
8 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
  9 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
9 10 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
10   -import cn.iocoder.yudao.module.system.service.user.UserService;
11   -import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDO;
  11 +import cn.iocoder.yudao.module.system.service.user.AdminUserService;
12 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 13 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
14 14 import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
... ... @@ -35,7 +35,7 @@ public class OperateLogServiceImpl implements OperateLogService {
35 35 private OperateLogMapper operateLogMapper;
36 36  
37 37 @Resource
38   - private UserService userService;
  38 + private AdminUserService userService;
39 39  
40 40 @Override
41 41 @Async
... ... @@ -58,7 +58,7 @@ public class OperateLogServiceImpl implements OperateLogService {
58 58 // 处理基于用户昵称的查询
59 59 Collection<Long> userIds = null;
60 60 if (StrUtil.isNotEmpty(reqVO.getUserNickname())) {
61   - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId);
  61 + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), AdminUserDO::getId);
62 62 if (CollUtil.isEmpty(userIds)) {
63 63 return PageResult.empty();
64 64 }
... ... @@ -72,7 +72,7 @@ public class OperateLogServiceImpl implements OperateLogService {
72 72 // 处理基于用户昵称的查询
73 73 Collection<Long> userIds = null;
74 74 if (StrUtil.isNotEmpty(reqVO.getUserNickname())) {
75   - userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), UserDO::getId);
  75 + userIds = convertSet(userService.getUsersByNickname(reqVO.getUserNickname()), AdminUserDO::getId);
76 76 if (CollUtil.isEmpty(userIds)) {
77 77 return Collections.emptyList();
78 78 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java
... ... @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuLi
8 8 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUpdateReqVO;
9 9 import cn.iocoder.yudao.module.system.convert.permission.MenuConvert;
10 10 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
11   -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysMenuMapper;
  11 +import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
12 12 import cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum;
13 13 import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum;
14 14 import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer;
... ... @@ -67,7 +67,7 @@ public class MenuServiceImpl implements MenuService {
67 67 private volatile Date maxUpdateTime;
68 68  
69 69 @Resource
70   - private SysMenuMapper menuMapper;
  70 + private MenuMapper menuMapper;
71 71 @Resource
72 72 private PermissionService permissionService;
73 73  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionService.java
... ... @@ -115,4 +115,12 @@ public interface PermissionService extends SecurityPermissionFrameworkService, D
115 115 */
116 116 void processUserDeleted(Long userId);
117 117  
  118 + /**
  119 + * 获得拥有多个角色的用户编号集合
  120 + *
  121 + * @param roleIds 角色编号集合
  122 + * @return 用户编号集合
  123 + */
  124 + Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds);
  125 +
118 126 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java
... ... @@ -5,11 +5,11 @@ import cn.hutool.core.collection.CollectionUtil;
5 5 import cn.hutool.core.util.ArrayUtil;
6 6 import cn.iocoder.yudao.module.system.dal.dataobject.dept.SysDeptDO;
7 7 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
8   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  8 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
9 9 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleMenuDO;
10   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysUserRoleDO;
11   -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMenuMapper;
12   -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysUserRoleMapper;
  10 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
  11 +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMenuMapper;
  12 +import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
13 13 import cn.iocoder.yudao.module.system.mq.producer.permission.PermissionProducer;
14 14 import cn.iocoder.yudao.module.system.service.dept.DeptService;
15 15 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
... ... @@ -75,9 +75,9 @@ public class PermissionServiceImpl implements PermissionService {
75 75 private volatile Date maxUpdateTime;
76 76  
77 77 @Resource
78   - private SysRoleMenuMapper roleMenuMapper;
  78 + private RoleMenuMapper roleMenuMapper;
79 79 @Resource
80   - private SysUserRoleMapper userRoleMapper;
  80 + private UserRoleMapper userRoleMapper;
81 81  
82 82 @Resource
83 83 private RoleService roleService;
... ... @@ -150,7 +150,7 @@ public class PermissionServiceImpl implements PermissionService {
150 150 return Collections.emptyList();
151 151 }
152 152 // 判断角色是否包含管理员
153   - List<SysRoleDO> roleList = roleService.getRolesFromCache(roleIds);
  153 + List<RoleDO> roleList = roleService.getRolesFromCache(roleIds);
154 154 boolean hasAdmin = roleService.hasAnyAdmin(roleList);
155 155 // 获得角色拥有的菜单关联
156 156 if (hasAdmin) { // 管理员,获取到全部
... ... @@ -162,21 +162,21 @@ public class PermissionServiceImpl implements PermissionService {
162 162  
163 163 @Override
164 164 public Set<Long> getUserRoleIds(Long userId, Collection<Integer> roleStatuses) {
165   - List<SysUserRoleDO> userRoleList = userRoleMapper.selectListByUserId(userId);
  165 + List<UserRoleDO> userRoleList = userRoleMapper.selectListByUserId(userId);
166 166 // 过滤角色状态
167 167 if (CollectionUtil.isNotEmpty(roleStatuses)) {
168 168 userRoleList.removeIf(userRoleDO -> {
169   - SysRoleDO role = roleService.getRoleFromCache(userRoleDO.getRoleId());
  169 + RoleDO role = roleService.getRoleFromCache(userRoleDO.getRoleId());
170 170 return role == null || !roleStatuses.contains(role.getStatus());
171 171 });
172 172 }
173   - return CollectionUtils.convertSet(userRoleList, SysUserRoleDO::getRoleId);
  173 + return CollectionUtils.convertSet(userRoleList, UserRoleDO::getRoleId);
174 174 }
175 175  
176 176 @Override
177 177 public Set<Long> listRoleMenuIds(Long roleId) {
178 178 // 如果是管理员的情况下,获取全部菜单编号
179   - SysRoleDO role = roleService.getRole(roleId);
  179 + RoleDO role = roleService.getRole(roleId);
180 180 if (roleService.hasAnyAdmin(Collections.singletonList(role))) {
181 181 return CollectionUtils.convertSet(menuService.getMenus(), MenuDO::getId);
182 182 }
... ... @@ -215,13 +215,13 @@ public class PermissionServiceImpl implements PermissionService {
215 215 @Override
216 216 public Set<Long> getUserRoleIdListByUserId(Long userId) {
217 217 return CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId),
218   - SysUserRoleDO::getRoleId);
  218 + UserRoleDO::getRoleId);
219 219 }
220 220  
221 221 @Override
222 222 public Set<Long> getUserRoleIdListByRoleId(Long roleId) {
223 223 return CollectionUtils.convertSet(userRoleMapper.selectListByRoleId(roleId),
224   - SysUserRoleDO::getRoleId);
  224 + UserRoleDO::getRoleId);
225 225 }
226 226  
227 227  
... ... @@ -230,7 +230,7 @@ public class PermissionServiceImpl implements PermissionService {
230 230 public void assignUserRole(Long userId, Set<Long> roleIds) {
231 231 // 获得角色拥有角色编号
232 232 Set<Long> dbRoleIds = CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId),
233   - SysUserRoleDO::getRoleId);
  233 + UserRoleDO::getRoleId);
234 234 // 计算新增和删除的角色编号
235 235 Collection<Long> createRoleIds = CollUtil.subtract(roleIds, dbRoleIds);
236 236 Collection<Long> deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIds);
... ... @@ -343,7 +343,7 @@ public class PermissionServiceImpl implements PermissionService {
343 343 return true;
344 344 }
345 345 Set<String> userRoles = CollectionUtils.convertSet(roleService.getRolesFromCache(roleIds),
346   - SysRoleDO::getCode);
  346 + RoleDO::getCode);
347 347 return CollUtil.containsAny(userRoles, Sets.newHashSet(roles));
348 348 }
349 349  
... ... @@ -357,8 +357,8 @@ public class PermissionServiceImpl implements PermissionService {
357 357  
358 358 // 创建 DeptDataPermissionRespDTO 对象
359 359 result = new DeptDataPermissionRespDTO();
360   - List<SysRoleDO> roles = roleService.getRolesFromCache(loginUser.getRoleIds());
361   - for (SysRoleDO role : roles) {
  360 + List<RoleDO> roles = roleService.getRolesFromCache(loginUser.getRoleIds());
  361 + for (RoleDO role : roles) {
362 362 // 为空时,跳过
363 363 if (role.getDataScope() == null) {
364 364 continue;
... ... @@ -401,4 +401,10 @@ public class PermissionServiceImpl implements PermissionService {
401 401 return result;
402 402 }
403 403  
  404 + @Override
  405 + public Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds) {
  406 + return CollectionUtils.convertSet(userRoleMapper.selectListByRoleIds(roleIds),
  407 + UserRoleDO::getRoleId);
  408 + }
  409 +
404 410 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java
... ... @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCr
5 5 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
6 6 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
7 7 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO;
8   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  8 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
9 9 import org.springframework.lang.Nullable;
10 10  
11 11 import java.util.Collection;
... ... @@ -69,7 +69,7 @@ public interface RoleService {
69 69 * @param id 角色编号
70 70 * @return 角色
71 71 */
72   - SysRoleDO getRoleFromCache(Long id);
  72 + RoleDO getRoleFromCache(Long id);
73 73  
74 74 /**
75 75 * 获得角色列表
... ... @@ -77,7 +77,7 @@ public interface RoleService {
77 77 * @param statuses 筛选的状态。允许空,空时不筛选
78 78 * @return 角色列表
79 79 */
80   - List<SysRoleDO> getRoles(@Nullable Collection<Integer> statuses);
  80 + List<RoleDO> getRoles(@Nullable Collection<Integer> statuses);
81 81  
82 82 /**
83 83 * 获得角色数组,从缓存中
... ... @@ -85,7 +85,7 @@ public interface RoleService {
85 85 * @param ids 角色编号数组
86 86 * @return 角色数组
87 87 */
88   - List<SysRoleDO> getRolesFromCache(Collection<Long> ids);
  88 + List<RoleDO> getRolesFromCache(Collection<Long> ids);
89 89  
90 90 /**
91 91 * 判断角色数组中,是否有管理员
... ... @@ -93,7 +93,7 @@ public interface RoleService {
93 93 * @param roleList 角色数组
94 94 * @return 是否有管理员
95 95 */
96   - boolean hasAnyAdmin(Collection<SysRoleDO> roleList);
  96 + boolean hasAnyAdmin(Collection<RoleDO> roleList);
97 97  
98 98 /**
99 99 * 判断角色编号数组中,是否有管理员
... ... @@ -111,7 +111,7 @@ public interface RoleService {
111 111 * @param id 角色编号
112 112 * @return 角色
113 113 */
114   - SysRoleDO getRole(Long id);
  114 + RoleDO getRole(Long id);
115 115  
116 116 /**
117 117 * 获得角色分页
... ... @@ -119,7 +119,7 @@ public interface RoleService {
119 119 * @param reqVO 角色分页查询
120 120 * @return 角色分页结果
121 121 */
122   - PageResult<SysRoleDO> getRolePage(RolePageReqVO reqVO);
  122 + PageResult<RoleDO> getRolePage(RolePageReqVO reqVO);
123 123  
124 124 /**
125 125 * 获得角色列表
... ... @@ -127,8 +127,15 @@ public interface RoleService {
127 127 * @param reqVO 列表查询
128 128 * @return 角色列表
129 129 */
130   - List<SysRoleDO> getRoleList(RoleExportReqVO reqVO);
131   -
  130 + List<RoleDO> getRoleList(RoleExportReqVO reqVO);
132 131  
  132 + /**
  133 + * 校验角色们是否有效。如下情况,视为无效:
  134 + * 1. 角色编号不存在
  135 + * 2. 角色被禁用
  136 + *
  137 + * @param ids 角色编号数组
  138 + */
  139 + void validRoles(Collection<Long> ids);
133 140  
134 141 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java
... ... @@ -4,18 +4,19 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.collection.CollectionUtil;
5 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
7 8 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  9 +import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum;
8 10 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO;
9 11 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
10 12 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
11 13 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO;
12 14 import cn.iocoder.yudao.module.system.convert.permission.RoleConvert;
13   -import cn.iocoder.yudao.module.system.dal.mysql.permission.SysRoleMapper;
14   -import cn.iocoder.yudao.module.system.dal.dataobject.permission.SysRoleDO;
  15 +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
  16 +import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper;
15 17 import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
16 18 import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
17 19 import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer;
18   -import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum;
19 20 import com.google.common.annotations.VisibleForTesting;
20 21 import com.google.common.collect.ImmutableMap;
21 22 import lombok.extern.slf4j.Slf4j;
... ... @@ -32,8 +33,8 @@ import javax.annotation.Resource;
32 33 import java.util.*;
33 34 import java.util.stream.Collectors;
34 35  
35   -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
36 36 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  37 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
37 38  
38 39 /**
39 40 * 角色 Service 实现类
... ... @@ -52,11 +53,11 @@ public class RoleServiceImpl implements RoleService {
52 53  
53 54 /**
54 55 * 角色缓存
55   - * key:角色编号 {@link SysRoleDO#getId()}
  56 + * key:角色编号 {@link RoleDO#getId()}
56 57 *
57 58 * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
58 59 */
59   - private volatile Map<Long, SysRoleDO> roleCache;
  60 + private volatile Map<Long, RoleDO> roleCache;
60 61 /**
61 62 * 缓存角色的最大更新时间,用于后续的增量轮询,判断是否有更新
62 63 */
... ... @@ -66,7 +67,7 @@ public class RoleServiceImpl implements RoleService {
66 67 private PermissionService permissionService;
67 68  
68 69 @Resource
69   - private SysRoleMapper roleMapper;
  70 + private RoleMapper roleMapper;
70 71  
71 72 @Resource
72 73 private RoleProducer roleProducer;
... ... @@ -78,13 +79,13 @@ public class RoleServiceImpl implements RoleService {
78 79 @PostConstruct
79 80 public void initLocalCache() {
80 81 // 获取角色列表,如果有更新
81   - List<SysRoleDO> roleList = this.loadRoleIfUpdate(maxUpdateTime);
  82 + List<RoleDO> roleList = this.loadRoleIfUpdate(maxUpdateTime);
82 83 if (CollUtil.isEmpty(roleList)) {
83 84 return;
84 85 }
85 86  
86 87 // 写入缓存
87   - ImmutableMap.Builder<Long, SysRoleDO> builder = ImmutableMap.builder();
  88 + ImmutableMap.Builder<Long, RoleDO> builder = ImmutableMap.builder();
88 89 roleList.forEach(sysRoleDO -> builder.put(sysRoleDO.getId(), sysRoleDO));
89 90 roleCache = builder.build();
90 91 assert roleList.size() > 0; // 断言,避免告警
... ... @@ -104,7 +105,7 @@ public class RoleServiceImpl implements RoleService {
104 105 * @param maxUpdateTime 当前角色的最大更新时间
105 106 * @return 角色列表
106 107 */
107   - private List<SysRoleDO> loadRoleIfUpdate(Date maxUpdateTime) {
  108 + private List<RoleDO> loadRoleIfUpdate(Date maxUpdateTime) {
108 109 // 第一步,判断是否要更新。
109 110 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
110 111 log.info("[loadRoleIfUpdate][首次加载全量角色]");
... ... @@ -123,7 +124,7 @@ public class RoleServiceImpl implements RoleService {
123 124 // 校验角色
124 125 checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null);
125 126 // 插入到数据库
126   - SysRoleDO role = RoleConvert.INSTANCE.convert(reqVO);
  127 + RoleDO role = RoleConvert.INSTANCE.convert(reqVO);
127 128 role.setType(RoleTypeEnum.CUSTOM.getType());
128 129 role.setStatus(CommonStatusEnum.ENABLE.getStatus());
129 130 role.setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据。原因是,可能一些项目不需要项目权限
... ... @@ -141,7 +142,7 @@ public class RoleServiceImpl implements RoleService {
141 142 // 校验角色的唯一字段是否重复
142 143 checkDuplicateRole(reqVO.getName(), reqVO.getCode(), reqVO.getId());
143 144 // 更新到数据库
144   - SysRoleDO updateObject = RoleConvert.INSTANCE.convert(reqVO);
  145 + RoleDO updateObject = RoleConvert.INSTANCE.convert(reqVO);
145 146 roleMapper.updateById(updateObject);
146 147 // 发送刷新消息
147 148 roleProducer.sendRoleRefreshMessage();
... ... @@ -152,7 +153,7 @@ public class RoleServiceImpl implements RoleService {
152 153 // 校验是否可以更新
153 154 this.checkUpdateRole(id);
154 155 // 更新状态
155   - SysRoleDO updateObject = new SysRoleDO();
  156 + RoleDO updateObject = new RoleDO();
156 157 updateObject.setId(id);
157 158 updateObject.setStatus(status);
158 159 roleMapper.updateById(updateObject);
... ... @@ -165,7 +166,7 @@ public class RoleServiceImpl implements RoleService {
165 166 // 校验是否可以更新
166 167 checkUpdateRole(id);
167 168 // 更新数据范围
168   - SysRoleDO updateObject = new SysRoleDO();
  169 + RoleDO updateObject = new RoleDO();
169 170 updateObject.setId(id);
170 171 updateObject.setDataScope(dataScope);
171 172 updateObject.setDataScopeDeptIds(dataScopeDeptIds);
... ... @@ -195,17 +196,17 @@ public class RoleServiceImpl implements RoleService {
195 196 }
196 197  
197 198 @Override
198   - public SysRoleDO getRoleFromCache(Long id) {
  199 + public RoleDO getRoleFromCache(Long id) {
199 200 return roleCache.get(id);
200 201 }
201 202  
202 203 @Override
203   - public List<SysRoleDO> getRoles(@Nullable Collection<Integer> statuses) {
  204 + public List<RoleDO> getRoles(@Nullable Collection<Integer> statuses) {
204 205 return roleMapper.selectListByStatus(statuses);
205 206 }
206 207  
207 208 @Override
208   - public List<SysRoleDO> getRolesFromCache(Collection<Long> ids) {
  209 + public List<RoleDO> getRolesFromCache(Collection<Long> ids) {
209 210 if (CollectionUtil.isEmpty(ids)) {
210 211 return Collections.emptyList();
211 212 }
... ... @@ -214,7 +215,7 @@ public class RoleServiceImpl implements RoleService {
214 215 }
215 216  
216 217 @Override
217   - public boolean hasAnyAdmin(Collection<SysRoleDO> roleList) {
  218 + public boolean hasAnyAdmin(Collection<RoleDO> roleList) {
218 219 if (CollectionUtil.isEmpty(roleList)) {
219 220 return false;
220 221 }
... ... @@ -222,17 +223,17 @@ public class RoleServiceImpl implements RoleService {
222 223 }
223 224  
224 225 @Override
225   - public SysRoleDO getRole(Long id) {
  226 + public RoleDO getRole(Long id) {
226 227 return roleMapper.selectById(id);
227 228 }
228 229  
229 230 @Override
230   - public PageResult<SysRoleDO> getRolePage(RolePageReqVO reqVO) {
  231 + public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) {
231 232 return roleMapper.selectPage(reqVO);
232 233 }
233 234  
234 235 @Override
235   - public List<SysRoleDO> getRoleList(RoleExportReqVO reqVO) {
  236 + public List<RoleDO> getRoleList(RoleExportReqVO reqVO) {
236 237 return roleMapper.listRoles(reqVO);
237 238 }
238 239  
... ... @@ -249,7 +250,7 @@ public class RoleServiceImpl implements RoleService {
249 250 @VisibleForTesting
250 251 public void checkDuplicateRole(String name, String code, Long id) {
251 252 // 1. 该 name 名字被其它角色所使用
252   - SysRoleDO role = roleMapper.selectByName(name);
  253 + RoleDO role = roleMapper.selectByName(name);
253 254 if (role != null && !role.getId().equals(id)) {
254 255 throw exception(ROLE_NAME_DUPLICATE, name);
255 256 }
... ... @@ -271,7 +272,7 @@ public class RoleServiceImpl implements RoleService {
271 272 */
272 273 @VisibleForTesting
273 274 public void checkUpdateRole(Long id) {
274   - SysRoleDO roleDO = roleMapper.selectById(id);
  275 + RoleDO roleDO = roleMapper.selectById(id);
275 276 if (roleDO == null) {
276 277 throw exception(ROLE_NOT_EXISTS);
277 278 }
... ... @@ -281,4 +282,23 @@ public class RoleServiceImpl implements RoleService {
281 282 }
282 283 }
283 284  
  285 + @Override
  286 + public void validRoles(Collection<Long> ids) {
  287 + if (CollUtil.isEmpty(ids)) {
  288 + return;
  289 + }
  290 + // 获得角色信息
  291 + List<RoleDO> roles = roleMapper.selectBatchIds(ids);
  292 + Map<Long, RoleDO> roleMap = CollectionUtils.convertMap(roles, RoleDO::getId);
  293 + // 校验
  294 + ids.forEach(id -> {
  295 + RoleDO role = roleMap.get(id);
  296 + if (role == null) {
  297 + throw exception(ROLE_NOT_EXISTS);
  298 + }
  299 + if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) {
  300 + throw exception(ROLE_IS_DISABLE, role.getName());
  301 + }
  302 + });
  303 + }
284 304 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/SysPermissionCoreService.java deleted
1   -package cn.iocoder.yudao.module.system.service.permission;
2   -
3   -import java.util.Collection;
4   -import java.util.Set;
5   -/**
6   - * 权限 Core Service 接口
7   - *
8   - * 提供用户-角色、角色-菜单、角色-部门的关联权限处理
9   - *
10   - * @author 芋道源码
11   - */
12   -public interface SysPermissionCoreService {
13   - /**
14   - * 获得拥有多个角色的用户编号集合
15   - *
16   - * @param roleIds 角色编号集合
17   - * @return 用户编号集合
18   - */
19   - Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds);
20   -}