From 068ca75cafb9bf5ac5e0ed0f1b0a16e5a5c0e820 Mon Sep 17 00:00:00 2001 From: MichaelWin Date: Thu, 11 Dec 2025 11:42:52 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E7=94=A8?= =?UTF-8?q?=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 --- .../corewing/app/dto/api/LogoffRequest.java | 13 +++++++ .../corewing/app/dto/api/SendCodeRequest.java | 2 +- .../app/modules/app/AppUserController.java | 11 ++++++ .../com/corewing/app/service/UserService.java | 8 ++++ .../app/service/impl/UserServiceImpl.java | 37 ++++++++++++++++++- 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/corewing/app/dto/api/LogoffRequest.java mode change 100644 => 100755 src/main/java/com/corewing/app/dto/api/SendCodeRequest.java mode change 100644 => 100755 src/main/java/com/corewing/app/modules/app/AppUserController.java mode change 100644 => 100755 src/main/java/com/corewing/app/service/UserService.java mode change 100644 => 100755 src/main/java/com/corewing/app/service/impl/UserServiceImpl.java diff --git a/src/main/java/com/corewing/app/dto/api/LogoffRequest.java b/src/main/java/com/corewing/app/dto/api/LogoffRequest.java new file mode 100644 index 0000000..4417599 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/api/LogoffRequest.java @@ -0,0 +1,13 @@ +package com.corewing.app.dto.api; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class LogoffRequest { + + @NotBlank(message = "验证码不能为空") + private String code; + +} diff --git a/src/main/java/com/corewing/app/dto/api/SendCodeRequest.java b/src/main/java/com/corewing/app/dto/api/SendCodeRequest.java old mode 100644 new mode 100755 index 22e72f8..e16339e --- a/src/main/java/com/corewing/app/dto/api/SendCodeRequest.java +++ b/src/main/java/com/corewing/app/dto/api/SendCodeRequest.java @@ -17,7 +17,7 @@ public class SendCodeRequest { private String account; /** - * 验证码类型:register-注册, login-登录, reset-重置密码, forget-忘记密码 + * 验证码类型:register-注册, login-登录, reset-重置密码, forget-忘记密码,logoff-注销 */ @NotBlank(message = "验证码类型不能为空") private String type; diff --git a/src/main/java/com/corewing/app/modules/app/AppUserController.java b/src/main/java/com/corewing/app/modules/app/AppUserController.java old mode 100644 new mode 100755 index d331a1e..3dc5018 --- a/src/main/java/com/corewing/app/modules/app/AppUserController.java +++ b/src/main/java/com/corewing/app/modules/app/AppUserController.java @@ -13,6 +13,7 @@ import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; import java.util.HashMap; import java.util.Map; @@ -203,4 +204,14 @@ public class AppUserController { data.put("username", user.getUsername()); return Result.success(I18nUtil.getMessage("user.login.success"), data); } + + /** + * 注销用户 + * @param logoffRequest + * @return + */ + @PostMapping("/logoff") + public Result logoff(@RequestBody @Valid LogoffRequest logoffRequest) { + return Result.isBool(userService.logoff(logoffRequest)); + } } diff --git a/src/main/java/com/corewing/app/service/UserService.java b/src/main/java/com/corewing/app/service/UserService.java old mode 100644 new mode 100755 index 3bf28c3..cf574d3 --- a/src/main/java/com/corewing/app/service/UserService.java +++ b/src/main/java/com/corewing/app/service/UserService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.corewing.app.dto.api.CodeLoginRequest; import com.corewing.app.dto.api.ForgetPasswordRequest; +import com.corewing.app.dto.api.LogoffRequest; import com.corewing.app.dto.biz.user.BizUserStatusRequest; import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; @@ -129,4 +130,11 @@ public interface UserService extends IService { * @return */ String codeLogin(CodeLoginRequest codeLoginRequest); + + /** + * 注销用户 + * @param logoffRequest + * @return + */ + boolean logoff(LogoffRequest logoffRequest); } diff --git a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java old mode 100644 new mode 100755 index 944763c..a899482 --- a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java +++ b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.corewing.app.common.page.PageContext; import com.corewing.app.dto.api.CodeLoginRequest; import com.corewing.app.dto.api.ForgetPasswordRequest; +import com.corewing.app.dto.api.LogoffRequest; import com.corewing.app.dto.biz.user.BizUserStatusRequest; import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; @@ -34,12 +35,14 @@ public class UserServiceImpl extends ServiceImpl implements Us private final Ip2RegionUtil ip2RegionUtil; private final UserMapper userMapper; private final RedisUtil redisUtil; + private final UserService userService; - public UserServiceImpl(VerifyCodeService verifyCodeService, Ip2RegionUtil ip2RegionUtil, UserMapper userMapper, RedisUtil redisUtil) { + public UserServiceImpl(VerifyCodeService verifyCodeService, Ip2RegionUtil ip2RegionUtil, UserMapper userMapper, RedisUtil redisUtil, UserService userService) { this.verifyCodeService = verifyCodeService; this.ip2RegionUtil = ip2RegionUtil; this.userMapper = userMapper; this.redisUtil = redisUtil; + this.userService = userService; } @Override @@ -294,4 +297,36 @@ public class UserServiceImpl extends ServiceImpl implements Us StpUtil.login(user.getId()); return StpUtil.getTokenValue(); } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean logoff(LogoffRequest request) { + User user = this.getById(StpUtil.getLoginId().toString()); + // 校验验证码 + 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); + } + } + + if(checkCode == null || !request.getCode().equalsIgnoreCase(checkCode.toString())) { + throw new RuntimeException(I18nUtil.getMessage("error.verify.code.invalid")); + } + StpUtil.logout(); + + // 删除记录 + userService.removeById(user.getId()); + return true; + } }