|
|
@@ -31,6 +31,7 @@ class CheckVideoGenerationTasksCommand extends Command
|
|
|
public function handle(AIVideoGenerationService $videoGenerationService)
|
|
|
{
|
|
|
dLog('generate')->info('开始检查视频生成任务状态...');
|
|
|
+ logDB('generate', 'info', '定时任务:开始检查视频生成任务状态', []);
|
|
|
|
|
|
// 执行50s
|
|
|
$time_start = time();
|
|
|
@@ -43,12 +44,137 @@ class CheckVideoGenerationTasksCommand extends Command
|
|
|
$videoGenerationService->updatePendingTasks();
|
|
|
$count = DB::table('mp_generate_video_tasks')->where('status', 'processing')->count('id');
|
|
|
}
|
|
|
+
|
|
|
+ // 更新分镜表中的视频任务状态
|
|
|
+ $this->updateSegmentVideoStatus();
|
|
|
+
|
|
|
dLog('generate')->info('视频任务状态检查完成');
|
|
|
+ logDB('generate', 'info', '定时任务:视频生成任务状态检查完成', []);
|
|
|
} catch (\Exception $e) {
|
|
|
dLog('generate')->error('视频任务状态检查失败: ' . $e->getMessage());
|
|
|
+ logDB('generate', 'error', '定时任务:视频生成任务状态检查失败', ['error' => $e->getMessage()]);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新分镜表中的视频任务状态
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ private function updateSegmentVideoStatus()
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ // 获取所有状态为"生成中"的分镜
|
|
|
+ $segments = DB::table('mp_episode_segments')
|
|
|
+ ->where('video_task_status', '生成中')
|
|
|
+ ->whereNotNull('video_task_id')
|
|
|
+ ->where('video_task_id', '<>', '')
|
|
|
+ ->select('segment_id', 'video_task_id')
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ if ($segments->isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ dLog('generate')->info('开始更新分镜视频任务状态', ['count' => $segments->count()]);
|
|
|
+ logDB('generate', 'info', '开始更新分镜视频任务状态', ['count' => $segments->count()]);
|
|
|
+
|
|
|
+ $successCount = 0;
|
|
|
+ $failedCount = 0;
|
|
|
+ $processingCount = 0;
|
|
|
+
|
|
|
+ foreach ($segments as $segment) {
|
|
|
+ $videoTaskId = $segment->video_task_id;
|
|
|
+ $segmentId = $segment->segment_id;
|
|
|
+
|
|
|
+ // 查询视频生成任务状态
|
|
|
+ $videoTask = DB::table('mp_generate_video_tasks')
|
|
|
+ ->where('id', $videoTaskId)
|
|
|
+ ->select('id', 'status', 'result_url', 'last_frame_url', 'error_message')
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ if (!$videoTask) {
|
|
|
+ dLog('generate')->warning('分镜关联的视频任务不存在', [
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
+ 'video_task_id' => $videoTaskId
|
|
|
+ ]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $updateData = ['updated_at' => date('Y-m-d H:i:s')];
|
|
|
+
|
|
|
+ // 根据任务状态更新分镜表
|
|
|
+ if ($videoTask->status === 'success') {
|
|
|
+ $updateData['video_task_status'] = '已完成';
|
|
|
+ $updateData['video_url'] = $videoTask->result_url;
|
|
|
+
|
|
|
+ // 如果有尾帧图片,也更新
|
|
|
+ if (!empty($videoTask->last_frame_url)) {
|
|
|
+ $updateData['last_frame_url'] = $videoTask->last_frame_url;
|
|
|
+ }
|
|
|
+
|
|
|
+ $successCount++;
|
|
|
+
|
|
|
+ dLog('generate')->info('分镜视频生成成功', [
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
+ 'video_task_id' => $videoTaskId,
|
|
|
+ 'video_url' => $videoTask->result_url
|
|
|
+ ]);
|
|
|
+ logDB('generate', 'info', '分镜视频生成成功', [
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
+ 'video_task_id' => $videoTaskId
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } elseif ($videoTask->status === 'failed') {
|
|
|
+ $updateData['video_task_status'] = '失败';
|
|
|
+
|
|
|
+ $failedCount++;
|
|
|
+
|
|
|
+ dLog('generate')->error('分镜视频生成失败', [
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
+ 'video_task_id' => $videoTaskId,
|
|
|
+ 'error' => $videoTask->error_message
|
|
|
+ ]);
|
|
|
+ logDB('generate', 'error', '分镜视频生成失败', [
|
|
|
+ 'segment_id' => $segmentId,
|
|
|
+ 'video_task_id' => $videoTaskId,
|
|
|
+ 'error' => $videoTask->error_message
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 仍在处理中,不更新
|
|
|
+ $processingCount++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新分镜表
|
|
|
+ DB::table('mp_episode_segments')
|
|
|
+ ->where('segment_id', $segmentId)
|
|
|
+ ->update($updateData);
|
|
|
+ }
|
|
|
+
|
|
|
+ dLog('generate')->info('分镜视频任务状态更新完成', [
|
|
|
+ 'total' => $segments->count(),
|
|
|
+ 'success' => $successCount,
|
|
|
+ 'failed' => $failedCount,
|
|
|
+ 'processing' => $processingCount
|
|
|
+ ]);
|
|
|
+ logDB('generate', 'info', '分镜视频任务状态更新完成', [
|
|
|
+ 'total' => $segments->count(),
|
|
|
+ 'success' => $successCount,
|
|
|
+ 'failed' => $failedCount,
|
|
|
+ 'processing' => $processingCount
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('generate')->error('更新分镜视频任务状态异常: ' . $e->getMessage());
|
|
|
+ logDB('generate', 'error', '更新分镜视频任务状态异常', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|