package com.vincent.rsf.server.ai.service.impl; 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.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 org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @Service("aiPromptService") public class AiPromptServiceImpl extends ServiceImpl implements AiPromptService { @Override public AiPrompt getActivePrompt(String code) { AiPrompt aiPrompt = this.getOne(new LambdaQueryWrapper() .eq(AiPrompt::getCode, code) .eq(AiPrompt::getStatus, StatusType.ENABLE.val) .last("limit 1")); if (aiPrompt == null) { throw new CoolException("未找到启用中的 Prompt:" + code); } return aiPrompt; } @Override public void validateBeforeSave(AiPrompt aiPrompt) { ensureRequiredFields(aiPrompt); ensureUniqueCode(aiPrompt.getCode(), null); } @Override public void validateBeforeUpdate(AiPrompt aiPrompt) { if (aiPrompt.getId() == null) { throw new CoolException("Prompt ID 不能为空"); } ensureRequiredFields(aiPrompt); ensureUniqueCode(aiPrompt.getCode(), aiPrompt.getId()); } private void ensureRequiredFields(AiPrompt aiPrompt) { if (!StringUtils.hasText(aiPrompt.getName())) { throw new CoolException("Prompt 名称不能为空"); } if (!StringUtils.hasText(aiPrompt.getCode())) { throw new CoolException("Prompt 编码不能为空"); } if (!StringUtils.hasText(aiPrompt.getSystemPrompt())) { throw new CoolException("系统 Prompt 不能为空"); } if (aiPrompt.getStatus() == null) { aiPrompt.setStatus(StatusType.ENABLE.val); } } private void ensureUniqueCode(String code, Long selfId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(AiPrompt::getCode, code); if (selfId != null) { wrapper.ne(AiPrompt::getId, selfId); } if (this.count(wrapper) > 0) { throw new CoolException("Prompt 编码已存在"); } } }