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