package xiaozhi.modules.agent.service.impl; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.spring.repository.CrudRepository; import xiaozhi.modules.agent.dao.AgentTemplateDao; import xiaozhi.modules.agent.entity.AgentTemplateEntity; import xiaozhi.modules.agent.service.AgentTemplateService; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /** * @author chenerlei * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现 * @createDate 2025-03-22 11:48:18 */ @Service public class AgentTemplateServiceImpl extends CrudRepository implements AgentTemplateService { /** * 获取默认模板 * * @return 默认模板实体 */ public AgentTemplateEntity getDefaultTemplate() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.orderByAsc(AgentTemplateEntity::getSort) .last("LIMIT 1"); return this.getOne(wrapper); } /** * 更新默认模板中的模型ID * * @param modelType 模型类型 * @param modelId 模型ID */ @Override public void updateDefaultTemplateModelId(String modelType, String modelId) { modelType = modelType.toUpperCase(); // 如果是rag模型,不需要更新 if (modelType.equals("RAG")) { return; } UpdateWrapper wrapper = new UpdateWrapper<>(); switch (modelType) { case "ASR": wrapper.set("asr_model_id", modelId); break; case "VAD": wrapper.set("vad_model_id", modelId); break; case "LLM": wrapper.set("llm_model_id", modelId); break; case "TTS": wrapper.set("tts_model_id", modelId); wrapper.set("tts_voice_id", null); break; case "VLLM": wrapper.set("vllm_model_id", modelId); break; case "MEMORY": wrapper.set("mem_model_id", modelId); break; case "INTENT": wrapper.set("intent_model_id", modelId); break; } wrapper.ge("sort", 0); update(wrapper); } @Override public void reorderTemplatesAfterDelete(Integer deletedSort) { if (deletedSort == null) { return; } // 查询所有排序值大于被删除模板的记录 UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.gt("sort", deletedSort) .setSql("sort = sort - 1"); // 执行批量更新,将这些记录的排序值减1 this.update(updateWrapper); } @Override public Integer getNextAvailableSort() { // 查询所有已存在的排序值并按升序排序 List sortValues = baseMapper.selectList(new QueryWrapper()) .stream() .map(AgentTemplateEntity::getSort) .filter(Objects::nonNull) .sorted() .collect(Collectors.toList()); // 如果没有排序值,返回1 if (sortValues.isEmpty()) { return 1; } // 寻找最小的未使用序号 int expectedSort = 1; for (Integer sort : sortValues) { if (sort > expectedSort) { // 找到空缺的序号 return expectedSort; } expectedSort = sort + 1; } // 如果没有空缺,返回最大序号+1 return expectedSort; } }