zhou zhou
昨天 4954d3978cf1967729a5a2d5b90f6baef18974da
rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptServiceImpl.java
@@ -3,15 +3,22 @@
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;
    private final AiRedisSupport aiRedisSupport;
    @Override
    public AiPrompt getActivePrompt(String code, Long tenantId) {
@@ -48,6 +55,59 @@
        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()
        );
    }
    @Override
    public boolean save(AiPrompt entity) {
        boolean saved = super.save(entity);
        if (saved && entity != null && entity.getTenantId() != null) {
            aiRedisSupport.evictTenantConfigCaches(entity.getTenantId());
        }
        return saved;
    }
    @Override
    public boolean updateById(AiPrompt entity) {
        boolean updated = super.updateById(entity);
        if (updated && entity != null && entity.getTenantId() != null) {
            aiRedisSupport.evictTenantConfigCaches(entity.getTenantId());
        }
        return updated;
    }
    @Override
    public boolean removeByIds(java.util.Collection<?> list) {
        java.util.List<java.io.Serializable> ids = list == null ? java.util.List.of() : list.stream()
                .filter(java.util.Objects::nonNull)
                .map(item -> (java.io.Serializable) item)
                .toList();
        java.util.List<AiPrompt> records = this.listByIds(ids);
        boolean removed = super.removeByIds(list);
        if (removed) {
            records.stream()
                    .map(AiPrompt::getTenantId)
                    .filter(java.util.Objects::nonNull)
                    .distinct()
                    .forEach(aiRedisSupport::evictTenantConfigCaches);
        }
        return removed;
    }
    private void ensureRequiredFields(AiPrompt aiPrompt) {
        if (!StringUtils.hasText(aiPrompt.getName())) {
            throw new CoolException("Prompt 名称不能为空");