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

This commit is contained in:
YunaiV
2022-01-30 22:27:54 +08:00
parent add08b1ecd
commit 16c2590483
14 changed files with 270 additions and 83 deletions

View File

@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.system.api.sms;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO;
import cn.iocoder.yudao.module.system.service.sms.SmsCodeService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
/**
* 短信验证码 API 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class SmsCodeApiImpl implements SmsCodeApi {
@Resource
private SmsCodeService smsCodeService;
@Override
public void sendSmsCode(SmsCodeSendReqDTO reqDTO) {
smsCodeService.sendSmsCode(reqDTO);
}
@Override
public void useSmsCode(SmsCodeUseReqDTO reqDTO) {
smsCodeService.useSmsCode(reqDTO);
}
@Override
public void checkSmsCode(SmsCodeCheckReqDTO reqDTO) {
smsCodeService.checkSmsCode(reqDTO);
}
}

View File

@ -1,8 +1,11 @@
package cn.iocoder.yudao.module.system.service.sms;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO;
import javax.validation.Valid;
/**
* 短信验证码 Service 接口
@ -14,31 +17,24 @@ public interface SmsCodeService {
/**
* 创建短信验证码,并进行发送
*
* @param mobile 手机号
* @param scene 发送场景 {@link SmsSceneEnum}
* @param createIp 发送 IP
* @param reqDTO 发送请求
*/
void sendSmsCode(@Mobile String mobile, Integer scene, String createIp);
void sendSmsCode(@Valid SmsCodeSendReqDTO reqDTO);
/**
* 验证短信验证码,并进行使用
* 如果正确,则将验证码标记成已使用
* 如果错误,则抛出 {@link ServiceException} 异常
*
* @param mobile 手机号
* @param scene 发送场景 {@link SmsSceneEnum}
* @param code 验证码
* @param usedIp 使用 IP
* @param reqDTO 使用请求
*/
void useSmsCode(@Mobile String mobile, Integer scene, String code, String usedIp);
void useSmsCode(@Valid SmsCodeUseReqDTO reqDTO);
/**
* 检查验证码是否有效
*
* @param mobile 手机
* @param code 验证码
* @param scene 使用场景
* @param reqDTO 校验请求
*/
void checkSmsCode(String mobile, String code, Integer scene);
void checkSmsCode(@Valid SmsCodeCheckReqDTO reqDTO);
}

View File

@ -4,6 +4,9 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeCheckReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeSendReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.SmsCodeUseReqDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO;
import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
@ -42,13 +45,13 @@ public class SmsCodeServiceImpl implements SmsCodeService {
private SmsSendService smsSendService;
@Override
public void sendSmsCode(String mobile, Integer scene, String createIp) {
SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(scene);
Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", scene);
public void sendSmsCode(SmsCodeSendReqDTO reqDTO) {
SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene());
Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene());
// 创建验证码
String code = createSmsCode(mobile, scene, createIp);
String code = createSmsCode(reqDTO.getMobile(), reqDTO.getScene(), reqDTO.getCreateIp());
// 发送验证码
smsSendService.sendSingleSms(mobile, null, null,
smsSendService.sendSingleSms(reqDTO.getMobile(), null, null,
sceneEnum.getTemplateCode(), MapUtil.of("code", code));
}
@ -77,17 +80,17 @@ public class SmsCodeServiceImpl implements SmsCodeService {
}
@Override
public void useSmsCode(String mobile, Integer scene, String code, String usedIp) {
public void useSmsCode(SmsCodeUseReqDTO reqDTO) {
// 检测验证码是否有效
SmsCodeDO lastSmsCode = this.checkSmsCode0(mobile, code, scene);
SmsCodeDO lastSmsCode = this.checkSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene());
// 使用验证码
smsCodeMapper.updateById(SmsCodeDO.builder().id(lastSmsCode.getId())
.used(true).usedTime(new Date()).usedIp(usedIp).build());
.used(true).usedTime(new Date()).usedIp(reqDTO.getUsedIp()).build());
}
@Override
public void checkSmsCode(String mobile, String code, Integer scene) {
checkSmsCode0(mobile, code, scene);
public void checkSmsCode(SmsCodeCheckReqDTO reqDTO) {
checkSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene());
}
public SmsCodeDO checkSmsCode0(String mobile, String code, Integer scene) {