From 80a6d9236ade191a5de0975abe4de5a6e7e63915 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 19 三月 2026 14:03:10 +0800
Subject: [PATCH] #AI.注释

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java |   65 +++++++++++++++++++++++++++++---
 1 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java
index 7603c97..ba072da 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java
@@ -3,21 +3,30 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.ai.dto.AiPromptPreviewDto;
+import com.vincent.rsf.server.ai.dto.AiPromptPreviewRequest;
 import com.vincent.rsf.server.ai.entity.AiPrompt;
 import com.vincent.rsf.server.ai.mapper.AiPromptMapper;
 import com.vincent.rsf.server.ai.service.AiPromptService;
 import com.vincent.rsf.server.system.enums.StatusType;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 @Service("aiPromptService")
+@RequiredArgsConstructor
 public class AiPromptServiceImpl extends ServiceImpl<AiPromptMapper, AiPrompt> implements AiPromptService {
 
+    private final AiPromptRenderSupport aiPromptRenderSupport;
+
     @Override
-    public AiPrompt getActivePrompt(String code) {
+    public AiPrompt getActivePrompt(String code, Long tenantId) {
+        ensureTenantId(tenantId);
         AiPrompt aiPrompt = this.getOne(new LambdaQueryWrapper<AiPrompt>()
+                .eq(AiPrompt::getTenantId, tenantId)
                 .eq(AiPrompt::getCode, code)
                 .eq(AiPrompt::getStatus, StatusType.ENABLE.val)
+                .eq(AiPrompt::getDeleted, 0)
                 .last("limit 1"));
         if (aiPrompt == null) {
             throw new CoolException("鏈壘鍒板惎鐢ㄤ腑鐨� Prompt锛�" + code);
@@ -26,18 +35,40 @@
     }
 
     @Override
-    public void validateBeforeSave(AiPrompt aiPrompt) {
+    public void validateBeforeSave(AiPrompt aiPrompt, Long tenantId) {
+        ensureTenantId(tenantId);
+        aiPrompt.setTenantId(tenantId);
         ensureRequiredFields(aiPrompt);
-        ensureUniqueCode(aiPrompt.getCode(), null);
+        ensureUniqueCode(aiPrompt.getCode(), tenantId, null);
     }
 
     @Override
-    public void validateBeforeUpdate(AiPrompt aiPrompt) {
+    public void validateBeforeUpdate(AiPrompt aiPrompt, Long tenantId) {
+        ensureTenantId(tenantId);
         if (aiPrompt.getId() == null) {
             throw new CoolException("Prompt ID 涓嶈兘涓虹┖");
         }
+        AiPrompt current = requireOwnedRecord(aiPrompt.getId(), tenantId);
+        aiPrompt.setTenantId(current.getTenantId());
         ensureRequiredFields(aiPrompt);
-        ensureUniqueCode(aiPrompt.getCode(), aiPrompt.getId());
+        ensureUniqueCode(aiPrompt.getCode(), tenantId, aiPrompt.getId());
+    }
+
+    @Override
+    public AiPromptPreviewDto renderPreview(AiPromptPreviewRequest request, Long tenantId) {
+        ensureTenantId(tenantId);
+        if (request == null) {
+            throw new CoolException("Prompt 棰勮鍙傛暟涓嶈兘涓虹┖");
+        }
+        if (!StringUtils.hasText(request.getSystemPrompt())) {
+            throw new CoolException("绯荤粺 Prompt 涓嶈兘涓虹┖");
+        }
+        return aiPromptRenderSupport.render(
+                request.getSystemPrompt(),
+                request.getUserPromptTemplate(),
+                request.getInput(),
+                request.getMetadata()
+        );
     }
 
     private void ensureRequiredFields(AiPrompt aiPrompt) {
@@ -55,9 +86,11 @@
         }
     }
 
-    private void ensureUniqueCode(String code, Long selfId) {
+    private void ensureUniqueCode(String code, Long tenantId, Long selfId) {
         LambdaQueryWrapper<AiPrompt> wrapper = new LambdaQueryWrapper<AiPrompt>()
-                .eq(AiPrompt::getCode, code);
+                .eq(AiPrompt::getTenantId, tenantId)
+                .eq(AiPrompt::getCode, code)
+                .eq(AiPrompt::getDeleted, 0);
         if (selfId != null) {
             wrapper.ne(AiPrompt::getId, selfId);
         }
@@ -65,4 +98,22 @@
             throw new CoolException("Prompt 缂栫爜宸插瓨鍦�");
         }
     }
+
+    private AiPrompt requireOwnedRecord(Long id, Long tenantId) {
+        AiPrompt aiPrompt = this.getOne(new LambdaQueryWrapper<AiPrompt>()
+                .eq(AiPrompt::getId, id)
+                .eq(AiPrompt::getTenantId, tenantId)
+                .eq(AiPrompt::getDeleted, 0)
+                .last("limit 1"));
+        if (aiPrompt == null) {
+            throw new CoolException("Prompt 涓嶅瓨鍦ㄦ垨鏃犳潈璁块棶");
+        }
+        return aiPrompt;
+    }
+
+    private void ensureTenantId(Long tenantId) {
+        if (tenantId == null) {
+            throw new CoolException("褰撳墠绉熸埛涓嶅瓨鍦�");
+        }
+    }
 }

--
Gitblit v1.9.1