diff --git a/src/main/java/com/yupi/springbootinit/controller/UserController.java b/src/main/java/com/yupi/springbootinit/controller/UserController.java index f3148d4..b0a4b90 100644 --- a/src/main/java/com/yupi/springbootinit/controller/UserController.java +++ b/src/main/java/com/yupi/springbootinit/controller/UserController.java @@ -68,4 +68,9 @@ public class UserController { return ResultUtils.success(loginService.logout()); } + @PostMapping("/bigbrother-logout") + public BaseResponse bigBrotherLogout(@RequestBody SystemUsersDTO usersDTO){ + return ResultUtils.success(loginService.bigBrotherLogout(usersDTO)); + } + } diff --git a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java index 032bcfe..02fffe9 100644 --- a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java +++ b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java @@ -246,6 +246,27 @@ public class LoginService { return true; } + public Boolean bigBrotherLogout(SystemUsersDTO usersDTO) { + // 1. 删除 Redis 中该用户的 BIG_BROTHER 登录标记 + Boolean bigBrother_login = redisTemplate.delete("bigbrother_login:" + usersDTO.getTenantId() + ":" + usersDTO.getUserId()); + + // 2. 使当前 Token 失效 + String tokenValue = StpUtil.getTokenValue(); + StpUtil.logoutByTokenValue(tokenValue); + + log.info("删除租户:{} 登录状态:{}", usersDTO.getTenantId(), bigBrother_login); + + // 3. 若该租户下已无 AI_CHAT 在线用户,则删除队列 + if (!redisUtils.hasKeyByPrefix("bigbrother_login:" + usersDTO.getTenantId())) { + boolean b = rabbitAdmin.deleteQueue("b.tenant." + usersDTO.getTenantId()); + log.info("删除大哥租户:{} 队列删除状态:{}", usersDTO.getTenantId(), b); + } + + + return true; + } + + /** * 通用登出(不区分场景) *