Commit df141f2982854aa8fb220cdc9958562ce0233112
1 parent
671c41bf
update 发送短信 拓展设置对应模板编号
Showing
5 changed files
with
48 additions
and
31 deletions
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) { | ... | ... |