From 158a0190b5a7b93c0d31541c1e350e5221519fb1 Mon Sep 17 00:00:00 2001
From: ageer <ageerle@163.com>
Date: 星期五, 16 五月 2025 23:52:43 +0800
Subject: [PATCH] feat: 优化会话管理查询逻辑

---
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java |   71 +++++++++--------------------------
 1 files changed, 18 insertions(+), 53 deletions(-)

diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
index 1387230..5c1e5ea 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
@@ -1,19 +1,14 @@
 package org.ruoyi.chat.service.chat.impl;
 
-import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.google.protobuf.ServiceException;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.ResponseBody;
-import org.ruoyi.chat.enums.ChatModeType;
 import org.ruoyi.chat.factory.ChatServiceFactory;
 import org.ruoyi.chat.service.chat.IChatCostService;
 import org.ruoyi.chat.service.chat.IChatService;
 import org.ruoyi.chat.service.chat.ISseService;
-import org.ruoyi.chat.util.IpUtil;
 import org.ruoyi.chat.util.SSEUtil;
 import org.ruoyi.common.chat.config.LocalCache;
 import org.ruoyi.common.chat.entity.Tts.TextToSpeech;
@@ -26,15 +21,14 @@
 import org.ruoyi.common.core.utils.StringUtils;
 import org.ruoyi.common.core.utils.file.FileUtils;
 import org.ruoyi.common.core.utils.file.MimeTypeUtils;
-import org.ruoyi.common.redis.utils.RedisUtils;
 import org.ruoyi.domain.bo.ChatSessionBo;
 import org.ruoyi.domain.bo.QueryVectorBo;
 import org.ruoyi.domain.vo.ChatModelVo;
 import org.ruoyi.domain.vo.KnowledgeInfoVo;
-import org.ruoyi.service.IKnowledgeInfoService;
-import org.ruoyi.service.VectorStoreService;
 import org.ruoyi.service.IChatModelService;
 import org.ruoyi.service.IChatSessionService;
+import org.ruoyi.service.IKnowledgeInfoService;
+import org.ruoyi.service.VectorStoreService;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.core.io.Resource;
 import org.springframework.http.MediaType;
@@ -49,10 +43,12 @@
 import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * @author ageer
+ */
 @Service
 @Slf4j
 @RequiredArgsConstructor
@@ -81,24 +77,20 @@
         try {
             // 鏋勫缓娑堟伅鍒楄〃
             buildChatMessageList(chatRequest);
-            if (!StpUtil.isLogin()) {
-                // 鏈櫥褰曠敤鎴烽檺鍒跺璇濇鏁�
-                checkUnauthenticatedUserChatLimit(request);
-            }else {
-                LocalCache.CACHE.put("userId", chatCostService.getUserId());
-                chatRequest.setUserId(chatCostService.getUserId());
-                // 淇濆瓨浼氳瘽淇℃伅
-                if(chatRequest.getSessionId()==null){
-                    ChatSessionBo chatSessionBo = new ChatSessionBo();
-                    chatSessionBo.setUserId(chatCostService.getUserId());
-                    chatSessionBo.setSessionTitle(getFirst10Characters(chatRequest.getPrompt()));
-                    chatSessionBo.setSessionContent(chatRequest.getPrompt());
-                    chatSessionService.insertByBo(chatSessionBo);
-                    chatRequest.setSessionId(chatSessionBo.getId());
-                }
-                // 淇濆瓨娑堟伅璁板綍 骞舵墸闄よ垂鐢�
-                chatCostService.deductToken(chatRequest);
+
+            LocalCache.CACHE.put("userId", chatCostService.getUserId());
+            chatRequest.setUserId(chatCostService.getUserId());
+            // 淇濆瓨浼氳瘽淇℃伅
+            if(chatRequest.getSessionId()==null){
+                ChatSessionBo chatSessionBo = new ChatSessionBo();
+                chatSessionBo.setUserId(chatCostService.getUserId());
+                chatSessionBo.setSessionTitle(getFirst10Characters(chatRequest.getPrompt()));
+                chatSessionBo.setSessionContent(chatRequest.getPrompt());
+                chatSessionService.insertByBo(chatSessionBo);
+                chatRequest.setSessionId(chatSessionBo.getId());
             }
+            // 淇濆瓨娑堟伅璁板綍 骞舵墸闄よ垂鐢�
+            chatCostService.deductToken(chatRequest);
             // 鏍规嵁妯″瀷鍒嗙被璋冪敤涓嶅悓鐨勫鐞嗛�昏緫
             IChatService chatService = chatServiceFactory.getChatService(chatModelVo.getCategory());
             chatService.chat(chatRequest, sseEmitter);
@@ -124,33 +116,6 @@
             // 濡傛灉闀垮害涓嶈冻10锛岃繑鍥炴暣涓瓧绗︿覆
             return str;
         }
-    }
-
-    /**
-     * 妫�鏌ユ湭鐧诲綍鐢ㄦ埛鏄惁瓒呰繃褰撴棩瀵硅瘽娆℃暟闄愬埗
-     *
-     * @param request 褰撳墠璇锋眰
-     * @throws ServiceException 濡傛灉褰撴棩鍏嶈垂娆℃暟宸茬敤瀹�
-     */
-    public void checkUnauthenticatedUserChatLimit(HttpServletRequest request) throws ServiceException {
-
-            String clientIp = IpUtil.getClientIp(request);
-            // 璁垮姣忓ぉ榛樿鍙兘瀵硅瘽5娆�
-            int timeWindowInSeconds = 5;
-            String redisKey = "clientIp:" + clientIp;
-            int count = 0;
-            // 妫�鏌edis涓殑瀵硅瘽娆℃暟
-            if (RedisUtils.getCacheObject(redisKey) == null) {
-                // 缂撳瓨鏈夋晥鏃堕棿1澶�
-                RedisUtils.setCacheObject(redisKey, count, Duration.ofSeconds(86400));
-            } else {
-                count = RedisUtils.getCacheObject(redisKey);
-                if (count >= timeWindowInSeconds) {
-                    throw new ServiceException("褰撴棩鍏嶈垂娆℃暟宸茬敤瀹�");
-                }
-                count++;
-                RedisUtils.setCacheObject(redisKey, count);
-            }
     }
 
     /**

--
Gitblit v1.9.3