package com.vincent.rsf.server.ai.service.impl; import com.vincent.rsf.server.ai.config.AiDefaults; import com.vincent.rsf.server.ai.dto.AiConfigSummaryDto; import com.vincent.rsf.server.ai.dto.AiPromptPreviewDto; import com.vincent.rsf.server.ai.dto.AiPromptPreviewRequest; import com.vincent.rsf.server.ai.entity.AiMcpMount; import com.vincent.rsf.server.ai.service.AiConfigOpsService; import com.vincent.rsf.server.ai.service.AiMcpMountService; import com.vincent.rsf.server.ai.service.AiParamService; import com.vincent.rsf.server.ai.service.AiPromptService; import com.vincent.rsf.server.ai.entity.AiParam; import com.vincent.rsf.server.ai.entity.AiPrompt; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.List; @Service @RequiredArgsConstructor public class AiConfigOpsServiceImpl implements AiConfigOpsService { private final AiPromptRenderSupport aiPromptRenderSupport; private final AiParamService aiParamService; private final AiPromptService aiPromptService; private final AiMcpMountService aiMcpMountService; @Override public AiConfigSummaryDto getSummary(String promptCode, Long tenantId) { String finalPromptCode = StringUtils.hasText(promptCode) ? promptCode : AiDefaults.DEFAULT_PROMPT_CODE; // 运行态摘要只需要读取当前生效配置,直接查库可以避免 Redis 不可用时的额外等待。 AiParam activeParam = aiParamService.getChatParam(tenantId, null); AiPrompt activePrompt = aiPromptService.getActivePrompt(finalPromptCode, tenantId); List mounts = aiMcpMountService.listActiveMounts(tenantId); return AiConfigSummaryDto.builder() .promptCode(activePrompt.getCode()) .promptName(activePrompt.getName()) .promptScene(activePrompt.getScene()) .activeParamName(activeParam.getName()) .activeModel(activeParam.getModel()) .activeParamUpdatedAt(activeParam.getUpdateTime$()) .activeParamUpdatedBy(activeParam.getUpdateBy()) .activeParamValidateStatus(activeParam.getValidateStatus()) .activeParamValidateMessage(activeParam.getLastValidateMessage()) .activeParamValidatedAt(activeParam.getLastValidateTime$()) .enabledMcpCount(mounts.size()) .enabledMcpNames(mounts.stream().map(AiMcpMount::getName).toList()) .activePromptUpdatedAt(activePrompt.getUpdateTime$()) .activePromptUpdatedBy(activePrompt.getUpdateBy()) .build(); } @Override public AiPromptPreviewDto renderPromptPreview(AiPromptPreviewRequest request, Long tenantId) { return aiPromptService.renderPreview(request, tenantId); } }