|
|
@ -32,13 +32,10 @@ import com.youlai.boot.mini.model.form.MiniDeductPointForm; |
|
|
import com.youlai.boot.mini.model.vo.AiVideoCallbackVO; |
|
|
import com.youlai.boot.mini.model.vo.AiVideoCallbackVO; |
|
|
import com.youlai.boot.mini.model.form.AiCallbackImage; |
|
|
import com.youlai.boot.mini.model.form.AiCallbackImage; |
|
|
import com.youlai.boot.mini.model.form.AiFourPanelCallbackForm; |
|
|
import com.youlai.boot.mini.model.form.AiFourPanelCallbackForm; |
|
|
import com.youlai.boot.mini.model.vo.VideoCallbackData; |
|
|
|
|
|
import com.youlai.boot.common.exception.BusinessException; |
|
|
|
|
|
import com.youlai.boot.mini.service.AiGenerationService; |
|
|
import com.youlai.boot.mini.service.AiGenerationService; |
|
|
import com.youlai.boot.mini.service.MiniPointRecordService; |
|
|
import com.youlai.boot.mini.service.MiniPointRecordService; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.apache.commons.io.FilenameUtils; |
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
@ -49,9 +46,7 @@ import java.awt.image.BufferedImage; |
|
|
import java.io.File; |
|
|
import java.io.File; |
|
|
import java.io.InputStream; |
|
|
import java.io.InputStream; |
|
|
import java.net.URL; |
|
|
import java.net.URL; |
|
|
import java.time.LocalDateTime; |
|
|
|
|
|
import java.util.*; |
|
|
import java.util.*; |
|
|
import java.util.concurrent.CompletableFuture; |
|
|
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
@Slf4j |
|
|
@Service |
|
|
@Service |
|
|
@ -480,19 +475,7 @@ public class AiGenerationServiceImpl implements AiGenerationService { |
|
|
log.info("处理AI视频生成任务回调,请求参数:{}", JSONUtil.toJsonStr(vo)); |
|
|
log.info("处理AI视频生成任务回调,请求参数:{}", JSONUtil.toJsonStr(vo)); |
|
|
boolean success = false; |
|
|
boolean success = false; |
|
|
try { |
|
|
try { |
|
|
// 校验回调响应是否成功
|
|
|
String videoTaskUuid = vo.getId(); |
|
|
if (!Integer.valueOf(0).equals(vo.getCode())) { |
|
|
|
|
|
log.error("视频生成任务回调失败,错误信息:{}", vo.getMsg()); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
VideoCallbackData data = vo.getData(); |
|
|
|
|
|
if (data == null) { |
|
|
|
|
|
log.error("视频回调数据为空"); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String videoTaskUuid = data.getId(); |
|
|
|
|
|
// 根据第三方返回的视频任务uuid查询对应的任务
|
|
|
// 根据第三方返回的视频任务uuid查询对应的任务
|
|
|
MiniAiGenerationTask task = aiGenerationTaskMapper.selectOne(new LambdaQueryWrapper<MiniAiGenerationTask>() |
|
|
MiniAiGenerationTask task = aiGenerationTaskMapper.selectOne(new LambdaQueryWrapper<MiniAiGenerationTask>() |
|
|
.eq(MiniAiGenerationTask::getVideoTaskUuid, videoTaskUuid) |
|
|
.eq(MiniAiGenerationTask::getVideoTaskUuid, videoTaskUuid) |
|
|
@ -504,13 +487,14 @@ public class AiGenerationServiceImpl implements AiGenerationService { |
|
|
|
|
|
|
|
|
// 转换任务状态
|
|
|
// 转换任务状态
|
|
|
Integer status; |
|
|
Integer status; |
|
|
if ("succeeded".equals(data.getStatus())) { |
|
|
if ("succeeded".equals(vo.getStatus())) { |
|
|
status = 1; // 成功
|
|
|
status = 1; // 成功
|
|
|
} else if ("failed".equals(data.getStatus())) { |
|
|
} else if ("failed".equals(vo.getStatus())) { |
|
|
status = 2; // 失败
|
|
|
status = 2; // 失败
|
|
|
} else { |
|
|
} else { |
|
|
log.info("视频任务{}处于中间状态:{},不处理", task.getUuid(), data.getStatus()); |
|
|
// queued/running中间状态直接返回成功,不更新任务
|
|
|
return true; // 中间状态直接返回成功,不更新任务
|
|
|
log.info("视频任务{}处于中间状态:{},不处理", task.getUuid(), vo.getStatus()); |
|
|
|
|
|
return true; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 更新任务状态
|
|
|
// 更新任务状态
|
|
|
@ -520,9 +504,9 @@ public class AiGenerationServiceImpl implements AiGenerationService { |
|
|
aiGenerationTaskMapper.updateById(task); |
|
|
aiGenerationTaskMapper.updateById(task); |
|
|
|
|
|
|
|
|
// 如果生成成功,下载外部视频到OSS
|
|
|
// 如果生成成功,下载外部视频到OSS
|
|
|
if (status == 1 && data.getContent() != null && data.getContent().getVideoUrl() != null) { |
|
|
if (status == 1 && vo.getContent() != null && vo.getContent().getVideoUrl() != null) { |
|
|
String externalVideoUrl = data.getContent().getVideoUrl(); |
|
|
String externalVideoUrl = vo.getContent().getVideoUrl(); |
|
|
// 调用下载方法,和图片下载逻辑一致,存储到视频目录
|
|
|
// 调用下载方法,存储到视频目录
|
|
|
String ossUrl = downloadExternalUrlToOss(externalVideoUrl, OSS_VIDEO_DIR); |
|
|
String ossUrl = downloadExternalUrlToOss(externalVideoUrl, OSS_VIDEO_DIR); |
|
|
task.setResultResourceUrl(ossUrl); |
|
|
task.setResultResourceUrl(ossUrl); |
|
|
aiGenerationTaskMapper.updateById(task); |
|
|
aiGenerationTaskMapper.updateById(task); |
|
|
@ -536,11 +520,23 @@ public class AiGenerationServiceImpl implements AiGenerationService { |
|
|
.setFileSource("ai_generate") |
|
|
.setFileSource("ai_generate") |
|
|
.setMediaType("video") |
|
|
.setMediaType("video") |
|
|
.setSourceUrl(ossUrl) |
|
|
.setSourceUrl(ossUrl) |
|
|
.setDuration(data.getDuration()) |
|
|
.setDuration(vo.getDuration()) |
|
|
.setCreateBy(task.getCreateBy()) |
|
|
.setCreateBy(task.getCreateBy()) |
|
|
.setCreateTimestamp(System.currentTimeMillis()) |
|
|
.setCreateTimestamp(System.currentTimeMillis()) |
|
|
.setCreateTime(new Date()); |
|
|
.setCreateTime(new Date()); |
|
|
aiTaskMediaMapper.insert(media); |
|
|
aiTaskMediaMapper.insert(media); |
|
|
|
|
|
|
|
|
|
|
|
// 更新用户上传的参考文件:关联当前任务ID并软删除
|
|
|
|
|
|
LambdaUpdateWrapper<MiniAiTaskMedia> updateMediaWrapper = new LambdaUpdateWrapper<>(); |
|
|
|
|
|
updateMediaWrapper.eq(MiniAiTaskMedia::getMiniUserId, task.getMiniUserId()) |
|
|
|
|
|
.isNull(MiniAiTaskMedia::getTaskId) |
|
|
|
|
|
.eq(MiniAiTaskMedia::getFileSource, "user_upload") |
|
|
|
|
|
.eq(MiniAiTaskMedia::getDeleted, false) |
|
|
|
|
|
.set(MiniAiTaskMedia::getTaskId, task.getId()) |
|
|
|
|
|
.set(MiniAiTaskMedia::getDeleted, true) |
|
|
|
|
|
.set(MiniAiTaskMedia::getUpdateTime, new Date()) |
|
|
|
|
|
.set(MiniAiTaskMedia::getUpdateTimestamp, System.currentTimeMillis()); |
|
|
|
|
|
aiTaskMediaMapper.update(null, updateMediaWrapper); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
success = true; |
|
|
success = true; |
|
|
|