From 43cbd262ea6033066f939b727a226f9642886173 Mon Sep 17 00:00:00 2001 From: Ziin Date: Wed, 27 Aug 2025 21:12:50 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9AI=E9=80=80=E5=87=BA?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LoginService.java | 16 +++++++++--- .../yupi/springbootinit/utils/RedisUtils.java | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/yupi/springbootinit/utils/RedisUtils.java 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 72b10ac..1d7f878 100644 --- a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java +++ b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java @@ -10,6 +10,7 @@ import com.yupi.springbootinit.model.enums.CommonStatusEnum; import com.yupi.springbootinit.model.enums.LoginSceneEnum; import com.yupi.springbootinit.model.vo.user.SystemUsersVO; import com.yupi.springbootinit.service.SystemUsersService; +import com.yupi.springbootinit.utils.RedisUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.*; @@ -37,11 +38,14 @@ public class LoginService { @Resource private RabbitAdmin rabbitAdmin; + @Resource + private RedisUtils redisUtils; + public SystemUsersVO login(LoginSceneEnum scene, SystemUsersDTO dto) { SystemUsers user = validateUser(dto); // 校验用户名、密码、状态、租户过期 checkRole(scene, user.getId()); // 按场景做角色校验 if (scene.equals(LoginSceneEnum.AI_CHAT)) { - redisTemplate.opsForValue().set("ai_login:"+user.getTenantId() ,true); + redisTemplate.opsForValue().set("ai_login:"+user.getTenantId()+":"+user.getId(),true); String queueName = "q.tenant." + user.getTenantId(); if (created.add(String.valueOf(user.getTenantId()))) { Queue queue = QueueBuilder.durable(queueName).build(); @@ -89,10 +93,14 @@ public class LoginService { } public Boolean aiChatLogout(SystemUsersDTO usersDTO) { - Boolean delete = redisTemplate.delete("ai_login:"+usersDTO.getTenantId()); - created.remove(String.valueOf(usersDTO.getTenantId())); - log.info("删除租户:{}登录状态:{}",usersDTO.getTenantId(),delete); + Boolean delete = redisTemplate.delete("ai_login:"+usersDTO.getTenantId()+":"+usersDTO.getUserId()); StpUtil.logout(usersDTO.getUserId()); + log.info("删除租户:{}登录状态:{}",usersDTO.getTenantId(),delete); + if (!redisUtils.hasAiLoginKeys("ai_login:" + usersDTO.getTenantId()+":*")) { + created.remove(String.valueOf(usersDTO.getTenantId())); + boolean b = rabbitAdmin.deleteQueue("q.tenant." + usersDTO.getTenantId()); + log.info("删除租户:{}队列删除状态:{}",usersDTO.getTenantId(),b); + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/yupi/springbootinit/utils/RedisUtils.java b/src/main/java/com/yupi/springbootinit/utils/RedisUtils.java new file mode 100644 index 0000000..1d9b5bf --- /dev/null +++ b/src/main/java/com/yupi/springbootinit/utils/RedisUtils.java @@ -0,0 +1,26 @@ +package com.yupi.springbootinit.utils; + +/* + * @author: ziin + * @date: 2025/8/27 20:35 + */ + +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Set; + + +@Component +public class RedisUtils { + + + @Resource + private RedisTemplate redisTemplate; + + public boolean hasAiLoginKeys(String prefix) { + Set keys = redisTemplate.keys(prefix); // 获取匹配的键集合 + return !keys.isEmpty(); // 如果有键匹配,返回true,否则返回false + } +}