From 3d81df739dc45599c257d8cdefe0996f66ccdeae Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 19 三月 2026 12:18:14 +0800
Subject: [PATCH] #AI.MCP 管理增强

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/controller/AiChatController.java |   44 ++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/controller/AiChatController.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/controller/AiChatController.java
index 63a2073..613d629 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/controller/AiChatController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/controller/AiChatController.java
@@ -1,16 +1,23 @@
 package com.vincent.rsf.server.ai.controller;
 
 import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.ai.dto.AiChatSessionPinRequest;
+import com.vincent.rsf.server.ai.dto.AiChatSessionRenameRequest;
 import com.vincent.rsf.server.ai.dto.AiChatRequest;
 import com.vincent.rsf.server.ai.service.AiChatService;
 import com.vincent.rsf.server.system.controller.BaseController;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
+import java.util.UUID;
+
 @RestController
+@Slf4j
 @RequiredArgsConstructor
 public class AiChatController extends BaseController {
 
@@ -25,8 +32,9 @@
 
     @PreAuthorize("isAuthenticated()")
     @GetMapping("/ai/chat/sessions")
-    public R sessions(@RequestParam(required = false) String promptCode) {
-        return R.ok().add(aiChatService.listSessions(promptCode, getLoginUserId(), getTenantId()));
+    public R sessions(@RequestParam(required = false) String promptCode,
+                      @RequestParam(required = false) String keyword) {
+        return R.ok().add(aiChatService.listSessions(promptCode, keyword, getLoginUserId(), getTenantId()));
     }
 
     @PreAuthorize("isAuthenticated()")
@@ -37,8 +45,40 @@
     }
 
     @PreAuthorize("isAuthenticated()")
+    @PostMapping("/ai/chat/session/rename/{sessionId}")
+    public R renameSession(@PathVariable Long sessionId, @RequestBody AiChatSessionRenameRequest request) {
+        return R.ok("Update Success").add(aiChatService.renameSession(sessionId, request, getLoginUserId(), getTenantId()));
+    }
+
+    @PreAuthorize("isAuthenticated()")
+    @PostMapping("/ai/chat/session/pin/{sessionId}")
+    public R pinSession(@PathVariable Long sessionId, @RequestBody AiChatSessionPinRequest request) {
+        return R.ok("Update Success").add(aiChatService.pinSession(sessionId, request, getLoginUserId(), getTenantId()));
+    }
+
+    @PreAuthorize("isAuthenticated()")
+    @PostMapping("/ai/chat/session/memory/clear/{sessionId}")
+    public R clearSessionMemory(@PathVariable Long sessionId) {
+        aiChatService.clearSessionMemory(sessionId, getLoginUserId(), getTenantId());
+        return R.ok("Clear Success").add(sessionId);
+    }
+
+    @PreAuthorize("isAuthenticated()")
+    @PostMapping("/ai/chat/session/memory/retain-latest/{sessionId}")
+    public R retainLatestRound(@PathVariable Long sessionId) {
+        aiChatService.retainLatestRound(sessionId, getLoginUserId(), getTenantId());
+        return R.ok("Retain Success").add(sessionId);
+    }
+
+    @PreAuthorize("isAuthenticated()")
     @PostMapping(value = "/ai/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     public SseEmitter stream(@RequestBody AiChatRequest request) {
+        String requestId = StringUtils.hasText(request.getRequestId())
+                ? request.getRequestId().trim()
+                : UUID.randomUUID().toString().replace("-", "");
+        request.setRequestId(requestId);
+        log.info("AI chat request accepted, requestId={}, userId={}, tenantId={}, sessionId={}",
+                requestId, getLoginUserId(), getTenantId(), request.getSessionId());
         return aiChatService.stream(request, getLoginUserId(), getTenantId());
     }
 }

--
Gitblit v1.9.1