package com.vincent.rsf.server.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.vincent.rsf.server.system.entity.AiPromptTemplate;
|
import com.vincent.rsf.server.system.mapper.AiPromptTemplateMapper;
|
import com.vincent.rsf.server.system.service.AiPromptPublishLogService;
|
import com.vincent.rsf.server.system.service.AiPromptTemplateService;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service("aiPromptTemplateService")
|
public class AiPromptTemplateServiceImpl extends ServiceImpl<AiPromptTemplateMapper, AiPromptTemplate> implements AiPromptTemplateService {
|
|
@Resource
|
private AiPromptPublishLogService aiPromptPublishLogService;
|
|
@Override
|
public AiPromptTemplate getTenantTemplate(Long tenantId, Long id) {
|
if (tenantId == null || id == null) {
|
return null;
|
}
|
return this.getOne(new LambdaQueryWrapper<AiPromptTemplate>()
|
.eq(AiPromptTemplate::getTenantId, tenantId)
|
.eq(AiPromptTemplate::getId, id)
|
.last("limit 1"));
|
}
|
|
@Override
|
public AiPromptTemplate getPublishedTemplate(Long tenantId, String sceneCode) {
|
return this.getOne(new LambdaQueryWrapper<AiPromptTemplate>()
|
.eq(AiPromptTemplate::getTenantId, tenantId)
|
.eq(AiPromptTemplate::getSceneCode, sceneCode)
|
.eq(AiPromptTemplate::getPublishedFlag, 1)
|
.eq(AiPromptTemplate::getStatus, 1)
|
.orderByDesc(AiPromptTemplate::getVersionNo, AiPromptTemplate::getId)
|
.last("limit 1"));
|
}
|
|
@Override
|
public List<AiPromptTemplate> listVersions(Long tenantId, String sceneCode) {
|
return this.list(new LambdaQueryWrapper<AiPromptTemplate>()
|
.eq(AiPromptTemplate::getTenantId, tenantId)
|
.eq(AiPromptTemplate::getSceneCode, sceneCode)
|
.orderByDesc(AiPromptTemplate::getVersionNo, AiPromptTemplate::getId));
|
}
|
|
@Override
|
public boolean publishTemplate(Long tenantId, Long id, Long userId) {
|
AiPromptTemplate target = getTenantTemplate(tenantId, id);
|
if (target == null) {
|
return false;
|
}
|
boolean updated = switchPublishedTemplate(tenantId, userId, target);
|
if (updated) {
|
aiPromptPublishLogService.saveLog(tenantId, userId, target, "publish", "发布 Prompt 版本");
|
}
|
return updated;
|
}
|
|
@Override
|
public boolean rollbackTemplate(Long tenantId, Long id, Long userId) {
|
AiPromptTemplate target = getTenantTemplate(tenantId, id);
|
if (target == null) {
|
return false;
|
}
|
boolean updated = switchPublishedTemplate(tenantId, userId, target);
|
if (updated) {
|
aiPromptPublishLogService.saveLog(tenantId, userId, target, "rollback", "回滚到指定 Prompt 版本");
|
}
|
return updated;
|
}
|
|
private boolean switchPublishedTemplate(Long tenantId, Long userId, AiPromptTemplate target) {
|
this.update(new LambdaUpdateWrapper<AiPromptTemplate>()
|
.set(AiPromptTemplate::getPublishedFlag, 0)
|
.eq(AiPromptTemplate::getTenantId, tenantId)
|
.eq(AiPromptTemplate::getSceneCode, target.getSceneCode())
|
.eq(AiPromptTemplate::getPublishedFlag, 1));
|
target.setPublishedFlag(1);
|
target.setUpdateBy(userId);
|
target.setUpdateTime(new Date());
|
return this.updateById(target);
|
}
|
|
@Override
|
public int nextVersionNo(Long tenantId, String sceneCode) {
|
AiPromptTemplate latest = this.getOne(new LambdaQueryWrapper<AiPromptTemplate>()
|
.eq(AiPromptTemplate::getTenantId, tenantId)
|
.eq(AiPromptTemplate::getSceneCode, sceneCode)
|
.orderByDesc(AiPromptTemplate::getVersionNo, AiPromptTemplate::getId)
|
.last("limit 1"));
|
return latest == null || latest.getVersionNo() == null ? 1 : latest.getVersionNo() + 1;
|
}
|
|
@Override
|
public AiPromptTemplate copyTemplate(Long tenantId, Long id, Long userId) {
|
AiPromptTemplate source = getTenantTemplate(tenantId, id);
|
if (source == null) {
|
return null;
|
}
|
Date now = new Date();
|
AiPromptTemplate copied = new AiPromptTemplate()
|
.setUuid(String.valueOf(System.currentTimeMillis()))
|
.setSceneCode(source.getSceneCode())
|
.setTemplateName((source.getTemplateName() == null ? source.getSceneCode() : source.getTemplateName()) + "-副本")
|
.setBasePrompt(source.getBasePrompt())
|
.setToolPrompt(source.getToolPrompt())
|
.setOutputPrompt(source.getOutputPrompt())
|
.setVersionNo(nextVersionNo(tenantId, source.getSceneCode()))
|
.setPublishedFlag(0)
|
.setStatus(source.getStatus())
|
.setDeleted(0)
|
.setTenantId(tenantId)
|
.setCreateBy(userId)
|
.setCreateTime(now)
|
.setUpdateBy(userId)
|
.setUpdateTime(now)
|
.setMemo(source.getMemo());
|
if (!this.save(copied)) {
|
return null;
|
}
|
aiPromptPublishLogService.saveLog(tenantId, userId, copied, "copy", "复制 Prompt 版本为新草稿");
|
return copied;
|
}
|
}
|