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/service/impl/AiParamServiceImpl.java |   44 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiParamServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiParamServiceImpl.java
index 41a014b..07715d5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiParamServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiParamServiceImpl.java
@@ -15,9 +15,12 @@
 public class AiParamServiceImpl extends ServiceImpl<AiParamMapper, AiParam> implements AiParamService {
 
     @Override
-    public AiParam getActiveParam() {
+    public AiParam getActiveParam(Long tenantId) {
+        ensureTenantId(tenantId);
         AiParam aiParam = this.getOne(new LambdaQueryWrapper<AiParam>()
+                .eq(AiParam::getTenantId, tenantId)
                 .eq(AiParam::getStatus, StatusType.ENABLE.val)
+                .eq(AiParam::getDeleted, 0)
                 .last("limit 1"));
         if (aiParam == null) {
             throw new CoolException("鏈壘鍒板惎鐢ㄤ腑鐨� AI 鍙傛暟閰嶇疆");
@@ -26,20 +29,25 @@
     }
 
     @Override
-    public void validateBeforeSave(AiParam aiParam) {
+    public void validateBeforeSave(AiParam aiParam, Long tenantId) {
+        ensureTenantId(tenantId);
+        aiParam.setTenantId(tenantId);
         fillDefaults(aiParam);
         ensureBaseFields(aiParam);
-        ensureSingleActive(aiParam, null);
+        ensureSingleActive(tenantId, null, aiParam.getStatus());
     }
 
     @Override
-    public void validateBeforeUpdate(AiParam aiParam) {
+    public void validateBeforeUpdate(AiParam aiParam, Long tenantId) {
+        ensureTenantId(tenantId);
         fillDefaults(aiParam);
         if (aiParam.getId() == null) {
             throw new CoolException("AI 鍙傛暟 ID 涓嶈兘涓虹┖");
         }
+        AiParam current = requireOwnedRecord(aiParam.getId(), tenantId);
+        aiParam.setTenantId(current.getTenantId());
         ensureBaseFields(aiParam);
-        ensureSingleActive(aiParam, aiParam.getId());
+        ensureSingleActive(tenantId, aiParam.getId(), aiParam.getStatus());
     }
 
     private void ensureBaseFields(AiParam aiParam) {
@@ -60,12 +68,14 @@
         }
     }
 
-    private void ensureSingleActive(AiParam aiParam, Long selfId) {
-        if (aiParam.getStatus() == null || aiParam.getStatus() != StatusType.ENABLE.val) {
+    private void ensureSingleActive(Long tenantId, Long selfId, Integer status) {
+        if (status == null || status != StatusType.ENABLE.val) {
             return;
         }
         LambdaQueryWrapper<AiParam> wrapper = new LambdaQueryWrapper<AiParam>()
-                .eq(AiParam::getStatus, StatusType.ENABLE.val);
+                .eq(AiParam::getTenantId, tenantId)
+                .eq(AiParam::getStatus, StatusType.ENABLE.val)
+                .eq(AiParam::getDeleted, 0);
         if (selfId != null) {
             wrapper.ne(AiParam::getId, selfId);
         }
@@ -74,6 +84,24 @@
         }
     }
 
+    private AiParam requireOwnedRecord(Long id, Long tenantId) {
+        AiParam aiParam = this.getOne(new LambdaQueryWrapper<AiParam>()
+                .eq(AiParam::getId, id)
+                .eq(AiParam::getTenantId, tenantId)
+                .eq(AiParam::getDeleted, 0)
+                .last("limit 1"));
+        if (aiParam == null) {
+            throw new CoolException("AI 鍙傛暟涓嶅瓨鍦ㄦ垨鏃犳潈璁块棶");
+        }
+        return aiParam;
+    }
+
+    private void ensureTenantId(Long tenantId) {
+        if (tenantId == null) {
+            throw new CoolException("褰撳墠绉熸埛涓嶅瓨鍦�");
+        }
+    }
+
     private void fillDefaults(AiParam aiParam) {
         if (!StringUtils.hasText(aiParam.getProviderType())) {
             aiParam.setProviderType(AiDefaults.PROVIDER_OPENAI_COMPATIBLE);

--
Gitblit v1.9.1