Commit 8e2388d52db129add6b1ddf753375dbdec155fbf

Authored by YunaiV
1 parent d6040214

短信发送的逻辑,迁移到 yudao-core-service 模块下

Showing 77 changed files with 1008 additions and 630 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
... ... @@ -4,13 +4,13 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.*;
4 4 import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert;
5 5 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO;
6 6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
8 7 import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum;
9 8 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
10 9 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
11 10 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
12 11 import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
13   -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  13 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
14 14 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
15 15 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16 16 import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
... ... @@ -43,7 +43,7 @@ public class SysAuthController {
43 43 @Resource
44 44 private SysAuthService authService;
45 45 @Resource
46   - private SysUserService userService;
  46 + private SysUserCoreService userCoreService;
47 47 @Resource
48 48 private SysRoleService roleService;
49 49 @Resource
... ... @@ -64,7 +64,7 @@ public class SysAuthController {
64 64 @ApiOperation("获取登录用户的权限信息")
65 65 public CommonResult<SysAuthPermissionInfoRespVO> getPermissionInfo() {
66 66 // 获得用户信息
67   - SysUserDO user = userService.getUser(getLoginUserId());
  67 + SysUserDO user = userCoreService.getUser(getLoginUserId());
68 68 if (user == null) {
69 69 return null;
70 70 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysUserSessionController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.auth;
2 2  
3   -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
4   -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
5   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 3 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageItemRespVO;
8 4 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysUserSessionConvert;
10 6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
12 7 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService;
13 8 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
14 9 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  10 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  12 +import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
  13 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  14 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 15 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
16 16 import io.swagger.annotations.Api;
17 17 import io.swagger.annotations.ApiImplicitParam;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/logger/SysOperateLogController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.logger;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5   -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6   -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 3 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO;
8 4 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
10 6 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO;
11 7 import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysOperateLogConvert;
12 8 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO;
13   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
14 9 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysOperateLogService;
15 10 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  12 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  13 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
16 14 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
17 15 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  16 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  17 +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
18 18 import io.swagger.annotations.Api;
19 19 import io.swagger.annotations.ApiOperation;
20 20 import org.springframework.security.access.prepost.PreAuthorize;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SmsCallbackController.java
... ... @@ -2,10 +2,10 @@ package cn.iocoder.yudao.adminserver.modules.system.controller.sms;
2 2  
3 3 import cn.hutool.core.util.URLUtil;
4 4 import cn.hutool.extra.servlet.ServletUtil;
  5 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
5 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 7 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 8 import cn.iocoder.yudao.framework.sms.core.enums.SmsChannelEnum;
8   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsService;
9 9 import io.swagger.annotations.Api;
10 10 import io.swagger.annotations.ApiImplicitParam;
11 11 import io.swagger.annotations.ApiOperation;
... ... @@ -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 SysSmsService smsService;
  28 + private SysSmsCoreService 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 文档")
... ... @@ -33,7 +33,7 @@ public class SmsCallbackController {
33 33 @OperateLog(enable = false)
34 34 public String receiveYunpianSmsStatus(@RequestParam("sms_status") String smsStatus) throws Throwable {
35 35 String text = URLUtil.decode(smsStatus); // decode 解码参数,因为它被 encode
36   - smsService.receiveSmsStatus(SmsChannelEnum.YUN_PIAN.getCode(), text);
  36 + smsCoreService.receiveSmsStatus(SmsChannelEnum.YUN_PIAN.getCode(), text);
37 37 return "SUCCESS"; // 约定返回 SUCCESS 为成功
38 38 }
39 39  
... ... @@ -42,7 +42,7 @@ public class SmsCallbackController {
42 42 @OperateLog(enable = false)
43 43 public CommonResult<Boolean> receiveAliyunSmsStatus(HttpServletRequest request) throws Throwable {
44 44 String text = ServletUtil.getBody(request);
45   - smsService.receiveSmsStatus(SmsChannelEnum.ALIYUN.getCode(), text);
  45 + smsCoreService.receiveSmsStatus(SmsChannelEnum.ALIYUN.getCode(), text);
46 46 return success(true);
47 47 }
48 48  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsChannelController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.*;
6 4 import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsChannelConvert;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
8 5 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  7 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 9 import io.swagger.annotations.Api;
10 10 import io.swagger.annotations.ApiImplicitParam;
11 11 import io.swagger.annotations.ApiOperation;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsLogController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5   -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6   -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExcelVO;
8 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
10 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogRespVO;
11 7 import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsLogConvert;
12   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
13 8 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsLogService;
  9 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  10 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  11 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  12 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  13 +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
14 14 import io.swagger.annotations.Api;
15 15 import io.swagger.annotations.ApiOperation;
16 16 import org.springframework.security.access.prepost.PreAuthorize;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/sms/SysSmsTemplateController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.sms;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.*;
  4 +import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsTemplateConvert;
  5 +import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
3 8 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 10 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6 11 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.*;
8   -import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsTemplateConvert;
9   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
10   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsService;
11   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
12 12 import io.swagger.annotations.Api;
13 13 import io.swagger.annotations.ApiImplicitParam;
14 14 import io.swagger.annotations.ApiOperation;
... ... @@ -32,7 +32,7 @@ public class SysSmsTemplateController {
32 32 @Resource
33 33 private SysSmsTemplateService smsTemplateService;
34 34 @Resource
35   - private SysSmsService smsService;
  35 + private SysSmsCoreService smsCoreService;
36 36  
37 37 @PostMapping("/create")
38 38 @ApiOperation("创建短信模板")
... ... @@ -91,7 +91,7 @@ public class SysSmsTemplateController {
91 91 @ApiOperation("发送短信")
92 92 @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')")
93 93 public CommonResult<Long> sendSms(@Valid @RequestBody SysSmsTemplateSendReqVO sendReqVO) {
94   - return success(smsService.sendSingleSms(sendReqVO.getMobile(), null, null,
  94 + return success(smsCoreService.sendSingleSms(sendReqVO.getMobile(), null, null,
95 95 sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
96 96 }
97 97  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.user;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
8   -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
9 4 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
10 5 import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
11 6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
12   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
13   -import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
14 7 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
15 8 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  9 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  10 +import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
  11 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
  12 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  13 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  14 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
16 15 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
17 16 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  17 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  18 +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
18 19 import io.swagger.annotations.Api;
19 20 import io.swagger.annotations.ApiImplicitParam;
20 21 import io.swagger.annotations.ApiImplicitParams;
... ... @@ -42,6 +43,8 @@ public class SysUserController {
42 43 @Resource
43 44 private SysUserService userService;
44 45 @Resource
  46 + private SysUserCoreService userCoreService;
  47 + @Resource
45 48 private SysDeptService deptService;
46 49  
47 50 @PostMapping("/create")
... ... @@ -113,7 +116,7 @@ public class SysUserController {
113 116 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
114 117 @PreAuthorize("@ss.hasPermission('system:user:query')")
115 118 public CommonResult<SysUserRespVO> getInfo(@RequestParam("id") Long id) {
116   - return success(SysUserConvert.INSTANCE.convert(userService.getUser(id)));
  119 + return success(SysUserConvert.INSTANCE.convert(userCoreService.getUser(id)));
117 120 }
118 121  
119 122 @GetMapping("/export")
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.controller.user;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
5   -import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
6   -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
7   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 4 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
10 6 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
... ... @@ -12,12 +8,17 @@ import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
12 8 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
13 9 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
14 10 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
15   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  11 +import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
16 12 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
17 13 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
18 14 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
19 15 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
  16 +import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
20 17 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  18 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  19 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
  20 +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
  21 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
21 22 import io.swagger.annotations.Api;
22 23 import io.swagger.annotations.ApiOperation;
23 24 import lombok.extern.slf4j.Slf4j;
... ... @@ -30,9 +31,9 @@ import javax.validation.Valid;
30 31 import java.io.IOException;
31 32 import java.util.List;
32 33  
  34 +import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY;
33 35 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
34 36 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
35   -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY;
36 37  
37 38 @Api(tags = "用户个人中心")
38 39 @RestController
... ... @@ -44,6 +45,8 @@ public class SysUserProfileController {
44 45 @Resource
45 46 private SysUserService userService;
46 47 @Resource
  48 + private SysUserCoreService userCoreService;
  49 + @Resource
47 50 private SysDeptService deptService;
48 51 @Resource
49 52 private SysPostService postService;
... ... @@ -58,7 +61,7 @@ public class SysUserProfileController {
58 61 @ApiOperation("获得登录用户信息")
59 62 public CommonResult<SysUserProfileRespVO> profile() {
60 63 // 获得用户基本信息
61   - SysUserDO user = userService.getUser(getLoginUserId());
  64 + SysUserDO user = userCoreService.getUser(getLoginUserId());
62 65 SysUserProfileRespVO resp = SysUserConvert.INSTANCE.convert03(user);
63 66 // 获得用户角色
64 67 List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.listUserRoleIs(user.getId()));
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserImportExcelVO.java
... ... @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
8 8 import lombok.Builder;
9 9 import lombok.Data;
10 10 import lombok.NoArgsConstructor;
  11 +import lombok.experimental.Accessors;
11 12  
12 13 /**
13 14 * 用户 Excel 导入 VO
... ... @@ -16,6 +17,7 @@ import lombok.NoArgsConstructor;
16 17 @Builder
17 18 @AllArgsConstructor
18 19 @NoArgsConstructor
  20 +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
19 21 public class SysUserImportExcelVO {
20 22  
21 23 @ExcelProperty("登录名称")
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/auth/SysAuthConvert.java
... ... @@ -2,18 +2,13 @@ package cn.iocoder.yudao.adminserver.modules.system.convert.auth;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO;
4 4 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO;
5   -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO;
6   -import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO;
10 6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
12 7 import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuIdEnum;
  8 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
13 9 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
14 10 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
15 11 import cn.iocoder.yudao.framework.security.core.LoginUser;
16   -import me.zhyd.oauth.model.AuthCallback;
17 12 import org.mapstruct.Mapper;
18 13 import org.mapstruct.Mapping;
19 14 import org.mapstruct.factory.Mappers;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/logger/SysOperateLogConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.logger;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExcelVO;
6 4 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogRespVO;
7 5 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  7 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  9 +import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
10 10 import org.mapstruct.Mapper;
11 11 import org.mapstruct.factory.Mappers;
12 12  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsChannelConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO;
6 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelRespVO;
7 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelSimpleRespVO;
8 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
9   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
10 10 import org.mapstruct.Mapper;
11 11 import org.mapstruct.factory.Mappers;
12 12  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsLogConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExcelVO;
5 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogRespVO;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 7 import org.mapstruct.Mapper;
8 8 import org.mapstruct.factory.Mappers;
9 9  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/sms/SysSmsTemplateConvert.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.convert.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO;
5 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExcelVO;
6 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateRespVO;
7 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 9 import org.mapstruct.Mapper;
10 10 import org.mapstruct.factory.Mappers;
11 11  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
... ... @@ -8,7 +8,7 @@ import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO
8 8 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
9 9 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
10 10 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
12 12 import org.mapstruct.Mapper;
13 13 import org.mapstruct.factory.Mappers;
14 14  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/logger/SysOperateLogDO.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
5 6 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
7 7 import com.baomidou.mybatisplus.annotation.TableField;
8 8 import com.baomidou.mybatisplus.annotation.TableId;
9 9 import com.baomidou.mybatisplus.annotation.TableName;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/social/SysSocialUserDO.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
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;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsChannelMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
3 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9 import org.apache.ibatis.annotations.Select;
10 10  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsLogMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
3 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
9 9 import org.apache.ibatis.annotations.Mapper;
10 10  
11 11 import java.util.List;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/sms/SysSmsTemplateMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms;
2 2  
  3 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;
  4 +import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
3 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
9 9 import org.apache.ibatis.annotations.Mapper;
10   -import org.apache.ibatis.annotations.Select;
11 10  
12   -import java.util.Date;
13 11 import java.util.List;
14 12  
15 13 @Mapper
... ... @@ -47,7 +45,4 @@ public interface SysSmsTemplateMapper extends BaseMapperX&lt;SysSmsTemplateDO&gt; {
47 45 return selectCount("channel_id", channelId);
48 46 }
49 47  
50   - @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1")
51   - Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
52   -
53 48 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 6 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6 7 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserExportReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11  
... ... @@ -19,14 +19,14 @@ public interface SysUserMapper extends BaseMapperX&lt;SysUserDO&gt; {
19 19 return selectOne(new QueryWrapper<SysUserDO>().eq("username", username));
20 20 }
21 21  
22   - default SysUserDO selectByMobile(String mobile) {
23   - return selectOne(new QueryWrapper<SysUserDO>().eq("mobile", mobile));
24   - }
25   -
26 22 default SysUserDO selectByEmail(String email) {
27 23 return selectOne(new QueryWrapper<SysUserDO>().eq("email", email));
28 24 }
29 25  
  26 + default SysUserDO selectByMobile(String mobile) {
  27 + return selectOne(new QueryWrapper<SysUserDO>().eq("mobile", mobile));
  28 + }
  29 +
30 30 default PageResult<SysUserDO> selectPage(SysUserPageReqVO reqVO, Collection<Long> deptIds) {
31 31 return selectPage(reqVO, new QueryWrapperX<SysUserDO>()
32 32 .likeIfPresent("username", reqVO.getUsername())
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.enums;
2 2  
3 3 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
  4 +import javafx.beans.binding.MapExpression;
4 5  
5 6 /**
6 7 * System 错误码枚举类
... ... @@ -85,10 +86,6 @@ public interface SysErrorCodeConstants {
85 86 ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1002011000, "短信模板不存在");
86 87 ErrorCode SMS_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1002011001, "已经存在编码为【{}】的短信模板");
87 88  
88   - // ========== 短信发送 1002012000 ==========
89   - ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在");
90   - ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失");
91   -
92 89 // ========== 错误码模块 1002013000 ==========
93 90 ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误码不存在");
94 91 ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "已经存在编码为【{}】的错误码");
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsSendConsumer.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
  4 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
3 5 import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;
4   -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsSendMessage;
5   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsService;
6 6 import lombok.extern.slf4j.Slf4j;
7 7 import org.springframework.stereotype.Component;
8 8  
... ... @@ -19,12 +19,12 @@ import javax.annotation.Resource;
19 19 public class SysSmsSendConsumer extends AbstractStreamMessageListener<SysSmsSendMessage> {
20 20  
21 21 @Resource
22   - private SysSmsService smsService;
  22 + private SysSmsCoreService smsCoreService;
23 23  
24 24 @Override
25 25 public void onMessage(SysSmsSendMessage message) {
26 26 log.info("[onMessage][消息内容({})]", message);
27   - smsService.doSendSms(message);
  27 + smsCoreService.doSendSms(message);
28 28 }
29 29  
30 30 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/consumer/sms/SysSmsTemplateRefreshConsumer.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.mq.consumer.sms;
2 2  
3   -import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
4 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage;
5   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
  4 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService;
  5 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
6 6 import lombok.extern.slf4j.Slf4j;
7 7 import org.springframework.stereotype.Component;
8 8  
... ... @@ -18,12 +18,12 @@ import javax.annotation.Resource;
18 18 public class SysSmsTemplateRefreshConsumer extends AbstractChannelMessageListener<SysSmsTemplateRefreshMessage> {
19 19  
20 20 @Resource
21   - private SysSmsTemplateService smsTemplateService;
  21 + private SysSmsTemplateCoreService smsTemplateCoreService;
22 22  
23 23 @Override
24 24 public void onMessage(SysSmsTemplateRefreshMessage message) {
25 25 log.info("[onMessage][收到 SmsTemplate 刷新消息]");
26   - smsTemplateService.initLocalCache();
  26 + smsTemplateCoreService.initLocalCache();
27 27 }
28 28  
29 29 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/sms/SysSmsProducer.java
... ... @@ -3,7 +3,6 @@ package cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms;
3 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 4 import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;
5 5 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage;
6   -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsSendMessage;
7 6 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage;
8 7 import lombok.extern.slf4j.Slf4j;
9 8 import org.springframework.data.redis.core.StringRedisTemplate;
... ... @@ -26,22 +25,6 @@ public class SysSmsProducer {
26 25 private StringRedisTemplate stringRedisTemplate;
27 26  
28 27 /**
29   - * 发送 {@link SysSmsSendMessage} 消息
30   - *
31   - * @param logId 短信日志编号
32   - * @param mobile 手机号
33   - * @param channelId 渠道编号
34   - * @param apiTemplateId 短信模板编号
35   - * @param templateParams 短信模板参数
36   - */
37   - public void sendSmsSendMessage(Long logId, String mobile,
38   - Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
39   - SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile);
40   - message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
41   - RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message);
42   - }
43   -
44   - /**
45 28 * 发送 {@link SysSmsChannelRefreshMessage} 消息
46 29 */
47 30 public void sendSmsChannelRefreshMessage() {
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
... ... @@ -7,7 +7,6 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAu
7 7 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO;
8 8 import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert;
9 9 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
10   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
11 10 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
12 11 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
13 12 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
... ... @@ -15,9 +14,11 @@ import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaServ
15 14 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
16 15 import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
17 16 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  17 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
18 18 import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
19 19 import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
20 20 import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
  21 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
21 22 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
22 23 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
23 24 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
... ... @@ -62,6 +63,8 @@ public class SysAuthServiceImpl implements SysAuthService {
62 63 @Resource
63 64 private SysUserService userService;
64 65 @Resource
  66 + private SysUserCoreService userCoreService;
  67 + @Resource
65 68 private SysPermissionService permissionService;
66 69 @Resource
67 70 private SysCaptchaService captchaService;
... ... @@ -86,7 +89,7 @@ public class SysAuthServiceImpl implements SysAuthService {
86 89 @Override
87 90 public LoginUser mockLogin(Long userId) {
88 91 // 获取用户编号对应的 SysUserDO
89   - SysUserDO user = userService.getUser(userId);
  92 + SysUserDO user = userCoreService.getUser(userId);
90 93 if (user == null) {
91 94 throw new UsernameNotFoundException(String.valueOf(userId));
92 95 }
... ... @@ -201,7 +204,7 @@ public class SysAuthServiceImpl implements SysAuthService {
201 204 }
202 205  
203 206 // 自动登录
204   - SysUserDO user = userService.getUser(socialUsers.get(0).getUserId());
  207 + SysUserDO user = userCoreService.getUser(socialUsers.get(0).getUserId());
205 208 if (user == null) {
206 209 throw exception(USER_NOT_EXISTS);
207 210 }
... ... @@ -292,7 +295,7 @@ public class SysAuthServiceImpl implements SysAuthService {
292 295 }
293 296  
294 297 // 重新加载 SysUserDO 信息
295   - SysUserDO user = userService.getUser(loginUser.getId());
  298 + SysUserDO user = userCoreService.getUser(loginUser.getId());
296 299 if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) {
297 300 throw exception(AUTH_TOKEN_EXPIRED); // 校验 token 时,用户被禁用的情况下,也认为 token 过期,方便前端跳转到登录界面
298 301 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysUserSessionServiceImpl.java
... ... @@ -3,18 +3,16 @@ package cn.iocoder.yudao.adminserver.modules.system.service.auth.impl;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.StrUtil;
5 5 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
7 6 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth.SysUserSessionMapper;
8 7 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
9 8 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
10 9 import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysUserSessionService;
11   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
12 10 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
13 11 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
14 13 import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO;
15 14 import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
16 15 import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
17   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
18 16 import cn.iocoder.yudao.framework.common.pojo.PageResult;
19 17 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
20 18 import com.google.common.collect.Lists;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/impl/SysOperateLogServiceImpl.java
... ... @@ -2,17 +2,17 @@ package cn.iocoder.yudao.adminserver.modules.system.service.logger.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.StrUtil;
5   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
7 5 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
8 6 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
9 7 import cn.iocoder.yudao.adminserver.modules.system.convert.logger.SysOperateLogConvert;
10 8 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
12 9 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysOperateLogMapper;
13 10 import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysOperateLogService;
14 11 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  13 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 14 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
  15 +import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
16 16 import lombok.extern.slf4j.Slf4j;
17 17 import org.springframework.scheduling.annotation.Async;
18 18 import org.springframework.scheduling.annotation.AsyncResult;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO;
5 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO;
6 7 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
8 8  
9 9 import javax.validation.Valid;
10 10 import java.util.Collection;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
5 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 7  
9   -import java.util.Date;
10 8 import java.util.List;
11   -import java.util.Map;
12 9  
13 10 /**
14   - * 短信日志 Service 实现类
  11 + * 短信日志 Service 接口
15 12 *
16 13 * @author zzf
17 14 * @date 13:48 2021/3/2
... ... @@ -19,46 +16,6 @@ import java.util.Map;
19 16 public interface SysSmsLogService {
20 17  
21 18 /**
22   - * 创建短信日志
23   - *
24   - * @param mobile 手机号
25   - * @param userId 用户编号
26   - * @param userType 用户类型
27   - * @param isSend 是否发送
28   - * @param template 短信模板
29   - * @param templateContent 短信内容
30   - * @param templateParams 短信参数
31   - * @return 发送日志编号
32   - */
33   - Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
34   - SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams);
35   -
36   - /**
37   - * 更新日志的发送结果
38   - *
39   - * @param id 日志编号
40   - * @param sendCode 发送结果的编码
41   - * @param sendMsg 发送结果的提示
42   - * @param apiSendCode 短信 API 发送结果的编码
43   - * @param apiSendMsg 短信 API 发送失败的提示
44   - * @param apiRequestId 短信 API 发送返回的唯一请求 ID
45   - * @param apiSerialNo 短信 API 发送返回的序号
46   - */
47   - void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
48   - String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo);
49   -
50   - /**
51   - * 更新日志的接收结果
52   - *
53   - * @param id 日志编号
54   - * @param success 是否接收成功
55   - * @param receiveTime 用户接收时间
56   - * @param apiReceiveCode API 接收结果的编码
57   - * @param apiReceiveMsg API 接收结果的说明
58   - */
59   - void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg);
60   -
61   - /**
62 19 * 获得短信日志分页
63 20 *
64 21 * @param pageReqVO 分页查询
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO;
5 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;
6 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;
7 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 9  
10 10 import javax.validation.Valid;
11 11 import java.util.Collection;
12 12 import java.util.List;
13   -import java.util.Map;
14 13  
15 14 /**
16 15 * 短信模板 Service 接口
... ... @@ -21,11 +20,6 @@ import java.util.Map;
21 20 public interface SysSmsTemplateService {
22 21  
23 22 /**
24   - * 初始化短信模板的本地缓存
25   - */
26   - void initLocalCache();
27   -
28   - /**
29 23 * 获得短信模板
30 24 *
31 25 * @param code 模板编码
... ... @@ -34,23 +28,6 @@ public interface SysSmsTemplateService {
34 28 SysSmsTemplateDO getSmsTemplateByCode(String code);
35 29  
36 30 /**
37   - * 获得短信模板,从缓存中
38   - *
39   - * @param code 模板编码
40   - * @return 短信模板
41   - */
42   - SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code);
43   -
44   - /**
45   - * 格式化短信内容
46   - *
47   - * @param content 短信模板的内容
48   - * @param params 内容的参数
49   - * @return 格式化后的内容
50   - */
51   - String formatSmsTemplateContent(String content, Map<String, Object> params);
52   -
53   - /**
54 31 * 创建短信模板
55 32 *
56 33 * @param createReqVO 创建信息
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5   -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6   -import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
7   -import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
8 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO;
10 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
11 7 import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsChannelConvert;
12   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
13 8 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsChannelMapper;
14 9 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
15 10 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService;
16 11 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  13 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  14 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  15 +import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
  16 +import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
17 17 import lombok.extern.slf4j.Slf4j;
18 18 import org.springframework.scheduling.annotation.Scheduled;
19 19 import org.springframework.stereotype.Service;
... ... @@ -25,9 +25,9 @@ import java.util.Comparator;
25 25 import java.util.Date;
26 26 import java.util.List;
27 27  
28   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 28 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN;
30 29 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS;
  30 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
31 31  
32 32 /**
33 33 * 短信渠道Service实现类
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsLogServiceImpl.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl;
2 2  
3   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 3 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
6 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
8   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
9 5 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsLogMapper;
10   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsReceiveStatusEnum;
11   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsSendStatusEnum;
12 6 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsLogService;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 9 import lombok.extern.slf4j.Slf4j;
14 10 import org.springframework.stereotype.Service;
15 11  
16 12 import javax.annotation.Resource;
17   -import java.util.Date;
18 13 import java.util.List;
19   -import java.util.Map;
20   -import java.util.Objects;
21 14  
22 15 /**
23 16 * 短信日志 Service 实现类
... ... @@ -33,47 +26,6 @@ public class SysSmsLogServiceImpl implements SysSmsLogService {
33 26 private SysSmsLogMapper smsLogMapper;
34 27  
35 28 @Override
36   - public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
37   - SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams) {
38   - SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder();
39   - // 根据是否要发送,设置状态
40   - logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus()
41   - : SysSmsSendStatusEnum.IGNORE.getStatus());
42   - // 设置手机相关字段
43   - logBuilder.mobile(mobile).userId(userId).userType(userType);
44   - // 设置模板相关字段
45   - logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType());
46   - logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId());
47   - // 设置渠道相关字段
48   - logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode());
49   - // 设置接收相关字段
50   - logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus());
51   -
52   - // 插入数据库
53   - SysSmsLogDO logDO = logBuilder.build();
54   - smsLogMapper.insert(logDO);
55   - return logDO.getId();
56   - }
57   -
58   - @Override
59   - public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
60   - String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) {
61   - SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS
62   - : SysSmsSendStatusEnum.FAILURE;
63   - smsLogMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()).sendTime(new Date())
64   - .sendCode(sendCode).sendMsg(sendMsg).apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
65   - .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build());
66   - }
67   -
68   - @Override
69   - public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg) {
70   - SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? SysSmsReceiveStatusEnum.SUCCESS
71   - : SysSmsReceiveStatusEnum.FAILURE;
72   - smsLogMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()).receiveTime(receiveTime)
73   - .apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build());
74   - }
75   -
76   - @Override
77 29 public PageResult<SysSmsLogDO> getSmsLogPage(SysSmsLogPageReqVO pageReqVO) {
78 30 return smsLogMapper.selectPage(pageReqVO);
79 31 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl;
2 2  
3   -import cn.hutool.core.collection.CollUtil;
4 3 import cn.hutool.core.util.ReUtil;
5   -import cn.hutool.core.util.StrUtil;
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.dataobject.BaseDO;
9   -import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
10   -import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
11   -import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
12   -import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
13 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO;
14 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;
15 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;
16 7 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO;
17 8 import cn.iocoder.yudao.adminserver.modules.system.convert.sms.SysSmsTemplateConvert;
18   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
19   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
20 9 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
21 10 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
22 11 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsChannelService;
23 12 import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
  13 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  14 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  15 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  16 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  17 +import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
  18 +import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
  19 +import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
  20 +import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
24 21 import com.google.common.annotations.VisibleForTesting;
25   -import com.google.common.collect.ImmutableMap;
26 22 import lombok.extern.slf4j.Slf4j;
27   -import org.springframework.scheduling.annotation.Scheduled;
28 23 import org.springframework.stereotype.Service;
29 24 import org.springframework.util.Assert;
30 25  
31   -import javax.annotation.PostConstruct;
32 26 import javax.annotation.Resource;
33   -import java.util.*;
  27 +import java.util.Collection;
  28 +import java.util.List;
  29 +import java.util.Objects;
34 30 import java.util.regex.Pattern;
35 31  
36   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
37 32 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
  33 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
38 34  
39 35 /**
40 36 * 短信模板Service实现类
... ... @@ -51,24 +47,6 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
51 47 */
52 48 private static final Pattern PATTERN_PARAMS = Pattern.compile("\\{(.*?)}");
53 49  
54   - /**
55   - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
56   - * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高
57   - */
58   - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
59   -
60   - /**
61   - * 短信模板缓存
62   - * key:短信模板编码 {@link SysSmsTemplateDO#getCode()}
63   - *
64   - * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
65   - */
66   - private volatile Map<String, SysSmsTemplateDO> smsTemplateCache;
67   - /**
68   - * 缓存短信模板的最大更新时间,用于后续的增量轮询,判断是否有更新
69   - */
70   - private volatile Date maxUpdateTime;
71   -
72 50 @Resource
73 51 private SysSmsTemplateMapper smsTemplateMapper;
74 52  
... ... @@ -81,68 +59,11 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
81 59 @Resource
82 60 private SysSmsProducer smsProducer;
83 61  
84   - /**
85   - * 初始化 {@link #smsTemplateCache} 缓存
86   - */
87   - @Override
88   - @PostConstruct
89   - public void initLocalCache() {
90   - // 获取短信模板列表,如果有更新
91   - List<SysSmsTemplateDO> smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime);
92   - if (CollUtil.isEmpty(smsTemplateList)) {
93   - return;
94   - }
95   -
96   - // 写入缓存
97   - ImmutableMap.Builder<String, SysSmsTemplateDO> builder = ImmutableMap.builder();
98   - smsTemplateList.forEach(sysSmsTemplateDO -> builder.put(sysSmsTemplateDO.getCode(), sysSmsTemplateDO));
99   - smsTemplateCache = builder.build();
100   - assert smsTemplateList.size() > 0; // 断言,避免告警
101   - maxUpdateTime = smsTemplateList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
102   - log.info("[initLocalCache][初始化 SmsTemplate 数量为 {}]", smsTemplateList.size());
103   - }
104   -
105   - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
106   - public void schedulePeriodicRefresh() {
107   - initLocalCache();
108   - }
109   -
110   - /**
111   - * 如果短信模板发生变化,从数据库中获取最新的全量短信模板。
112   - * 如果未发生变化,则返回空
113   - *
114   - * @param maxUpdateTime 当前短信模板的最大更新时间
115   - * @return 短信模板列表
116   - */
117   - private List<SysSmsTemplateDO> loadSmsTemplateIfUpdate(Date maxUpdateTime) {
118   - // 第一步,判断是否要更新。
119   - if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
120   - log.info("[loadSmsTemplateIfUpdate][首次加载全量短信模板]");
121   - } else { // 判断数据库中是否有更新的短信模板
122   - if (smsTemplateMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
123   - return null;
124   - }
125   - log.info("[loadSmsTemplateIfUpdate][增量加载全量短信模板]");
126   - }
127   - // 第二步,如果有更新,则从数据库加载所有短信模板
128   - return smsTemplateMapper.selectList();
129   - }
130   -
131 62 @Override
132 63 public SysSmsTemplateDO getSmsTemplateByCode(String code) {
133 64 return smsTemplateMapper.selectByCode(code);
134 65 }
135 66  
136   - @Override
137   - public SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code) {
138   - return smsTemplateCache.get(code);
139   - }
140   -
141   - @Override
142   - public String formatSmsTemplateContent(String content, Map<String, Object> params) {
143   - return StrUtil.format(content, params);
144   - }
145   -
146 67 @VisibleForTesting
147 68 public List<String> parseTemplateContentParams(String content) {
148 69 return ReUtil.findAllGroup1(PATTERN_PARAMS, content);
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.user;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 4 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
6 5 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
7   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserCreateReqVO;
8   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserExportReqVO;
9   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserImportExcelVO;
10   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserImportRespVO;
11   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageReqVO;
12   -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
13   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  6 +import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
14 9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
15 10  
16 11 import java.io.InputStream;
... ... @@ -105,14 +100,6 @@ public interface SysUserService {
105 100 SysUserDO getUserByUsername(String username);
106 101  
107 102 /**
108   - * 通过用户 ID 查询用户
109   - *
110   - * @param id 用户ID
111   - * @return 用户对象信息
112   - */
113   - SysUserDO getUser(Long id);
114   -
115   - /**
116 103 * 获得用户分页列表
117 104 *
118 105 * @param reqVO 分页条件
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
... ... @@ -11,12 +11,12 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
11 11 import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
12 12 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
13 13 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
14   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
15 14 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper;
16 15 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
17 16 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
18 17 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
19 18 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  19 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
20 20 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
21 21 import cn.iocoder.yudao.framework.common.exception.ServiceException;
22 22 import cn.iocoder.yudao.framework.common.pojo.PageResult;
... ... @@ -160,11 +160,6 @@ public class SysUserServiceImpl implements SysUserService {
160 160 }
161 161  
162 162 @Override
163   - public SysUserDO getUser(Long id) {
164   - return userMapper.selectById(id);
165   - }
166   -
167   - @Override
168 163 public PageResult<SysUserDO> getUserPage(SysUserPageReqVO reqVO) {
169 164 return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId()));
170 165 }
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.auth;
2 2  
3 3 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
4   -import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
5   -import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
6   -import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
7   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8   -import cn.iocoder.yudao.framework.security.core.LoginUser;
9 4 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthLoginReqVO;
10   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
11 5 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
12 6 import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
13 7 import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl;
14 8 import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService;
15 9 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
  10 +import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
16 11 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  13 +import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
  14 +import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
  15 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
  16 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  17 +import cn.iocoder.yudao.framework.security.core.LoginUser;
17 18 import cn.iocoder.yudao.framework.test.core.util.AssertUtils;
18 19 import org.junit.jupiter.api.Test;
19 20 import org.springframework.boot.test.mock.mockito.MockBean;
... ... @@ -51,6 +52,8 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
51 52 @MockBean
52 53 private SysUserService userService;
53 54 @MockBean
  55 + private SysUserCoreService userCoreService;
  56 + @MockBean
54 57 private SysPermissionService permissionService;
55 58 @MockBean
56 59 private AuthenticationManager authenticationManager;
... ... @@ -98,7 +101,7 @@ public class SysAuthServiceImplTest extends BaseDbUnitTest {
98 101 Long userId = randomLongId();
99 102 // mock 方法 01
100 103 SysUserDO user = randomPojo(SysUserDO.class, o -> o.setId(userId));
101   - when(userService.getUser(eq(userId))).thenReturn(user);
  104 + when(userCoreService.getUser(eq(userId))).thenReturn(user);
102 105 // mock 方法 02
103 106 Set<Long> roleIds = randomSet(Long.class);
104 107 when(permissionService.getUserRoleIds(eq(userId), eq(singleton(CommonStatusEnum.ENABLE.getStatus()))))
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysUserSessionServiceImplTest.java
... ... @@ -3,14 +3,13 @@ package cn.iocoder.yudao.adminserver.modules.system.service.auth;
3 3 import cn.hutool.core.date.DateUtil;
4 4 import cn.iocoder.yudao.adminserver.BaseDbAndRedisUnitTest;
5 5 import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
6   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
7 6 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.auth.SysUserSessionMapper;
8   -import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
9 7 import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysUserSessionServiceImpl;
10   -import cn.iocoder.yudao.adminserver.modules.system.service.logger.SysLoginLogService;
11 8 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
12 9 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.auth.SysUserSessionDO;
  10 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
13 11 import cn.iocoder.yudao.coreservice.modules.system.dal.redis.auth.SysLoginUserCoreRedisDAO;
  12 +import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
14 13 import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
15 14 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
16 15 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/logger/SysOperateLogServiceImplTest.java
... ... @@ -2,34 +2,35 @@ package cn.iocoder.yudao.adminserver.modules.system.service.logger;
2 2  
3 3 import cn.hutool.core.map.MapUtil;
4 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
5   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6   -import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
7   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
8   -import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
9   -import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
10   -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
11 5 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogExportReqVO;
12 6 import cn.iocoder.yudao.adminserver.modules.system.controller.logger.vo.operatelog.SysOperateLogPageReqVO;
13 7 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.logger.SysOperateLogDO;
14   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
15 8 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.logger.SysOperateLogMapper;
16   -import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
17 9 import cn.iocoder.yudao.adminserver.modules.system.service.logger.impl.SysOperateLogServiceImpl;
18 10 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
19   -import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  12 +import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
  13 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  14 +import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
  15 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  16 +import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
20 17 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  18 +import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;
  19 +import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
  20 +import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
21 21 import org.junit.jupiter.api.Test;
22 22 import org.springframework.boot.test.mock.mockito.MockBean;
23 23 import org.springframework.context.annotation.Import;
24 24  
25 25 import javax.annotation.Resource;
26   -import java.util.*;
  26 +import java.util.Collections;
  27 +import java.util.List;
27 28 import java.util.concurrent.ExecutionException;
28 29 import java.util.concurrent.Future;
29 30  
  31 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
30 32 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
31 33 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
32   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
33 34 import static org.junit.jupiter.api.Assertions.assertEquals;
34 35 import static org.mockito.Mockito.when;
35 36  
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelServiceTest.java
... ... @@ -2,18 +2,18 @@ package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
3 3 import cn.hutool.core.bean.BeanUtil;
4 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
5   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
8 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelCreateReqVO;
9 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelPageReqVO;
10 7 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
12 8 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsChannelMapper;
13 9 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
14 10 import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsChannelServiceImpl;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  12 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  13 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 14 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
16 15 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  16 +import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
17 17 import org.junit.jupiter.api.Test;
18 18 import org.springframework.boot.test.mock.mockito.MockBean;
19 19 import org.springframework.context.annotation.Import;
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsLogServiceTest.java
... ... @@ -2,35 +2,32 @@ package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
3 3 import cn.hutool.core.map.MapUtil;
4 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
5   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
6   -import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
9 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
10   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsLogDO;
11   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
12 7 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsLogMapper;
13   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsReceiveStatusEnum;
14   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsSendStatusEnum;
15   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsTemplateTypeEnum;
16 8 import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsLogServiceImpl;
  9 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  10 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
  11 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
  12 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
  13 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  14 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 15 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
18 16 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
19 17 import org.junit.jupiter.api.Test;
20 18 import org.springframework.context.annotation.Import;
21 19  
22 20 import javax.annotation.Resource;
23   -import java.util.Date;
24 21 import java.util.List;
25 22 import java.util.Map;
26 23 import java.util.function.Consumer;
27 24  
28   -import static cn.hutool.core.util.RandomUtil.randomBoolean;
29 25 import static cn.hutool.core.util.RandomUtil.randomEle;
30   -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
31 26 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
32   -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
33   -import static org.junit.jupiter.api.Assertions.*;
  27 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
  28 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  29 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
  30 +import static org.junit.jupiter.api.Assertions.assertEquals;
34 31  
35 32 /**
36 33 * {@link SysSmsLogServiceImpl} 的单元测试类
... ... @@ -47,93 +44,6 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
47 44 private SysSmsLogMapper smsLogMapper;
48 45  
49 46 @Test
50   - public void testCreateSmsLog() {
51   - // 准备参数
52   - String mobile = randomString();
53   - Long userId = randomLongId();
54   - Integer userType = randomEle(UserTypeEnum.values()).getValue();
55   - Boolean isSend = randomBoolean();
56   - SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class,
57   - o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()));
58   - String templateContent = randomString();
59   - Map<String, Object> templateParams = randomTemplateParams();
60   - // mock 方法
61   -
62   - // 调用
63   - Long logId = smsLogService.createSmsLog(mobile, userId, userType, isSend,
64   - templateDO, templateContent, templateParams);
65   - // 断言
66   - SysSmsLogDO logDO = smsLogMapper.selectById(logId);
67   - assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(),
68   - logDO.getSendStatus());
69   - assertEquals(mobile, logDO.getMobile());
70   - assertEquals(userType, logDO.getUserType());
71   - assertEquals(userId, logDO.getUserId());
72   - assertEquals(templateDO.getId(), logDO.getTemplateId());
73   - assertEquals(templateDO.getCode(), logDO.getTemplateCode());
74   - assertEquals(templateDO.getType(), logDO.getTemplateType());
75   - assertEquals(templateDO.getChannelId(), logDO.getChannelId());
76   - assertEquals(templateDO.getChannelCode(), logDO.getChannelCode());
77   - assertEquals(templateContent, logDO.getTemplateContent());
78   - assertEquals(templateParams, logDO.getTemplateParams());
79   - assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus());
80   - }
81   -
82   - @Test
83   - public void testUpdateSmsSendResult() {
84   - // mock 数据
85   - SysSmsLogDO dbSmsLog = randomSmsLogDO(
86   - o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()));
87   - smsLogMapper.insert(dbSmsLog);
88   - // 准备参数
89   - Long id = dbSmsLog.getId();
90   - Integer sendCode = randomInteger();
91   - String sendMsg = randomString();
92   - String apiSendCode = randomString();
93   - String apiSendMsg = randomString();
94   - String apiRequestId = randomString();
95   - String apiSerialNo = randomString();
96   -
97   - // 调用
98   - smsLogService.updateSmsSendResult(id, sendCode, sendMsg,
99   - apiSendCode, apiSendMsg, apiRequestId, apiSerialNo);
100   - // 断言
101   - dbSmsLog = smsLogMapper.selectById(id);
102   - assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus()
103   - : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus());
104   - assertNotNull(dbSmsLog.getSendTime());
105   - assertEquals(sendMsg, dbSmsLog.getSendMsg());
106   - assertEquals(apiSendCode, dbSmsLog.getApiSendCode());
107   - assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg());
108   - assertEquals(apiRequestId, dbSmsLog.getApiRequestId());
109   - assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
110   - }
111   -
112   - @Test
113   - public void testUpdateSmsReceiveResult() {
114   - // mock 数据
115   - SysSmsLogDO dbSmsLog = randomSmsLogDO(
116   - o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()));
117   - smsLogMapper.insert(dbSmsLog);
118   - // 准备参数
119   - Long id = dbSmsLog.getId();
120   - Boolean success = randomBoolean();
121   - Date receiveTime = randomDate();
122   - String apiReceiveCode = randomString();
123   - String apiReceiveMsg = randomString();
124   -
125   - // 调用
126   - smsLogService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg);
127   - // 断言
128   - dbSmsLog = smsLogMapper.selectById(id);
129   - assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
130   - : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
131   - assertEquals(receiveTime, dbSmsLog.getReceiveTime());
132   - assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode());
133   - assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
134   - }
135   -
136   - @Test
137 47 public void testGetSmsLogPage() {
138 48 // mock 数据
139 49 SysSmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsTemplateServiceTest.java
1 1 package cn.iocoder.yudao.adminserver.modules.system.service.sms;
2 2  
3 3 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
4   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5   -import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
6   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
8   -import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
9   -import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
10   -import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
11 4 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO;
12 5 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;
13 6 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;
14 7 import cn.iocoder.yudao.adminserver.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO;
15   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsChannelDO;
16   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
17 8 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
18   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsTemplateTypeEnum;
19 9 import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
20 10 import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsTemplateServiceImpl;
  11 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsChannelDO;
  12 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  13 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
  14 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  15 +import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
  16 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
21 17 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
22 18 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  19 +import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
  20 +import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
  21 +import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
  22 +import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
23 23 import com.google.common.collect.Lists;
24 24 import org.junit.jupiter.api.Test;
25 25 import org.springframework.boot.test.mock.mockito.MockBean;
26 26 import org.springframework.context.annotation.Import;
27 27  
28 28 import javax.annotation.Resource;
29   -import java.util.Date;
30 29 import java.util.List;
31   -import java.util.Map;
32 30 import java.util.function.Consumer;
33 31  
34   -import static cn.hutool.core.bean.BeanUtil.getFieldValue;
35 32 import static cn.hutool.core.util.RandomUtil.randomEle;
36 33 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
  34 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
37 35 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
38 36 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
39   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
40   -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max;
41 37 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
42 38 import static org.junit.jupiter.api.Assertions.*;
43 39 import static org.mockito.ArgumentMatchers.eq;
... ... @@ -67,27 +63,6 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
67 63 private SysSmsProducer smsProducer;
68 64  
69 65 @Test
70   - @SuppressWarnings("unchecked")
71   - void testInitLocalCache() {
72   - // mock 数据
73   - SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO();
74   - smsTemplateMapper.insert(smsTemplate01);
75   - SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO();
76   - smsTemplateMapper.insert(smsTemplate02);
77   -
78   - // 调用
79   - smsTemplateService.initLocalCache();
80   - // 断言 deptCache 缓存
81   - Map<String, SysSmsTemplateDO> smsTemplateCache = (Map<String, SysSmsTemplateDO>) getFieldValue(smsTemplateService, "smsTemplateCache");
82   - assertEquals(2, smsTemplateCache.size());
83   - assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode()));
84   - assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode()));
85   - // 断言 maxUpdateTime 缓存
86   - Date maxUpdateTime = (Date) getFieldValue(smsTemplateService, "maxUpdateTime");
87   - assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime);
88   - }
89   -
90   - @Test
91 66 public void testParseTemplateContentParams() {
92 67 // 准备参数
93 68 String content = "正在进行登录操作{operation},您的验证码是{code}";
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java
... ... @@ -3,21 +3,21 @@ package cn.iocoder.yudao.adminserver.modules.system.service.user;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.RandomUtil;
5 5 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
6   -import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServiceImpl;
7   -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 6 import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
10 7 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
11 8 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
12 9 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
13 10 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
14 11 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
15   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
16 12 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper;
17   -import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
18 13 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
19 14 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
20 15 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
  16 +import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServiceImpl;
  17 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  18 +import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
  19 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  20 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
21 21 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
22 22 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
23 23 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
... ... @@ -36,9 +36,9 @@ import java.util.function.Consumer;
36 36 import static cn.hutool.core.util.RandomUtil.randomBytes;
37 37 import static cn.hutool.core.util.RandomUtil.randomEle;
38 38 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
  39 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
39 40 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
40 41 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
41   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
42 42 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
43 43 import static org.assertj.core.util.Lists.newArrayList;
44 44 import static org.junit.jupiter.api.Assertions.assertEquals;
... ... @@ -243,7 +243,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest {
243 243 // 调用数据
244 244 userService.deleteUser(userId);
245 245 // 校验结果
246   - assertNull(userService.getUser(userId));
  246 + assertNull(userMapper.selectById(userId));
247 247 // 校验调用次数
248 248 verify(permissionService, times(1)).processUserDeleted(eq(userId));
249 249 }
... ...
yudao-core-service/pom.xml
... ... @@ -67,6 +67,12 @@
67 67 <artifactId>yudao-spring-boot-starter-config</artifactId>
68 68 </dependency>
69 69  
  70 + <!-- 消息队列相关 -->
  71 + <dependency>
  72 + <groupId>cn.iocoder.boot</groupId>
  73 + <artifactId>yudao-spring-boot-starter-mq</artifactId>
  74 + </dependency>
  75 +
70 76 <!-- Test 测试相关 -->
71 77 <dependency>
72 78 <groupId>cn.iocoder.boot</groupId>
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/sms/SysSmsChannelDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsChannelDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms;
2 2  
3 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/sms/SysSmsLogDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsLogDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
  4 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
3 5 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 6 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 7 import cn.iocoder.yudao.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
6   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsReceiveStatusEnum;
7   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsSendStatusEnum;
8 8 import com.baomidou.mybatisplus.annotation.TableField;
9 9 import com.baomidou.mybatisplus.annotation.TableName;
10 10 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
3 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5   -import cn.iocoder.yudao.adminserver.modules.system.enums.sms.SysSmsTemplateTypeEnum;
6 6 import com.baomidou.mybatisplus.annotation.TableField;
7 7 import com.baomidou.mybatisplus.annotation.TableName;
8 8 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/user/SysUserDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/user/SysUserDO.java
1   -package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user;
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user;
2 2  
  3 +import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
3 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 6 import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler;
6   -import cn.iocoder.yudao.adminserver.modules.system.enums.common.SysSexEnum;
7 7 import com.baomidou.mybatisplus.annotation.TableField;
8 8 import com.baomidou.mybatisplus.annotation.TableId;
9 9 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -16,7 +16,7 @@ import java.util.Set;
16 16 /**
17 17 * 管理后台的用户 DO
18 18 *
19   - * @author ruoyi
  19 + * @author 芋道源码
20 20 */
21 21 @TableName(value = "sys_user", autoResultMap = true)
22 22 @Data
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsLogCoreMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  6 +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  7 +import org.apache.ibatis.annotations.Mapper;
  8 +
  9 +import java.util.List;
  10 +
  11 +@Mapper
  12 +public interface SysSmsLogCoreMapper extends BaseMapperX<SysSmsLogDO> {
  13 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/sms/SysSmsTemplateCoreMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Select;
  7 +
  8 +import java.util.Date;
  9 +
  10 +@Mapper
  11 +public interface SysSmsTemplateCoreMapper extends BaseMapperX<SysSmsTemplateDO> {
  12 +
  13 + @Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1")
  14 + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
  15 +
  16 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/user/SysUserCoreMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6 +import org.apache.ibatis.annotations.Mapper;
  7 +
  8 +@Mapper
  9 +public interface SysUserCoreMapper extends BaseMapperX<SysUserDO> {
  10 +
  11 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.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 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/common/SysSexEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/common/SysSexEnum.java
1   -package cn.iocoder.yudao.adminserver.modules.system.enums.common;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.common;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ... @@ -11,12 +11,14 @@ import lombok.Getter;
11 11 @Getter
12 12 @AllArgsConstructor
13 13 public enum SysSexEnum {
  14 +
14 15 /** 男 */
15 16 MALE(1),
16 17 /** 女 */
17 18 FEMALE(2),
18 19 /* 未知 */
19 20 UNKNOWN(3);
  21 +
20 22 /**
21 23 * 性别
22 24 */
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/package-info.java deleted
1   -package cn.iocoder.yudao.coreservice.modules.system.enums;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/sms/SysSmsReceiveStatusEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsReceiveStatusEnum.java
1   -package cn.iocoder.yudao.adminserver.modules.system.enums.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.sms;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/sms/SysSmsSendStatusEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsSendStatusEnum.java
1   -package cn.iocoder.yudao.adminserver.modules.system.enums.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.sms;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/sms/SysSmsTemplateTypeEnum.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/sms/SysSmsTemplateTypeEnum.java
1   -package cn.iocoder.yudao.adminserver.modules.system.enums.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.enums.sms;
2 2  
3 3 import lombok.AllArgsConstructor;
4 4 import lombok.Getter;
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/package-info.java 0 → 100644
  1 +/**
  2 + * 占位
  3 + */
  4 +package cn.iocoder.yudao.coreservice.modules.system.mq.message;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsSendMessage.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java
1   -package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.mq.message.sms;
2 2  
3 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 4 import cn.iocoder.yudao.framework.mq.core.stream.StreamMessage;
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/package-info.java 0 → 100644
  1 +/**
  2 + * 占位
  3 + */
  4 +package cn.iocoder.yudao.coreservice.modules.system.mq.producer;
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
  4 +import cn.iocoder.yudao.framework.common.core.KeyValue;
  5 +import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.springframework.data.redis.core.StringRedisTemplate;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import javax.annotation.Resource;
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * Sms 短信相关消息的 Core Producer
  15 + *
  16 + * @author zzf
  17 + * @date 2021/3/9 16:35
  18 + */
  19 +@Slf4j
  20 +@Component
  21 +public class SysSmsCoreProducer {
  22 +
  23 + @Resource
  24 + private StringRedisTemplate stringRedisTemplate;
  25 +
  26 + /**
  27 + * 发送 {@link SysSmsSendMessage} 消息
  28 + *
  29 + * @param logId 短信日志编号
  30 + * @param mobile 手机号
  31 + * @param channelId 渠道编号
  32 + * @param apiTemplateId 短信模板编号
  33 + * @param templateParams 短信模板参数
  34 + */
  35 + public void sendSmsSendMessage(Long logId, String mobile,
  36 + Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
  37 + SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile);
  38 + message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
  39 + RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message);
  40 + }
  41 +
  42 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsService.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreService.java
1   -package cn.iocoder.yudao.adminserver.modules.system.service.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
2 2  
3   -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsSendMessage;
  3 +import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
4 4  
5 5 import java.util.List;
6 6 import java.util.Map;
7 7  
8 8 /**
9   - * 短信Service接口
10   - * 只支持异步,因此没有返回值
  9 + * 短信 Service Core 接口
11 10 *
12   - * @author zzf
13   - * @date 2021/1/25 9:24
  11 + * 接入方,通过调用 send 开头的方法,创建发送短信的任务到 MQ 中
  12 + * 后续,yudao-admin-server 监听 MQ,执行真正的短信发送逻辑
  13 + *
  14 + * @author 芋道源码
14 15 */
15   -public interface SysSmsService {
  16 +public interface SysSmsCoreService {
16 17  
17 18 /**
18   - * 发送单条短信给用户(管理员)
  19 + * 发送单条短信给后台用户
19 20 *
20 21 * 在 mobile 为空时,使用 userId 加载对应管理员的手机号
21 22 *
... ... @@ -29,7 +30,7 @@ public interface SysSmsService {
29 30 String templateCode, Map<String, Object> templateParams);
30 31  
31 32 /**
32   - * 发送单条短信给用户(会员)
  33 + * 发送单条短信给前台用户
33 34 *
34 35 * 在 mobile 为空时,使用 userId 加载对应会员的手机号
35 36 *
... ... @@ -40,7 +41,7 @@ public interface SysSmsService {
40 41 * @return 发送日志编号
41 42 */
42 43 Long sendSingleSmsToMember(String mobile, Long userId,
43   - String templateCode, Map<String, Object> templateParams);
  44 + String templateCode, Map<String, Object> templateParams);
44 45  
45 46 Long sendSingleSms(String mobile, Long userId, Integer userType,
46 47 String templateCode, Map<String, Object> templateParams);
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreService.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  4 +
  5 +import java.util.Date;
  6 +import java.util.Map;
  7 +
  8 +/**
  9 + * 短信日志 Core Service 接口
  10 + *
  11 + * @author zzf
  12 + * @date 13:48 2021/3/2
  13 + */
  14 +public interface SysSmsLogCoreService {
  15 +
  16 + /**
  17 + * 创建短信日志
  18 + *
  19 + * @param mobile 手机号
  20 + * @param userId 用户编号
  21 + * @param userType 用户类型
  22 + * @param isSend 是否发送
  23 + * @param template 短信模板
  24 + * @param templateContent 短信内容
  25 + * @param templateParams 短信参数
  26 + * @return 发送日志编号
  27 + */
  28 + Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
  29 + SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams);
  30 +
  31 + /**
  32 + * 更新日志的发送结果
  33 + *
  34 + * @param id 日志编号
  35 + * @param sendCode 发送结果的编码
  36 + * @param sendMsg 发送结果的提示
  37 + * @param apiSendCode 短信 API 发送结果的编码
  38 + * @param apiSendMsg 短信 API 发送失败的提示
  39 + * @param apiRequestId 短信 API 发送返回的唯一请求 ID
  40 + * @param apiSerialNo 短信 API 发送返回的序号
  41 + */
  42 + void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
  43 + String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo);
  44 +
  45 + /**
  46 + * 更新日志的接收结果
  47 + *
  48 + * @param id 日志编号
  49 + * @param success 是否接收成功
  50 + * @param receiveTime 用户接收时间
  51 + * @param apiReceiveCode API 接收结果的编码
  52 + * @param apiReceiveMsg API 接收结果的说明
  53 + */
  54 + void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg);
  55 +
  56 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateCoreService.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  4 +
  5 +import java.util.Map;
  6 +
  7 +/**
  8 + * 短信模板 Core Service 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface SysSmsTemplateCoreService {
  13 +
  14 + /**
  15 + * 初始化短信模板的本地缓存
  16 + */
  17 + void initLocalCache();
  18 +
  19 + /**
  20 + * 获得短信模板,从缓存中
  21 + *
  22 + * @param code 模板编码
  23 + * @return 短信模板
  24 + */
  25 + SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code);
  26 +
  27 + /**
  28 + * 格式化短信内容
  29 + *
  30 + * @param content 短信模板的内容
  31 + * @param params 内容的参数
  32 + * @return 格式化后的内容
  33 + */
  34 + String formatSmsTemplateContent(String content, Map<String, Object> params);
  35 +
  36 +}
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsServiceImpl.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java
1   -package cn.iocoder.yudao.adminserver.modules.system.service.sms.impl;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
  8 +import cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms.SysSmsCoreProducer;
  9 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
  10 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsLogCoreService;
  11 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService;
  12 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
5 13 import cn.iocoder.yudao.framework.common.core.KeyValue;
6 14 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 15 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
... ... @@ -10,16 +18,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
10 18 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
11 19 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO;
12 20 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
13   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
14   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
15   -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsSendMessage;
16   -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
17   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsLogService;
18   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsService;
19   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.SysSmsTemplateService;
20   -import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
21 21 import com.google.common.annotations.VisibleForTesting;
22   -import lombok.extern.slf4j.Slf4j;
23 22 import org.springframework.stereotype.Service;
24 23 import org.springframework.util.Assert;
25 24  
... ... @@ -28,36 +27,35 @@ import java.util.List;
28 27 import java.util.Map;
29 28 import java.util.stream.Collectors;
30 29  
  30 +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*;
31 31 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
32   -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
33 32  
34 33 /**
35   - * 短信日志Service实现类
  34 + * 短信 Service Core 实现
36 35 *
37   - * @author zzf
38   - * @date 2021/1/25 9:25
  36 + * @author 芋道源码
39 37 */
40 38 @Service
41   -@Slf4j
42   -public class SysSmsServiceImpl implements SysSmsService {
  39 +public class SysSmsCoreServiceImpl implements SysSmsCoreService {
43 40  
44 41 @Resource
45   - private SysSmsTemplateService smsTemplateService;
  42 + private SysUserCoreService sysUserCoreService;
46 43 @Resource
47   - private SysSmsLogService smsLogService;
  44 + private SysSmsTemplateCoreService smsTemplateCoreService;
48 45 @Resource
49   - private SysSmsProducer smsProducer;
  46 + private SysSmsLogCoreService smsLogCoreService;
  47 +
50 48 @Resource
51 49 private SmsClientFactory smsClientFactory;
52 50  
53 51 @Resource
54   - private SysUserService userService;
  52 + private SysSmsCoreProducer smsCoreProducer;
55 53  
56 54 @Override
57 55 public Long sendSingleSmsToAdmin(String mobile, Long userId, String templateCode, Map<String, Object> templateParams) {
58 56 // 如果 mobile 为空,则加载用户编号对应的手机号
59 57 if (StrUtil.isEmpty(mobile)) {
60   - SysUserDO user = userService.getUser(userId);
  58 + SysUserDO user = sysUserCoreService.getUser(userId);
61 59 if (user != null) {
62 60 mobile = user.getMobile();
63 61 }
... ... @@ -83,12 +81,13 @@ public class SysSmsServiceImpl implements SysSmsService {
83 81  
84 82 // 创建发送日志
85 83 Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()); // 如果模板被禁用,则不发送短信,只记录日志
86   - String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams);
87   - Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams);
  84 + String content = smsTemplateCoreService.formatSmsTemplateContent(template.getContent(), templateParams);
  85 + Long sendLogId = smsLogCoreService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams);
88 86  
89 87 // 发送 MQ 消息,异步执行发送短信
90 88 if (isSend) {
91   - smsProducer.sendSmsSendMessage(sendLogId, mobile, template.getChannelId(), template.getApiTemplateId(), newTemplateParams);
  89 + smsCoreProducer.sendSmsSendMessage(sendLogId, mobile, template.getChannelId(),
  90 + template.getApiTemplateId(), newTemplateParams);
92 91 }
93 92 return sendLogId;
94 93 }
... ... @@ -102,10 +101,10 @@ public class SysSmsServiceImpl implements SysSmsService {
102 101 @VisibleForTesting
103 102 public SysSmsTemplateDO checkSmsTemplateValid(String templateCode) {
104 103 // 获得短信模板。考虑到效率,从缓存中获取
105   - SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCodeFromCache(templateCode);
  104 + SysSmsTemplateDO template = smsTemplateCoreService.getSmsTemplateByCodeFromCache(templateCode);
106 105 // 短信模板不存在
107 106 if (template == null) {
108   - throw exception(SMS_TEMPLATE_NOT_EXISTS);
  107 + throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
109 108 }
110 109 return template;
111 110 }
... ... @@ -138,6 +137,7 @@ public class SysSmsServiceImpl implements SysSmsService {
138 137 return mobile;
139 138 }
140 139  
  140 +
141 141 @Override
142 142 public void doSendSms(SysSmsSendMessage message) {
143 143 // 获得渠道对应的 SmsClient 客户端
... ... @@ -146,7 +146,7 @@ public class SysSmsServiceImpl implements SysSmsService {
146 146 // 发送短信
147 147 SmsCommonResult<SmsSendRespDTO> sendResult = smsClient.sendSms(message.getLogId(), message.getMobile(),
148 148 message.getApiTemplateId(), message.getTemplateParams());
149   - smsLogService.updateSmsSendResult(message.getLogId(), sendResult.getCode(), sendResult.getMsg(),
  149 + smsLogCoreService.updateSmsSendResult(message.getLogId(), sendResult.getCode(), sendResult.getMsg(),
150 150 sendResult.getApiCode(), sendResult.getApiMsg(), sendResult.getApiRequestId(),
151 151 sendResult.getData() != null ? sendResult.getData().getSerialNo() : null);
152 152 }
... ... @@ -161,11 +161,9 @@ public class SysSmsServiceImpl implements SysSmsService {
161 161 if (CollUtil.isEmpty(receiveResults)) {
162 162 return;
163 163 }
164   - // 更新短信日志的接收结果. 因为量一般不打,所以先使用 for 循环更新
165   - receiveResults.forEach(result -> {
166   - smsLogService.updateSmsReceiveResult(result.getLogId(), result.getSuccess(), result.getReceiveTime(),
167   - result.getErrorCode(), result.getErrorCode());
168   - });
  164 + // 更新短信日志的接收结果. 因为量一般不大,所以先使用 for 循环更新
  165 + receiveResults.forEach(result -> smsLogCoreService.updateSmsReceiveResult(result.getLogId(),
  166 + result.getSuccess(), result.getReceiveTime(), result.getErrorCode(), result.getErrorCode()));
169 167 }
170 168  
171 169 }
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsLogCoreServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper;
  6 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
  7 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
  8 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsLogCoreService;
  9 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  10 +import lombok.extern.slf4j.Slf4j;
  11 +import org.springframework.stereotype.Service;
  12 +
  13 +import javax.annotation.Resource;
  14 +import java.util.Date;
  15 +import java.util.Map;
  16 +import java.util.Objects;
  17 +
  18 +/**
  19 + * 短信日志 Core Service 实现类
  20 + *
  21 + * @author zzf
  22 + * @date 2021/1/25 9:25
  23 + */
  24 +@Slf4j
  25 +@Service
  26 +public class SysSmsLogCoreServiceImpl implements SysSmsLogCoreService {
  27 +
  28 + @Resource
  29 + private SysSmsLogCoreMapper smsLogCoreMapper;
  30 +
  31 + @Override
  32 + public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
  33 + SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams) {
  34 + SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder();
  35 + // 根据是否要发送,设置状态
  36 + logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus()
  37 + : SysSmsSendStatusEnum.IGNORE.getStatus());
  38 + // 设置手机相关字段
  39 + logBuilder.mobile(mobile).userId(userId).userType(userType);
  40 + // 设置模板相关字段
  41 + logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType());
  42 + logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId());
  43 + // 设置渠道相关字段
  44 + logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode());
  45 + // 设置接收相关字段
  46 + logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus());
  47 +
  48 + // 插入数据库
  49 + SysSmsLogDO logDO = logBuilder.build();
  50 + smsLogCoreMapper.insert(logDO);
  51 + return logDO.getId();
  52 + }
  53 +
  54 + @Override
  55 + public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
  56 + String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) {
  57 + SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS
  58 + : SysSmsSendStatusEnum.FAILURE;
  59 + smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()).sendTime(new Date())
  60 + .sendCode(sendCode).sendMsg(sendMsg).apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
  61 + .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build());
  62 + }
  63 +
  64 + @Override
  65 + public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg) {
  66 + SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? SysSmsReceiveStatusEnum.SUCCESS
  67 + : SysSmsReceiveStatusEnum.FAILURE;
  68 + smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()).receiveTime(receiveTime)
  69 + .apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build());
  70 + }
  71 +
  72 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsTemplateCoreServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsTemplateCoreMapper;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsTemplateCoreService;
  8 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  9 +import com.google.common.collect.ImmutableMap;
  10 +import lombok.extern.slf4j.Slf4j;
  11 +import org.springframework.scheduling.annotation.Scheduled;
  12 +import org.springframework.stereotype.Service;
  13 +
  14 +import javax.annotation.PostConstruct;
  15 +import javax.annotation.Resource;
  16 +import java.util.Comparator;
  17 +import java.util.Date;
  18 +import java.util.List;
  19 +import java.util.Map;
  20 +
  21 +/**
  22 + * 短信模板 Core Service 接口
  23 + *
  24 + * @author 芋道源码
  25 + */
  26 +@Service
  27 +@Slf4j
  28 +public class SysSmsTemplateCoreServiceImpl implements SysSmsTemplateCoreService {
  29 +
  30 + /**
  31 + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
  32 + * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高
  33 + */
  34 + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
  35 +
  36 + /**
  37 + * 短信模板缓存
  38 + * key:短信模板编码 {@link SysSmsTemplateDO#getCode()}
  39 + *
  40 + * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
  41 + */
  42 + private volatile Map<String, SysSmsTemplateDO> smsTemplateCache;
  43 + /**
  44 + * 缓存短信模板的最大更新时间,用于后续的增量轮询,判断是否有更新
  45 + */
  46 + private volatile Date maxUpdateTime;
  47 +
  48 + @Resource
  49 + private SysSmsTemplateCoreMapper smsTemplateCoreMapper;
  50 +
  51 + @Override
  52 + @PostConstruct
  53 + public void initLocalCache() {
  54 + // 获取短信模板列表,如果有更新
  55 + List<SysSmsTemplateDO> smsTemplateList = this.loadSmsTemplateIfUpdate(maxUpdateTime);
  56 + if (CollUtil.isEmpty(smsTemplateList)) {
  57 + return;
  58 + }
  59 +
  60 + // 写入缓存
  61 + ImmutableMap.Builder<String, SysSmsTemplateDO> builder = ImmutableMap.builder();
  62 + smsTemplateList.forEach(sysSmsTemplateDO -> builder.put(sysSmsTemplateDO.getCode(), sysSmsTemplateDO));
  63 + smsTemplateCache = builder.build();
  64 + assert smsTemplateList.size() > 0; // 断言,避免告警
  65 + maxUpdateTime = smsTemplateList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
  66 + log.info("[initLocalCache][初始化 SmsTemplate 数量为 {}]", smsTemplateList.size());
  67 + }
  68 +
  69 + /**
  70 + * 如果短信模板发生变化,从数据库中获取最新的全量短信模板。
  71 + * 如果未发生变化,则返回空
  72 + *
  73 + * @param maxUpdateTime 当前短信模板的最大更新时间
  74 + * @return 短信模板列表
  75 + */
  76 + private List<SysSmsTemplateDO> loadSmsTemplateIfUpdate(Date maxUpdateTime) {
  77 + // 第一步,判断是否要更新。
  78 + if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
  79 + log.info("[loadSmsTemplateIfUpdate][首次加载全量短信模板]");
  80 + } else { // 判断数据库中是否有更新的短信模板
  81 + if (smsTemplateCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
  82 + return null;
  83 + }
  84 + log.info("[loadSmsTemplateIfUpdate][增量加载全量短信模板]");
  85 + }
  86 + // 第二步,如果有更新,则从数据库加载所有短信模板
  87 + return smsTemplateCoreMapper.selectList();
  88 + }
  89 +
  90 + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
  91 + public void schedulePeriodicRefresh() {
  92 + initLocalCache();
  93 + }
  94 +
  95 + @Override
  96 + public SysSmsTemplateDO getSmsTemplateByCodeFromCache(String code) {
  97 + return smsTemplateCache.get(code);
  98 + }
  99 +
  100 + @Override
  101 + public String formatSmsTemplateContent(String content, Map<String, Object> params) {
  102 + return StrUtil.format(content, params);
  103 + }
  104 +
  105 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/SysUserCoreService.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.user;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  4 +
  5 +/**
  6 + * 后台用户 Service Core 接口
  7 + *
  8 + * @author 芋道源码
  9 + */
  10 +public interface SysUserCoreService {
  11 +
  12 + /**
  13 + * 通过用户 ID 查询用户
  14 + *
  15 + * @param id 用户ID
  16 + * @return 用户对象信息
  17 + */
  18 + SysUserDO getUser(Long id);
  19 +
  20 +}
... ...
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/user/impl/SysUserCoreServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.user.impl;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user.SysUserCoreMapper;
  5 +import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +import javax.annotation.Resource;
  9 +
  10 +/**
  11 + * 后台用户 Service Core 实现
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Service
  16 +public class SysUserCoreServiceImpl implements SysUserCoreService {
  17 +
  18 + @Resource
  19 + private SysUserCoreMapper userCoreMapper;
  20 +
  21 + @Override
  22 + public SysUserDO getUser(Long id) {
  23 + return userCoreMapper.selectById(id);
  24 + }
  25 +
  26 +}
... ...
yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/logger/SysLoginLogServiceImplTest.java
1 1 package cn.iocoder.yudao.coreservice.modules.system.service.logger;
2 2  
3   -import cn.hutool.core.util.RandomUtil;
4 3 import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
5 4 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
6 5 import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper;
... ... @@ -8,6 +7,7 @@ import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeE
8 7 import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
9 8 import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
10 9 import cn.iocoder.yudao.coreservice.modules.system.service.logger.impl.SysLoginLogCoreServiceImpl;
  10 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
11 11 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
12 12 import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
13 13 import org.junit.jupiter.api.Test;
... ... @@ -15,6 +15,7 @@ import org.springframework.context.annotation.Import;
15 15  
16 16 import javax.annotation.Resource;
17 17  
  18 +import static cn.hutool.core.util.RandomUtil.randomEle;
18 19 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
19 20  
20 21 @Import(SysLoginLogCoreServiceImpl.class)
... ... @@ -30,8 +31,9 @@ public class SysLoginLogServiceImplTest extends BaseDbUnitTest {
30 31 public void testCreateLoginLog() {
31 32 SysLoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(SysLoginLogCreateReqDTO.class, vo -> {
32 33 // 指定随机的范围,避免超出范围入库失败
33   - vo.setLogType(RandomUtil.randomEle(SysLoginLogTypeEnum.values()).getType());
34   - vo.setResult(RandomUtil.randomEle(SysLoginResultEnum.values()).getResult());
  34 + vo.setUserType(randomEle(UserTypeEnum.values()).getValue());
  35 + vo.setLogType(randomEle(SysLoginLogTypeEnum.values()).getType());
  36 + vo.setResult(randomEle(SysLoginResultEnum.values()).getResult());
35 37 vo.setTraceId(TracerUtils.getTraceId());
36 38 });
37 39  
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsServiceTest.java renamed to yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsCoreServiceTest.java
1   -package cn.iocoder.yudao.adminserver.modules.system.service.sms;
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
2 2  
3 3 import cn.hutool.core.map.MapUtil;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
  6 +import cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms.SysSmsCoreProducer;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsCoreServiceImpl;
4 8 import cn.iocoder.yudao.framework.common.core.KeyValue;
5 9 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6 10 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
... ... @@ -9,10 +13,6 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
9 13 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
10 14 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO;
11 15 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
12   -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
13   -import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsSendMessage;
14   -import cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms.SysSmsProducer;
15   -import cn.iocoder.yudao.adminserver.modules.system.service.sms.impl.SysSmsServiceImpl;
16 16 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
17 17 import org.assertj.core.util.Lists;
18 18 import org.junit.jupiter.api.Test;
... ... @@ -24,7 +24,7 @@ import java.util.List;
24 24 import java.util.Map;
25 25  
26 26 import static cn.hutool.core.util.RandomUtil.randomEle;
27   -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
  27 +import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*;
28 28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
29 29 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
30 30 import static org.junit.jupiter.api.Assertions.assertEquals;
... ... @@ -32,21 +32,21 @@ import static org.mockito.ArgumentMatchers.eq;
32 32 import static org.mockito.Mockito.*;
33 33  
34 34 /**
35   - * {@link SysSmsServiceImpl} 的单元测试类
  35 + * {@link SysSmsCoreService} 的单元测试类
36 36 *
37 37 * @author 芋道源码
38 38 */
39   -public class SysSmsServiceTest extends BaseMockitoUnitTest {
  39 +public class SysSmsCoreServiceTest extends BaseMockitoUnitTest {
40 40  
41 41 @InjectMocks
42   - private SysSmsServiceImpl smsService;
  42 + private SysSmsCoreServiceImpl smsCoreService;
43 43  
44 44 @Mock
45   - private SysSmsTemplateService smsTemplateService;
  45 + private SysSmsTemplateCoreService smsTemplateCoreService;
46 46 @Mock
47   - private SysSmsLogService smsLogService;
  47 + private SysSmsLogCoreService smsLogCoreService;
48 48 @Mock
49   - private SysSmsProducer smsProducer;
  49 + private SysSmsCoreProducer smsCoreProducer;
50 50 @Mock
51 51 private SmsClientFactory smsClientFactory;
52 52  
... ... @@ -68,21 +68,21 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
68 68 o.setContent("验证码为{code}, 操作为{op}");
69 69 o.setParams(Lists.newArrayList("code", "op"));
70 70 });
71   - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
  71 + when(smsTemplateCoreService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
72 72 String content = randomString();
73   - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams)))
  73 + when(smsTemplateCoreService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams)))
74 74 .thenReturn(content);
75 75 // mock SmsLogService 的方法
76 76 Long smsLogId = randomLongId();
77   - when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.TRUE), eq(template),
  77 + when(smsLogCoreService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.TRUE), eq(template),
78 78 eq(content), eq(templateParams))).thenReturn(smsLogId);
79 79  
80 80 // 调用
81   - Long resultSmsLogId = smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
  81 + Long resultSmsLogId = smsCoreService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
82 82 // 断言
83 83 assertEquals(smsLogId, resultSmsLogId);
84 84 // 断言调用
85   - verify(smsProducer, times(1)).sendSmsSendMessage(eq(smsLogId), eq(mobile),
  85 + verify(smsCoreProducer, times(1)).sendSmsSendMessage(eq(smsLogId), eq(mobile),
86 86 eq(template.getChannelId()), eq(template.getApiTemplateId()),
87 87 eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login"))));
88 88 }
... ... @@ -105,21 +105,21 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
105 105 o.setContent("验证码为{code}, 操作为{op}");
106 106 o.setParams(Lists.newArrayList("code", "op"));
107 107 });
108   - when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
  108 + when(smsTemplateCoreService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
109 109 String content = randomString();
110   - when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams)))
  110 + when(smsTemplateCoreService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams)))
111 111 .thenReturn(content);
112 112 // mock SmsLogService 的方法
113 113 Long smsLogId = randomLongId();
114   - when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.FALSE), eq(template),
  114 + when(smsLogCoreService.createSmsLog(eq(mobile), eq(userId), eq(userType), eq(Boolean.FALSE), eq(template),
115 115 eq(content), eq(templateParams))).thenReturn(smsLogId);
116 116  
117 117 // 调用
118   - Long resultSmsLogId = smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
  118 + Long resultSmsLogId = smsCoreService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
119 119 // 断言
120 120 assertEquals(smsLogId, resultSmsLogId);
121 121 // 断言调用
122   - verify(smsProducer, times(0)).sendSmsSendMessage(anyLong(), anyString(),
  122 + verify(smsCoreProducer, times(0)).sendSmsSendMessage(anyLong(), anyString(),
123 123 anyLong(), any(), anyList());
124 124 }
125 125  
... ... @@ -130,8 +130,8 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
130 130 // mock 方法
131 131  
132 132 // 调用,并断言异常
133   - assertServiceException(() -> smsService.checkSmsTemplateValid(templateCode),
134   - SMS_TEMPLATE_NOT_EXISTS);
  133 + assertServiceException(() -> smsCoreService.checkSmsTemplateValid(templateCode),
  134 + SMS_SEND_TEMPLATE_NOT_EXISTS);
135 135 }
136 136  
137 137 @Test
... ... @@ -143,7 +143,7 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
143 143 // mock 方法
144 144  
145 145 // 调用,并断言异常
146   - assertServiceException(() -> smsService.buildTemplateParams(template, templateParams),
  146 + assertServiceException(() -> smsCoreService.buildTemplateParams(template, templateParams),
147 147 SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS, "code");
148 148 }
149 149  
... ... @@ -153,7 +153,7 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
153 153 // mock 方法
154 154  
155 155 // 调用,并断言异常
156   - assertServiceException(() -> smsService.checkMobile(null),
  156 + assertServiceException(() -> smsCoreService.checkMobile(null),
157 157 SMS_SEND_MOBILE_NOT_EXISTS);
158 158 }
159 159  
... ... @@ -171,9 +171,9 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
171 171 eq(message.getTemplateParams()))).thenReturn(sendResult);
172 172  
173 173 // 调用
174   - smsService.doSendSms(message);
  174 + smsCoreService.doSendSms(message);
175 175 // 断言
176   - verify(smsLogService, times(1)).updateSmsSendResult(eq(message.getLogId()),
  176 + verify(smsLogCoreService, times(1)).updateSmsSendResult(eq(message.getLogId()),
177 177 eq(sendResult.getCode()), eq(sendResult.getMsg()), eq(sendResult.getApiCode()),
178 178 eq(sendResult.getApiMsg()), eq(sendResult.getApiRequestId()), eq(sendResult.getData().getSerialNo()));
179 179 }
... ... @@ -190,12 +190,10 @@ public class SysSmsServiceTest extends BaseMockitoUnitTest {
190 190 List<SmsReceiveRespDTO> receiveResults = randomPojoList(SmsReceiveRespDTO.class);
191 191  
192 192 // 调用
193   - smsService.receiveSmsStatus(channelCode, text);
  193 + smsCoreService.receiveSmsStatus(channelCode, text);
194 194 // 断言
195   - receiveResults.forEach(result -> {
196   - smsLogService.updateSmsReceiveResult(eq(result.getLogId()), eq(result.getSuccess()),
197   - eq(result.getReceiveTime()), eq(result.getErrorCode()), eq(result.getErrorCode()));
198   - });
  195 + receiveResults.forEach(result -> smsLogCoreService.updateSmsReceiveResult(eq(result.getLogId()), eq(result.getSuccess()),
  196 + eq(result.getReceiveTime()), eq(result.getErrorCode()), eq(result.getErrorCode())));
199 197 }
200 198  
201 199 }
... ...
yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsLogCoreServiceTest.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
  2 +
  3 +import cn.hutool.core.map.MapUtil;
  4 +import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
  6 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  7 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper;
  8 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
  9 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
  10 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
  11 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsLogCoreServiceImpl;
  12 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  13 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  14 +import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
  15 +import org.junit.jupiter.api.Test;
  16 +import org.springframework.context.annotation.Import;
  17 +
  18 +import javax.annotation.Resource;
  19 +import java.util.Date;
  20 +import java.util.Map;
  21 +import java.util.function.Consumer;
  22 +
  23 +import static cn.hutool.core.util.RandomUtil.randomBoolean;
  24 +import static cn.hutool.core.util.RandomUtil.randomEle;
  25 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
  26 +import static org.junit.jupiter.api.Assertions.assertEquals;
  27 +import static org.junit.jupiter.api.Assertions.assertNotNull;
  28 +
  29 +/**
  30 +* {@link SysSmsLogCoreServiceImpl} 的单元测试类
  31 +*
  32 +* @author 芋道源码
  33 +*/
  34 +@Import(SysSmsLogCoreServiceImpl.class)
  35 +public class SysSmsLogCoreServiceTest extends BaseDbUnitTest {
  36 +
  37 + @Resource
  38 + private SysSmsLogCoreServiceImpl smsLogCoreService;
  39 +
  40 + @Resource
  41 + private SysSmsLogCoreMapper smsLogCoreMapper;
  42 +
  43 + @Test
  44 + public void testCreateSmsLog() {
  45 + // 准备参数
  46 + String mobile = randomString();
  47 + Long userId = randomLongId();
  48 + Integer userType = randomEle(UserTypeEnum.values()).getValue();
  49 + Boolean isSend = randomBoolean();
  50 + SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class,
  51 + o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()));
  52 + String templateContent = randomString();
  53 + Map<String, Object> templateParams = randomTemplateParams();
  54 + // mock 方法
  55 +
  56 + // 调用
  57 + Long logId = smsLogCoreService.createSmsLog(mobile, userId, userType, isSend,
  58 + templateDO, templateContent, templateParams);
  59 + // 断言
  60 + SysSmsLogDO logDO = smsLogCoreMapper.selectById(logId);
  61 + assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(),
  62 + logDO.getSendStatus());
  63 + assertEquals(mobile, logDO.getMobile());
  64 + assertEquals(userType, logDO.getUserType());
  65 + assertEquals(userId, logDO.getUserId());
  66 + assertEquals(templateDO.getId(), logDO.getTemplateId());
  67 + assertEquals(templateDO.getCode(), logDO.getTemplateCode());
  68 + assertEquals(templateDO.getType(), logDO.getTemplateType());
  69 + assertEquals(templateDO.getChannelId(), logDO.getChannelId());
  70 + assertEquals(templateDO.getChannelCode(), logDO.getChannelCode());
  71 + assertEquals(templateContent, logDO.getTemplateContent());
  72 + assertEquals(templateParams, logDO.getTemplateParams());
  73 + assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus());
  74 + }
  75 +
  76 + @Test
  77 + public void testUpdateSmsSendResult() {
  78 + // mock 数据
  79 + SysSmsLogDO dbSmsLog = randomSmsLogDO(
  80 + o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()));
  81 + smsLogCoreMapper.insert(dbSmsLog);
  82 + // 准备参数
  83 + Long id = dbSmsLog.getId();
  84 + Integer sendCode = randomInteger();
  85 + String sendMsg = randomString();
  86 + String apiSendCode = randomString();
  87 + String apiSendMsg = randomString();
  88 + String apiRequestId = randomString();
  89 + String apiSerialNo = randomString();
  90 +
  91 + // 调用
  92 + smsLogCoreService.updateSmsSendResult(id, sendCode, sendMsg,
  93 + apiSendCode, apiSendMsg, apiRequestId, apiSerialNo);
  94 + // 断言
  95 + dbSmsLog = smsLogCoreMapper.selectById(id);
  96 + assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus()
  97 + : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus());
  98 + assertNotNull(dbSmsLog.getSendTime());
  99 + assertEquals(sendMsg, dbSmsLog.getSendMsg());
  100 + assertEquals(apiSendCode, dbSmsLog.getApiSendCode());
  101 + assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg());
  102 + assertEquals(apiRequestId, dbSmsLog.getApiRequestId());
  103 + assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
  104 + }
  105 +
  106 + @Test
  107 + public void testUpdateSmsReceiveResult() {
  108 + // mock 数据
  109 + SysSmsLogDO dbSmsLog = randomSmsLogDO(
  110 + o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()));
  111 + smsLogCoreMapper.insert(dbSmsLog);
  112 + // 准备参数
  113 + Long id = dbSmsLog.getId();
  114 + Boolean success = randomBoolean();
  115 + Date receiveTime = randomDate();
  116 + String apiReceiveCode = randomString();
  117 + String apiReceiveMsg = randomString();
  118 +
  119 + // 调用
  120 + smsLogCoreService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg);
  121 + // 断言
  122 + dbSmsLog = smsLogCoreMapper.selectById(id);
  123 + assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
  124 + : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
  125 + assertEquals(receiveTime, dbSmsLog.getReceiveTime());
  126 + assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode());
  127 + assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
  128 + }
  129 +
  130 + // ========== 随机对象 ==========
  131 +
  132 + @SafeVarargs
  133 + private static SysSmsLogDO randomSmsLogDO(Consumer<SysSmsLogDO>... consumers) {
  134 + Consumer<SysSmsLogDO> consumer = (o) -> {
  135 + o.setTemplateParams(randomTemplateParams());
  136 + o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 templateType 的范围
  137 + o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // 保证 userType 的范围
  138 + o.setSendStatus(randomEle(SysSmsSendStatusEnum.values()).getStatus()); // 保证 sendStatus 的范围
  139 + o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // 保证 receiveStatus 的范围
  140 + };
  141 + return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers));
  142 + }
  143 +
  144 +
  145 + private static Map<String, Object> randomTemplateParams() {
  146 + return MapUtil.<String, Object>builder().put(randomString(), randomString())
  147 + .put(randomString(), randomString()).build();
  148 + }
  149 +}
... ...
yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/SysSmsTemplateServiceTest.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.system.service.sms;
  2 +
  3 +import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsTemplateCoreMapper;
  6 +import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
  7 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsTemplateCoreServiceImpl;
  8 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  9 +import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
  10 +import org.junit.jupiter.api.Test;
  11 +import org.springframework.context.annotation.Import;
  12 +
  13 +import javax.annotation.Resource;
  14 +import java.util.Date;
  15 +import java.util.Map;
  16 +import java.util.function.Consumer;
  17 +
  18 +import static cn.hutool.core.bean.BeanUtil.getFieldValue;
  19 +import static cn.hutool.core.util.RandomUtil.randomEle;
  20 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max;
  21 +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
  22 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  23 +import static org.junit.jupiter.api.Assertions.assertEquals;
  24 +
  25 +/**
  26 +* {@link SysSmsTemplateCoreServiceImpl} 的单元测试类
  27 +*
  28 +* @author 芋道源码
  29 +*/
  30 +@Import(SysSmsTemplateCoreServiceImpl.class)
  31 +public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
  32 +
  33 + @Resource
  34 + private SysSmsTemplateCoreServiceImpl smsTemplateCoreService;
  35 +
  36 + @Resource
  37 + private SysSmsTemplateCoreMapper smsTemplateCoreMapper;
  38 +
  39 + @Test
  40 + @SuppressWarnings("unchecked")
  41 + void testInitLocalCache() {
  42 + // mock 数据
  43 + SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO();
  44 + smsTemplateCoreMapper.insert(smsTemplate01);
  45 + SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO();
  46 + smsTemplateCoreMapper.insert(smsTemplate02);
  47 +
  48 + // 调用
  49 + smsTemplateCoreService.initLocalCache();
  50 + // 断言 deptCache 缓存
  51 + Map<String, SysSmsTemplateDO> smsTemplateCache = (Map<String, SysSmsTemplateDO>) getFieldValue(smsTemplateCoreService, "smsTemplateCache");
  52 + assertEquals(2, smsTemplateCache.size());
  53 + assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode()));
  54 + assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode()));
  55 + // 断言 maxUpdateTime 缓存
  56 + Date maxUpdateTime = (Date) getFieldValue(smsTemplateCoreService, "maxUpdateTime");
  57 + assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime);
  58 + }
  59 +
  60 + // ========== 随机对象 ==========
  61 +
  62 + @SafeVarargs
  63 + private static SysSmsTemplateDO randomSmsTemplateDO(Consumer<SysSmsTemplateDO>... consumers) {
  64 + Consumer<SysSmsTemplateDO> consumer = (o) -> {
  65 + o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
  66 + o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 type 的 范围
  67 + };
  68 + return randomPojo(SysSmsTemplateDO.class, ArrayUtils.append(consumer, consumers));
  69 + }
  70 +
  71 +}
... ...
yudao-core-service/src/test/resources/sql/clean.sql
... ... @@ -5,3 +5,5 @@ DELETE FROM &quot;inf_api_error_log&quot;;
5 5 -- sys 开头的 DB
6 6 DELETE FROM "sys_user_session";
7 7 DELETE FROM "sys_dict_data";
  8 +DELETE FROM "sys_sms_template";
  9 +DELETE FROM "sys_sms_log";
... ...
yudao-core-service/src/test/resources/sql/create_tables.sql
... ... @@ -56,7 +56,7 @@ CREATE TABLE IF NOT EXISTS &quot;inf_api_access_log&quot; (
56 56 "update_time" timestamp not null default current_timestamp,
57 57 "deleted" bit not null default false,
58 58 primary key ("id")
59   - ) COMMENT 'API 访问日志表';
  59 +) COMMENT 'API 访问日志表';
60 60  
61 61 CREATE TABLE IF NOT EXISTS "inf_api_error_log" (
62 62 "id" integer not null GENERATED BY DEFAULT AS IDENTITY,
... ... @@ -87,4 +87,75 @@ CREATE TABLE IF NOT EXISTS &quot;inf_api_error_log&quot; (
87 87 "update_time" timestamp not null default current_timestamp,
88 88 "deleted" bit not null default false,
89 89 primary key ("id")
90   - ) COMMENT '系统异常日志';
  90 +) COMMENT '系统异常日志';
  91 +
  92 +CREATE TABLE IF NOT EXISTS "sys_sms_template" (
  93 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  94 + "type" tinyint NOT NULL,
  95 + "status" tinyint NOT NULL,
  96 + "code" varchar(63) NOT NULL,
  97 + "name" varchar(63) NOT NULL,
  98 + "content" varchar(255) NOT NULL,
  99 + "params" varchar(255) NOT NULL,
  100 + "remark" varchar(255) DEFAULT NULL,
  101 + "api_template_id" varchar(63) NOT NULL,
  102 + "channel_id" bigint NOT NULL,
  103 + "channel_code" varchar(63) NOT NULL,
  104 + "creator" varchar(64) DEFAULT '',
  105 + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  106 + "updater" varchar(64) DEFAULT '',
  107 + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  108 + "deleted" bit NOT NULL DEFAULT FALSE,
  109 + PRIMARY KEY ("id")
  110 +) COMMENT '短信模板';
  111 +
  112 +CREATE TABLE IF NOT EXISTS "sys_sms_log" (
  113 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  114 + "channel_id" bigint NOT NULL,
  115 + "channel_code" varchar(63) NOT NULL,
  116 + "template_id" bigint NOT NULL,
  117 + "template_code" varchar(63) NOT NULL,
  118 + "template_type" tinyint NOT NULL,
  119 + "template_content" varchar(255) NOT NULL,
  120 + "template_params" varchar(255) NOT NULL,
  121 + "api_template_id" varchar(63) NOT NULL,
  122 + "mobile" varchar(11) NOT NULL,
  123 + "user_id" bigint DEFAULT '0',
  124 + "user_type" tinyint DEFAULT '0',
  125 + "send_status" tinyint NOT NULL DEFAULT '0',
  126 + "send_time" timestamp DEFAULT NULL,
  127 + "send_code" int DEFAULT NULL,
  128 + "send_msg" varchar(255) DEFAULT NULL,
  129 + "api_send_code" varchar(63) DEFAULT NULL,
  130 + "api_send_msg" varchar(255) DEFAULT NULL,
  131 + "api_request_id" varchar(255) DEFAULT NULL,
  132 + "api_serial_no" varchar(255) DEFAULT NULL,
  133 + "receive_status" tinyint NOT NULL DEFAULT '0',
  134 + "receive_time" timestamp DEFAULT NULL,
  135 + "api_receive_code" varchar(63) DEFAULT NULL,
  136 + "api_receive_msg" varchar(255) DEFAULT NULL,
  137 + "creator" varchar(64) DEFAULT '',
  138 + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  139 + "updater" varchar(64) DEFAULT '',
  140 + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  141 + "deleted" bit NOT NULL DEFAULT FALSE,
  142 + PRIMARY KEY ("id")
  143 +) COMMENT '短信日志';
  144 +
  145 +CREATE TABLE IF NOT EXISTS `sys_login_log` (
  146 + `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  147 + `log_type` bigint(4) NOT NULL,
  148 + "user_id" bigint not null default '0',
  149 + "user_type" tinyint NOT NULL,
  150 + `trace_id` varchar(64) NOT NULL DEFAULT '',
  151 + `username` varchar(50) NOT NULL DEFAULT '',
  152 + `result` tinyint(4) NOT NULL,
  153 + `user_ip` varchar(50) NOT NULL,
  154 + `user_agent` varchar(512) NOT NULL,
  155 + `creator` varchar(64) DEFAULT '',
  156 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  157 + `updater` varchar(64) DEFAULT '',
  158 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  159 + `deleted` bit(1) NOT NULL DEFAULT '0',
  160 + PRIMARY KEY (`id`)
  161 +) COMMENT ='系统访问记录';
... ...
更新日志.md
... ... @@ -16,9 +16,10 @@
16 16  
17 17 * 新增管理后台的企业微信、钉钉等社交登录
18 18 * 新增用户前台(例如说,用户使用的小程序)的后端项目 `yudao-user-server`
19   -* 新增公共服务 `yudao-core-service` 项目,通过 Jar 包的方式,提供 `yudao-user-server` 和 `yudao-admin-server` 的共享逻辑的复用。
  19 +* 新增公共服务 `yudao-core-service` 项目,通过 Jar 包的方式,提供 `yudao-user-server` 和 `yudao-admin-server` 的共享逻辑的复用
20 20 * 新增用户前台的手机登录、验证码登录
21   -* 修复管理后台的用户头像上传 404 的问题
  21 +* 修复管理后台的用户头像上传 404 的问题,原因是请求路径不对
  22 +* 修复用户导入失败的问题,原因是 Lombok 链式与 cglib 读取属性有冲突
22 23  
23 24 ## [v1.0.0] 2021.05.03
24 25  
... ...