From 2f12761d7aeccb911ca8d37ccd2780ba9213eebe Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Thu, 14 Nov 2024 18:22:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/common/cache/UserCache.java | 3 +- .../system/controller/UserController.java | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springblade/common/cache/UserCache.java b/src/main/java/org/springblade/common/cache/UserCache.java index 6064314..b59bd7a 100644 --- a/src/main/java/org/springblade/common/cache/UserCache.java +++ b/src/main/java/org/springblade/common/cache/UserCache.java @@ -21,6 +21,8 @@ public class UserCache { private static final String USER_CACHE_ID = "user:id:"; private static final String USER_CACHE_ACCOUNT = "user:account:"; + public static final String USER_REGISTER_CODE = USER_CACHE + "user:register:"; + private static final IUserService userService; static { @@ -58,5 +60,4 @@ public class UserCache { public static User getUser(String tenantId, String account) { return CacheUtil.get(USER_CACHE, USER_CACHE_ACCOUNT, tenantId + StringPool.DASH + account, () -> userService.userByAccount(tenantId, account)); } - } diff --git a/src/main/java/org/springblade/modules/system/controller/UserController.java b/src/main/java/org/springblade/modules/system/controller/UserController.java index 04fd964..1218f92 100644 --- a/src/main/java/org/springblade/modules/system/controller/UserController.java +++ b/src/main/java/org/springblade/modules/system/controller/UserController.java @@ -19,6 +19,7 @@ import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.sms.model.SmsCode; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; @@ -27,12 +28,14 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringPool; import org.springblade.core.tool.utils.StringUtil; +import org.springblade.modules.resource.utils.SmsUtil; import org.springblade.modules.system.entity.User; import org.springblade.modules.system.excel.UserExcel; import org.springblade.modules.system.excel.UserImporter; import org.springblade.modules.system.service.IUserService; import org.springblade.modules.system.vo.UserVO; import org.springblade.modules.system.wrapper.UserWrapper; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; @@ -42,6 +45,7 @@ import javax.validation.Valid; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE; @@ -60,6 +64,8 @@ public class UserController { private final IUserService userService; private final BladeRedis bladeRedis; + private final RedisTemplate redisTemplate; + /** * 查询单条 */ @@ -309,4 +315,54 @@ public class UserController { return R.data(users); } + /** + * 发送注册短信验证码 + * + * @return + */ + @PostMapping("/regist/sendSmsCode") + @ApiOperation(value = "发送注册短信验证码", notes = "传入手机号") + public R sendSmsCode(@ApiParam(value = "手机号", required = true) String phone) { + // 生成code + String code = SmsUtil.getValidateParams().get(SmsUtil.PARAM_KEY); + + // 发送短信 + SmsCode smsCode = SmsUtil.sendValidate(code, phone); + if (smsCode.isSuccess()) { + String redisKey = UserCache.USER_REGISTER_CODE + phone; + // 缓存设置60s有效 + redisTemplate.opsForValue().set(redisKey, smsCode, 60, TimeUnit.SECONDS); + + return R.success("验证码发送成功"); + } else { + return R.fail("验证码发送失败"); + } + } + + /** + * 保存注册用户 + * + * @return + */ + @PostMapping("/regist/saveUser") + @ApiOperation(value = "保存注册用户", notes = "用户信息和短信验证码") + public R saveUser(@ApiParam(value = "用户信息", required = true) @RequestBody User user, @ApiParam(value = "短信验证码", required = true) String code) { + String phone = user.getPhone(); + if (StringUtil.isBlank(phone)) { + return R.fail("手机号为空"); + } + + // 从缓存中获取验证码 + String redisKey = UserCache.USER_REGISTER_CODE + phone; + SmsCode smsCode = (SmsCode) redisTemplate.opsForValue().get(redisKey); + + // 判断验证码是否正确 + if (!SmsUtil.validateMessage(code, smsCode.getId(), smsCode.getValue(), smsCode.getPhone())) { + return R.fail("验证码错误"); + } + + userService.save(user); + + return R.data(user, "注册成功"); + } }