From bb3ddc6b6a5572f04748f6613db662f0ea264258 Mon Sep 17 00:00:00 2001 From: ziin Date: Thu, 4 Dec 2025 19:15:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E6=96=B0=E5=A2=9E=E9=82=AE?= =?UTF-8?q?=E7=AE=B1=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8F=91=E9=80=81=E4=B8=8E?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yolo/keyborad/common/ErrorCode.java | 3 +- .../keyborad/config/SaTokenConfigure.java | 4 +- .../keyborad/controller/UserController.java | 10 +++-- .../model/dto/user/VerifyCodeDTO.java | 18 +++++++++ .../yolo/keyborad/service/UserService.java | 7 ++-- .../service/impl/UserServiceImpl.java | 39 ++++++++++++++++--- 6 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/yolo/keyborad/model/dto/user/VerifyCodeDTO.java diff --git a/src/main/java/com/yolo/keyborad/common/ErrorCode.java b/src/main/java/com/yolo/keyborad/common/ErrorCode.java index 99b9878..739b176 100644 --- a/src/main/java/com/yolo/keyborad/common/ErrorCode.java +++ b/src/main/java/com/yolo/keyborad/common/ErrorCode.java @@ -36,7 +36,8 @@ public enum ErrorCode { USER_CHARACTER_ADD_ERROR(50006,"添加用户键盘字符失败" ), USER_CHARACTER_DEL_ERROR(50007, "删除用户人设失败"), VERIFY_CODE_ERROR(50008, "验证码错误"), - REPEATEDLY_ADDING_CHARACTER(50009, "重复添加键盘人设"); + REPEATEDLY_ADDING_CHARACTER(50009, "重复添加键盘人设"), + MAIL_SEND_BUSY(50010,"邮件发送频繁,1分钟后再试" ); /** * 状态码 */ diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index ff9c15c..90edeae 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -78,7 +78,9 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/user/register", "/character/updateUserCharacterSort", "/character/addUserCharacter", - "/character/delUserCharacter" + "/character/delUserCharacter", + "/user/sendVerifyMail", + "/user/verifyMailCode" }; } @Bean diff --git a/src/main/java/com/yolo/keyborad/controller/UserController.java b/src/main/java/com/yolo/keyborad/controller/UserController.java index b19e0df..7f4ae34 100644 --- a/src/main/java/com/yolo/keyborad/controller/UserController.java +++ b/src/main/java/com/yolo/keyborad/controller/UserController.java @@ -5,10 +5,7 @@ import cn.hutool.core.bean.BeanUtil; import com.yolo.keyborad.common.BaseResponse; import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.model.dto.AppleLoginReq; -import com.yolo.keyborad.model.dto.user.KeyboardUserReq; -import com.yolo.keyborad.model.dto.user.SendMailDTO; -import com.yolo.keyborad.model.dto.user.UserLoginDTO; -import com.yolo.keyborad.model.dto.user.UserRegisterDTO; +import com.yolo.keyborad.model.dto.user.*; import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserInfoRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; @@ -95,4 +92,9 @@ public class UserController { return ResultUtils.success(true); } + @PostMapping("/verifyMailCode") + @Operation(summary = "验证验证码",description = "验证验证码接口") + public BaseResponse verifyMail(@RequestBody VerifyCodeDTO verifyCodeDTO) { + return ResultUtils.success(userService.verifyMailCode(verifyCodeDTO)); + } } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/dto/user/VerifyCodeDTO.java b/src/main/java/com/yolo/keyborad/model/dto/user/VerifyCodeDTO.java new file mode 100644 index 0000000..e0329ff --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/dto/user/VerifyCodeDTO.java @@ -0,0 +1,18 @@ +package com.yolo.keyborad.model.dto.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/* + * @author: ziin + * @date: 2025/12/4 18:49 + */ +@Data +public class VerifyCodeDTO { + + @Schema(description = "邮箱地址") + private String mailAddress; + + @Schema + private Integer verifyCode; +} diff --git a/src/main/java/com/yolo/keyborad/service/UserService.java b/src/main/java/com/yolo/keyborad/service/UserService.java index 76ee13c..80503a8 100644 --- a/src/main/java/com/yolo/keyborad/service/UserService.java +++ b/src/main/java/com/yolo/keyborad/service/UserService.java @@ -1,10 +1,7 @@ package com.yolo.keyborad.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.yolo.keyborad.model.dto.user.KeyboardUserReq; -import com.yolo.keyborad.model.dto.user.SendMailDTO; -import com.yolo.keyborad.model.dto.user.UserLoginDTO; -import com.yolo.keyborad.model.dto.user.UserRegisterDTO; +import com.yolo.keyborad.model.dto.user.*; import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; @@ -25,4 +22,6 @@ public interface UserService extends IService { Boolean userRegister(UserRegisterDTO userRegisterDTO); void sendVerifyMail(SendMailDTO userRegisterDTO); + + Boolean verifyMailCode(VerifyCodeDTO verifyCodeDTO); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java index ec66cf5..0577f33 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java @@ -10,10 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yolo.keyborad.common.ErrorCode; import com.yolo.keyborad.exception.BusinessException; import com.yolo.keyborad.mapper.KeyboardUserMapper; -import com.yolo.keyborad.model.dto.user.KeyboardUserReq; -import com.yolo.keyborad.model.dto.user.SendMailDTO; -import com.yolo.keyborad.model.dto.user.UserLoginDTO; -import com.yolo.keyborad.model.dto.user.UserRegisterDTO; +import com.yolo.keyborad.model.dto.user.*; import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.service.UserService; @@ -122,13 +119,45 @@ public class UserServiceImpl extends ServiceImpl 0; } @Override public void sendVerifyMail(SendMailDTO mailDTO) { + + if (redisUtil.hasKey("limit_mail:" + mailDTO.getMailAddress())){ + throw new BusinessException(ErrorCode.MAIL_SEND_BUSY); + } + + String existCode = redisUtil.get("user:" + mailDTO.getMailAddress()); + + if (redisUtil.get("user:" + mailDTO.getMailAddress()) != null) { + sendMailUtils.sendEmail(null,mailDTO.getMailAddress(),Integer.valueOf(existCode)); + return; + } + int code = RandomUtil.randomInt(100000, 999999); - redisUtil.setEx("user:"+mailDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS); + + redisUtil.setEx("user:" + mailDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS); + sendMailUtils.sendEmail(null,mailDTO.getMailAddress(),code); + + redisUtil.setEx("limit_mail:" + mailDTO.getMailAddress(), String.valueOf(code),60, TimeUnit.SECONDS); + } + + @Override + public Boolean verifyMailCode(VerifyCodeDTO verifyCodeDTO) { + + String s = redisUtil.get("user:" + verifyCodeDTO.getMailAddress()); + + if (s == null) { + throw new BusinessException(ErrorCode.VERIFY_CODE_ERROR); + } + if (s.equals(String.valueOf(verifyCodeDTO.getVerifyCode()))){ + redisUtil.delete("user:" + verifyCodeDTO.getMailAddress()); + return true; + } + return false; } }