From c74505b8c3366a2b000b794627652e4de4618418 Mon Sep 17 00:00:00 2001 From: MichaelWin Date: Fri, 12 Dec 2025 11:44:56 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E6=94=B9?= =?UTF-8?q?=E8=BF=9B=E7=94=A8=E6=88=B7=E6=B3=A8=E9=94=80=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/modules/app/AppUserController.java | 11 ++- .../com/corewing/app/service/UserService.java | 9 ++ .../app/service/VerifyCodeService.java | 0 .../app/service/impl/UserServiceImpl.java | 90 +++++++++++++------ .../service/impl/VerifyCodeServiceImpl.java | 26 +----- .../corewing/app/util/CommonGenerateUtil.java | 32 +++++++ 6 files changed, 118 insertions(+), 50 deletions(-) mode change 100644 => 100755 src/main/java/com/corewing/app/service/VerifyCodeService.java mode change 100644 => 100755 src/main/java/com/corewing/app/service/impl/VerifyCodeServiceImpl.java create mode 100644 src/main/java/com/corewing/app/util/CommonGenerateUtil.java diff --git a/src/main/java/com/corewing/app/modules/app/AppUserController.java b/src/main/java/com/corewing/app/modules/app/AppUserController.java index 3dc5018..2df3f0a 100755 --- a/src/main/java/com/corewing/app/modules/app/AppUserController.java +++ b/src/main/java/com/corewing/app/modules/app/AppUserController.java @@ -210,8 +210,17 @@ public class AppUserController { * @param logoffRequest * @return */ - @PostMapping("/logoff") + @PostMapping("/delete") public Result logoff(@RequestBody @Valid LogoffRequest logoffRequest) { return Result.isBool(userService.logoff(logoffRequest)); } + + /** + * 注销发送验证码 + * @return + */ + @PostMapping("/delete/sendCode") + public Result> deleteSendCode() { + return userService.deleteSendCode(); + } } diff --git a/src/main/java/com/corewing/app/service/UserService.java b/src/main/java/com/corewing/app/service/UserService.java index cf574d3..60f0a7c 100755 --- a/src/main/java/com/corewing/app/service/UserService.java +++ b/src/main/java/com/corewing/app/service/UserService.java @@ -2,6 +2,7 @@ package com.corewing.app.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.common.Result; import com.corewing.app.dto.api.CodeLoginRequest; import com.corewing.app.dto.api.ForgetPasswordRequest; import com.corewing.app.dto.api.LogoffRequest; @@ -9,6 +10,8 @@ import com.corewing.app.dto.biz.user.BizUserStatusRequest; import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; +import java.util.Map; + /** * 应用用户 Service 接口 @@ -137,4 +140,10 @@ public interface UserService extends IService { * @return */ boolean logoff(LogoffRequest logoffRequest); + + /** + * 删除发送验证码 + * @return + */ + Result> deleteSendCode(); } diff --git a/src/main/java/com/corewing/app/service/VerifyCodeService.java b/src/main/java/com/corewing/app/service/VerifyCodeService.java old mode 100644 new mode 100755 diff --git a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java index 362a2b7..8bda88b 100755 --- a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java +++ b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.common.Result; import com.corewing.app.common.page.PageContext; import com.corewing.app.dto.api.CodeLoginRequest; import com.corewing.app.dto.api.ForgetPasswordRequest; @@ -15,33 +16,44 @@ import com.corewing.app.entity.User; import com.corewing.app.mapper.UserMapper; import com.corewing.app.service.UserService; import com.corewing.app.service.VerifyCodeService; -import com.corewing.app.util.I18nUtil; -import com.corewing.app.util.Ip2RegionUtil; -import com.corewing.app.util.RedisUtil; +import com.corewing.app.util.*; +import lombok.extern.slf4j.Slf4j; +import org.codehaus.jettison.json.JSONObject; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; +import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; /** * 应用用户 Service 实现类 */ +@Slf4j @Service public class UserServiceImpl extends ServiceImpl implements UserService { - private final VerifyCodeService verifyCodeService; - private final Ip2RegionUtil ip2RegionUtil; - private final UserMapper userMapper; - private final RedisUtil redisUtil; + @Resource + private VerifyCodeService verifyCodeService; + + @Resource + private Ip2RegionUtil ip2RegionUtil; + + @Resource + private UserMapper userMapper; + + @Resource + private RedisUtil redisUtil; + + @Resource + private SmsBaoUtil smsBaoUtil; + + @Resource + private EmailUtil emailUtil; - public UserServiceImpl(VerifyCodeService verifyCodeService, Ip2RegionUtil ip2RegionUtil, UserMapper userMapper, RedisUtil redisUtil) { - this.verifyCodeService = verifyCodeService; - this.ip2RegionUtil = ip2RegionUtil; - this.userMapper = userMapper; - this.redisUtil = redisUtil; - } @Override public Page page(User user) { @@ -304,19 +316,8 @@ public class UserServiceImpl extends ServiceImpl implements Us if(user == null) { throw new RuntimeException(I18nUtil.getMessage("error.user.not.found")); } - String codeKey = ""; - Object checkCode = null; - if(user.getEmail() != null) { - codeKey = String.format("verify_code:%s:%s", "logoff", user.getEmail()); - checkCode = redisUtil.get(codeKey); - } - - if(checkCode == null) { - if(user.getTelephone() != null) { - codeKey = String.format("verify_code:%s:%s", "logoff", user.getTelephone()); - checkCode = redisUtil.get(codeKey); - } - } + String codeKey = String.format("verify_code:%s:%s", "logoff", user.getUsername()); + Object checkCode = redisUtil.get(codeKey); if(checkCode == null || !request.getCode().equalsIgnoreCase(checkCode.toString())) { throw new RuntimeException(I18nUtil.getMessage("error.verify.code.invalid")); @@ -327,4 +328,41 @@ public class UserServiceImpl extends ServiceImpl implements Us this.removeById(user.getId()); return true; } + + @Override + public Result> deleteSendCode() { + User user = this.getById(StpUtil.getLoginId().toString()); + if(user == null) { + throw new RuntimeException(I18nUtil.getMessage("error.user.not.found")); + } + + String code = CommonGenerateUtil.generateCode(); + + // 保存到 Redis,key格式:verify_code:{type}:{account} + String redisKey = String.format("verify_code:%s:%s", "logoff", user.getUsername()); + redisUtil.set(redisKey, code, CommonGenerateUtil.CODE_EXPIRE_MINUTES * 60); + + log.info("验证码已生成: account={}, type={}, code={}", user.getUsername(), "logoff", code); + + // 发送验证码 + if (!StringUtils.hasText(user.getTelephone())) { + // 发送短信验证码 + boolean success = smsBaoUtil.sendVerifyCode(user.getTelephone(), code); + if (!success) { + throw new RuntimeException(I18nUtil.getMessage("error.sms.send.failed")); + } + Map map = new HashMap<>(); + map.put("account", user.getTelephone()); + return Result.success(map); + } else { + // 发送邮件验证码 + boolean success = emailUtil.sendVerifyCode(user.getEmail(), code); + if (!success) { + throw new RuntimeException(I18nUtil.getMessage("error.email.send.failed")); + } + Map map = new HashMap<>(); + map.put("account", user.getEmail()); + return Result.success(map); + } + } } diff --git a/src/main/java/com/corewing/app/service/impl/VerifyCodeServiceImpl.java b/src/main/java/com/corewing/app/service/impl/VerifyCodeServiceImpl.java old mode 100644 new mode 100755 index ff3cf3d..34909b7 --- a/src/main/java/com/corewing/app/service/impl/VerifyCodeServiceImpl.java +++ b/src/main/java/com/corewing/app/service/impl/VerifyCodeServiceImpl.java @@ -19,15 +19,8 @@ public class VerifyCodeServiceImpl implements VerifyCodeService { private final SmsBaoUtil smsBaoUtil; private final EmailUtil emailUtil; - /** - * 验证码有效期(分钟) - */ - private static final int CODE_EXPIRE_MINUTES = 5; - /** - * 验证码长度 - */ - private static final int CODE_LENGTH = 6; + public VerifyCodeServiceImpl(RedisUtil redisUtil, SmsBaoUtil smsBaoUtil, EmailUtil emailUtil) { this.redisUtil = redisUtil; @@ -50,11 +43,11 @@ public class VerifyCodeServiceImpl implements VerifyCodeService { } // 生成验证码 - String code = generateCode(); + String code = CommonGenerateUtil.generateCode(); // 保存到 Redis,key格式:verify_code:{type}:{account} String redisKey = String.format("verify_code:%s:%s", type, account); - redisUtil.set(redisKey, code, CODE_EXPIRE_MINUTES * 60); + redisUtil.set(redisKey, code, CommonGenerateUtil.CODE_EXPIRE_MINUTES * 60); log.info("验证码已生成: account={}, type={}, code={}", account, type, code); @@ -106,17 +99,4 @@ public class VerifyCodeServiceImpl implements VerifyCodeService { return matched; } - /** - * 生成随机验证码 - * - * @return 验证码 - */ - private String generateCode() { - Random random = new Random(); - StringBuilder code = new StringBuilder(); - for (int i = 0; i < CODE_LENGTH; i++) { - code.append(random.nextInt(10)); - } - return code.toString(); - } } diff --git a/src/main/java/com/corewing/app/util/CommonGenerateUtil.java b/src/main/java/com/corewing/app/util/CommonGenerateUtil.java new file mode 100644 index 0000000..7d4fe47 --- /dev/null +++ b/src/main/java/com/corewing/app/util/CommonGenerateUtil.java @@ -0,0 +1,32 @@ +package com.corewing.app.util; + +import java.util.Random; + +public class CommonGenerateUtil { + + /** + * 验证码长度 + */ + private static final int CODE_LENGTH = 6; + + + /** + * 验证码有效期(分钟) + */ + public static final int CODE_EXPIRE_MINUTES = 5; + + + /** + * 生成随机验证码 + * + * @return 验证码 + */ + public static String generateCode() { + Random random = new Random(); + StringBuilder code = new StringBuilder(); + for (int i = 0; i < CODE_LENGTH; i++) { + code.append(random.nextInt(10)); + } + return code.toString(); + } +}