Commit df141f2982854aa8fb220cdc9958562ce0233112

Authored by 宋天
1 parent 671c41bf

update 发送短信 拓展设置对应模板编号

yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
... ... @@ -5,10 +5,8 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
5 5 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 6 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
7 7 import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*;
8   -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum;
9 8 import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService;
10 9 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
11   -import com.alibaba.fastjson.JSON;
12 10 import io.swagger.annotations.Api;
13 11 import io.swagger.annotations.ApiImplicitParam;
14 12 import io.swagger.annotations.ApiImplicitParams;
... ... @@ -18,7 +16,6 @@ import org.springframework.validation.annotation.Validated;
18 16 import org.springframework.web.bind.annotation.*;
19 17  
20 18 import javax.annotation.Resource;
21   -import javax.servlet.http.HttpServletRequest;
22 19 import javax.validation.Valid;
23 20  
24 21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
... ... @@ -57,19 +54,12 @@ public class SysAuthController {
57 54 }
58 55  
59 56 @PostMapping("/send-sms-code")
60   - @ApiOperation(value = "发送手机验证码",notes = "不检测该手机号是否已被注册")
  57 + @ApiOperation(value = "发送手机验证码")
61 58 public CommonResult<Boolean> sendSmsCode(@RequestBody @Valid SysAuthSendSmsReqVO reqVO) {
62 59 smsCodeService.sendSmsCode(reqVO.getMobile(), reqVO.getScene(), getClientIP());
63 60 return success(true);
64 61 }
65 62  
66   - @PostMapping("/send-sms-new-code")
67   - @ApiOperation(value = "发送手机验证码",notes = "检测该手机号是否已被注册,用于修改手机时使用")
68   - public CommonResult<Boolean> sendSmsNewCode(@RequestBody @Valid SysAuthSendSmsReqVO reqVO) {
69   - smsCodeService.sendSmsNewCode(reqVO);
70   - return success(true);
71   - }
72   -
73 63 @GetMapping("/send-sms-code-login")
74 64 @ApiOperation(value = "向已登录用户发送验证码",notes = "修改手机时验证原手机号使用")
75 65 public CommonResult<Boolean> sendSmsCodeLogin() {
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsSceneEnum.java
... ... @@ -15,15 +15,26 @@ import java.util.Arrays;
15 15 @AllArgsConstructor
16 16 public enum SysSmsSceneEnum implements IntArrayValuable {
17 17  
18   - LOGIN_BY_SMS(1, "手机号登陆"),
19   - CHANGE_MOBILE_BY_SMS(2, "更换手机号"),
20   - FORGET_MOBILE_BY_SMS(3, "忘记密码"),
21   - CHECK_CODE_BY_SMS(4, "审核验证码"),
  18 + LOGIN_BY_SMS(1,SysSmsTemplateCodeConstants.USER_SMS_LOGIN, "手机号登陆"),
  19 + CHANGE_MOBILE_BY_SMS(2,SysSmsTemplateCodeConstants.USER_SMS_UPDATE_MOBILE, "更换手机号"),
  20 + FORGET_MOBILE_BY_SMS(3,SysSmsTemplateCodeConstants.USER_SMS_RESET_PASSWORD, "忘记密码"),
22 21 ;
23 22  
24 23 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSmsSceneEnum::getScene).toArray();
25 24  
  25 + /**
  26 + * 验证那场景编号
  27 + */
26 28 private final Integer scene;
  29 +
  30 + /**
  31 + * 模版编码
  32 + */
  33 + private final String code;
  34 +
  35 + /**
  36 + * 描述
  37 + */
27 38 private final String name;
28 39  
29 40 @Override
... ... @@ -31,4 +42,13 @@ public enum SysSmsSceneEnum implements IntArrayValuable {
31 42 return ARRAYS;
32 43 }
33 44  
  45 + public static String getCodeByScene(Integer scene){
  46 + for (SysSmsSceneEnum value : values()) {
  47 + if (value.getScene().equals(scene)){
  48 + return value.getCode();
  49 + }
  50 + }
  51 + return null;
  52 + }
  53 +
34 54 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsTemplateCodeConstants.java
... ... @@ -12,4 +12,14 @@ public interface SysSmsTemplateCodeConstants {
12 12 */
13 13 String USER_SMS_LOGIN = "user-sms-login";
14 14  
  15 + /**
  16 + * 用户忘记密码
  17 + */
  18 + String USER_SMS_RESET_PASSWORD = "user-sms-reset-password";
  19 +
  20 + /**
  21 + * 用户更新手机号
  22 + */
  23 + String USER_SMS_UPDATE_MOBILE = "user-sms-update-mobile";
  24 +
15 25 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/SysSmsCodeService.java
... ... @@ -2,7 +2,6 @@ package cn.iocoder.yudao.userserver.modules.system.service.sms;
2 2  
3 3 import cn.iocoder.yudao.framework.common.exception.ServiceException;
4 4 import cn.iocoder.yudao.framework.common.validation.Mobile;
5   -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSendSmsReqVO;
6 5 import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO;
7 6 import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum;
8 7  
... ... @@ -23,13 +22,6 @@ public interface SysSmsCodeService {
23 22 void sendSmsCode(@Mobile String mobile, Integer scene, String createIp);
24 23  
25 24 /**
26   - * 发送短信验证码,并检测手机号是否已被注册
27   - *
28   - * @param reqVO 请求实体
29   - */
30   - void sendSmsNewCode(SysAuthSendSmsReqVO reqVO);
31   -
32   - /**
33 25 * 验证短信验证码,并进行使用
34 26 * 如果正确,则将验证码标记成已使用
35 27 * 如果错误,则抛出 {@link ServiceException} 异常
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl/SysSmsCodeServiceImpl.java
... ... @@ -4,11 +4,9 @@ import cn.hutool.core.map.MapUtil;
4 4 import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
5 5 import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
6 6 import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
7   -import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSendSmsReqVO;
8 7 import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO;
9 8 import cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms.SysSmsCodeMapper;
10 9 import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum;
11   -import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsTemplateCodeConstants;
12 10 import cn.iocoder.yudao.userserver.modules.system.framework.sms.SmsCodeProperties;
13 11 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
14 12 import org.springframework.stereotype.Service;
... ... @@ -47,22 +45,29 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService {
47 45 public void sendSmsCode(String mobile, Integer scene, String createIp) {
48 46 // 创建验证码
49 47 String code = this.createSmsCode(mobile, scene, createIp);
  48 +
  49 + // 获取发送模板
  50 + String codeTemplate = SysSmsSceneEnum.getCodeByScene(scene);
  51 +
  52 + // 如果是更换手机号发送验证码,则需要检测手机号是否被注册
  53 + if (SysSmsSceneEnum.CHANGE_MOBILE_BY_SMS.getScene().equals(scene)){
  54 + this.checkMobileIsRegister(mobile,scene);
  55 + }
  56 +
50 57 // 发送验证码
51   - // TODO @宋天:这里可以拓展下 SysSmsSceneEnum,支持设置对应的短信模板编号(不同场景的短信文案是不同的)、是否要校验手机号已经注册。这样 Controller 就可以收口成一个接口了。相当于说,不同场景,不同策略
52   - smsCoreService.sendSingleSmsToMember(mobile, null, SysSmsTemplateCodeConstants.USER_SMS_LOGIN,
  58 + smsCoreService.sendSingleSmsToMember(mobile, null, codeTemplate,
53 59 MapUtil.of("code", code));
54 60 }
55 61  
56   - @Override
57   - public void sendSmsNewCode(SysAuthSendSmsReqVO reqVO) {
  62 + public void checkMobileIsRegister(String mobile, Integer scene) {
58 63 // 检测手机号是否已被使用
59   - MbrUserDO userByMobile = mbrUserService.getUserByMobile(reqVO.getMobile());
  64 + MbrUserDO userByMobile = mbrUserService.getUserByMobile(mobile);
60 65 if (userByMobile != null){
61 66 throw exception(USER_SMS_CODE_IS_EXISTS);
62 67 }
63 68  
64 69 // 发送短信
65   - this.sendSmsCode(reqVO.getMobile(),reqVO.getScene(),getClientIP());
  70 + this.sendSmsCode(mobile,scene,getClientIP());
66 71 }
67 72  
68 73 private String createSmsCode(String mobile, Integer scene, String ip) {
... ...