package com.iailab.module.ai.service.questiontemplate; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.module.ai.controller.admin.questionparamsetting.vo.QuestionParamSettingRespVO; import com.iailab.module.ai.dal.dataobject.model.AiModelDO; import com.iailab.module.ai.dal.dataobject.questionparamsetting.QuestionParamSettingDO; import com.iailab.module.ai.dal.mysql.questionparamsetting.QuestionParamSettingMapper; import com.iailab.module.ai.service.model.AiModelService; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import com.iailab.module.ai.controller.admin.questiontemplate.vo.*; import com.iailab.module.ai.dal.dataobject.questiontemplate.QuestionTemplateDO; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.ai.dal.mysql.questiontemplate.QuestionTemplateMapper; import java.util.List; import java.util.UUID; import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.iailab.module.ai.enums.ErrorCodeConstants.*; /** * 大模型问题模板 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class QuestionTemplateServiceImpl implements QuestionTemplateService { @Resource private QuestionTemplateMapper questionTemplateMapper; @Resource private QuestionParamSettingMapper questionParamSettingMapper; @Resource private AiModelService aiModelService; @Override public String createQuestionTemplate(QuestionTemplateSaveReqVO createReqVO) { // 插入 QuestionTemplateDO questionTemplate = BeanUtils.toBean(createReqVO, QuestionTemplateDO.class); String id = UUID.randomUUID().toString(); questionTemplate.setId(id); // 插入设置列表 createReqVO.getSettingList().forEach(setting -> { setting.setTemplateId(id); questionParamSettingMapper.insert(BeanUtils.toBean(setting, QuestionParamSettingDO.class)); }); questionTemplateMapper.insert(questionTemplate); // 返回 return questionTemplate.getId(); } @Override public void updateQuestionTemplate(QuestionTemplateSaveReqVO updateReqVO) { // 校验存在 validateQuestionTemplateExists(updateReqVO.getId()); // 更新 QuestionTemplateDO updateObj = BeanUtils.toBean(updateReqVO, QuestionTemplateDO.class); // 删除设置列表 questionParamSettingMapper.deleteByTemplateId(updateReqVO.getId()); // 更新设置列表 updateReqVO.getSettingList().forEach(setting -> { setting.setTemplateId(updateReqVO.getId()); setting.setId(null); questionParamSettingMapper.insert(BeanUtils.toBean(setting, QuestionParamSettingDO.class)); }); questionTemplateMapper.updateById(updateObj); } @Override public void deleteQuestionTemplate(String id) { // 校验存在 validateQuestionTemplateExists(id); // 删除 questionTemplateMapper.deleteById(id); // 删除设置列表 questionParamSettingMapper.deleteByTemplateId(id); } private void validateQuestionTemplateExists(String id) { if (questionTemplateMapper.selectById(id) == null) { throw exception(QUESTION_TEMPLATE_NOT_EXISTS); } } @Override public QuestionTemplateDO getQuestionTemplate(String id) { QuestionTemplateDO questionTemplateDO = questionTemplateMapper.selectById(id); questionTemplateDO.setSettingList(BeanUtils.toBean(questionParamSettingMapper.selectList("template_id",id), QuestionParamSettingRespVO.class)); return questionTemplateDO; } @Override public List getQuestionTemplates(QuestionTemplateReqVO reqVO) { String modelName = reqVO.getModelName(); if(ObjectUtils.isNotEmpty(modelName)) { AiModelDO model = aiModelService.getModelByName(modelName); List questionTemplateDOS = questionTemplateMapper.selectList( new LambdaQueryWrapperX() .eqIfPresent(QuestionTemplateDO::getModelId, model.getId()) .eqIfPresent(QuestionTemplateDO::getQuestionCode, reqVO.getQuestionCode())); // 模板数量暂时很少,先循环遍历查询模板设置 if (questionTemplateDOS != null && questionTemplateDOS.size() > 0) { questionTemplateDOS.stream().forEach(questionTemplateDO -> { questionTemplateDO.setSettingList( BeanUtils.toBean(questionParamSettingMapper.selectList("template_id", questionTemplateDO.getId()), QuestionParamSettingRespVO.class)); }); } return questionTemplateDOS; } return null; } @Override public PageResult getQuestionTemplatePage(QuestionTemplatePageReqVO pageReqVO) { return questionTemplateMapper.selectPage(pageReqVO); } @Override public List getQuestionTemplateList(Long modelId) { List questionTemplateDOList = questionTemplateMapper.selectList("model_id",modelId); questionTemplateDOList.forEach(DO -> { DO.setSettingList(BeanUtils.toBean(questionParamSettingMapper.selectList("template_id",DO.getId()), QuestionParamSettingRespVO.class)); }); return questionTemplateDOList; } }