lh 2 місяців тому
батько
коміт
6fd87c468b

+ 70 - 0
app/Console/Commands/CheckVideoGenerationTasksCommand.php

@@ -149,6 +149,9 @@ class CheckVideoGenerationTasksCommand extends Command
                     
                     $successCount++;
                     
+                    // 更新分镜视频成功后新增对话记录
+                    $this->addVideoGenerationRecords($segmentId, $videoTask->result_url);
+                    
                     dLog('command')->info('分镜视频生成成功', [
                         'segment_id' => $segmentId,
                         'video_task_id' => $videoTaskId,
@@ -199,4 +202,71 @@ class CheckVideoGenerationTasksCommand extends Command
             ]);
         }
     }
+
+    /**
+     * 添加视频生成对话记录
+     * 
+     * @param int $segmentId 分镜ID
+     * @param string $videoUrl 视频URL
+     * @return void
+     */
+    private function addVideoGenerationRecords($segmentId, $videoUrl)
+    {
+        try {
+            // 获取分镜信息
+            $segment = DB::table('mp_episode_segments')
+                ->where('segment_id', $segmentId)
+                ->select('uid', 'anime_id', 'episode_number', 'tail_frame')
+                ->first();
+
+            if (!$segment) {
+                dLog('command')->warning('分镜信息不存在,无法添加对话记录', ['segment_id' => $segmentId]);
+                return;
+            }
+
+            $now = date('Y-m-d H:i:s');
+            
+            // 保存对话记录
+            $records = [
+                [
+                    'uid'           => $segment->uid,
+                    'anime_id'      => $segment->anime_id,
+                    'sequence'      => $segment->episode_number,
+                    'role'          => 'user',
+                    'content'       => '图片转视频',
+                    'segment_id'    => $segmentId,
+                    'video_url'     => '',
+                    'created_at'    => $now,
+                    'updated_at'    => $now
+                ],
+                [
+                    'uid'           => $segment->uid,
+                    'anime_id'      => $segment->anime_id,
+                    'sequence'      => $segment->episode_number,
+                    'role'          => 'assistant',
+                    'content'       => $segment->tail_frame ?: '',
+                    'segment_id'    => $segmentId,
+                    'video_url'     => $videoUrl,
+                    'created_at'    => $now,
+                    'updated_at'    => $now
+                ]
+            ];
+
+            DB::table('mp_anime_records')->insert($records);
+            
+            dLog('command')->info('视频生成对话记录添加成功', [
+                'segment_id' => $segmentId,
+                'video_url' => $videoUrl,
+                'uid' => $segment->uid,
+                'anime_id' => $segment->anime_id
+            ]);
+
+        } catch (\Exception $e) {
+            dLog('command')->error('添加视频生成对话记录失败: ' . $e->getMessage(), [
+                'segment_id' => $segmentId,
+                'video_url' => $videoUrl,
+                'error' => $e->getMessage()
+            ]);
+        }
+    }
 }

+ 76 - 0
app/Services/AIGeneration/AIVideoGenerationService.php

@@ -347,6 +347,9 @@ class AIVideoGenerationService
                     // 更新分镜表
                     DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
                     
+                    // 添加视频生成对话记录
+                    $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
+                    
                     DB::commit();
                     
                 } catch (\Exception $e) {
@@ -604,6 +607,9 @@ class AIVideoGenerationService
                     // 更新分镜表
                     DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
                     
+                    // 添加视频生成对话记录
+                    $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
+                    
                     DB::commit();
                     
                 } catch (\Exception $e) {
@@ -1377,6 +1383,9 @@ class AIVideoGenerationService
                     // 更新分镜表
                     DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
                     
+                    // 添加视频生成对话记录
+                    $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
+                    
                     DB::commit();
                     
                 } catch (\Exception $e) {
@@ -1894,5 +1903,72 @@ class AIVideoGenerationService
         return $query->orderBy('created_at', 'desc')
                     ->paginate($filters['page_size'] ?? 20);
     }
+
+    /**
+     * 添加视频生成对话记录
+     * 
+     * @param int $segmentId 分镜ID
+     * @param string $videoUrl 视频URL
+     * @return void
+     */
+    private function addVideoGenerationRecords($segmentId, $videoUrl)
+    {
+        try {
+            // 获取分镜信息
+            $segment = DB::table('mp_episode_segments')
+                ->where('segment_id', $segmentId)
+                ->select('uid', 'anime_id', 'episode_number', 'tail_frame')
+                ->first();
+
+            if (!$segment) {
+                dLog('generate')->warning('分镜信息不存在,无法添加对话记录', ['segment_id' => $segmentId]);
+                return;
+            }
+
+            $now = date('Y-m-d H:i:s');
+            
+            // 保存对话记录
+            $records = [
+                [
+                    'uid'           => $segment->uid,
+                    'anime_id'      => $segment->anime_id,
+                    'sequence'      => $segment->episode_number,
+                    'role'          => 'user',
+                    'content'       => '图片转视频',
+                    'segment_id'    => $segmentId,
+                    'video_url'     => '',
+                    'created_at'    => $now,
+                    'updated_at'    => $now
+                ],
+                [
+                    'uid'           => $segment->uid,
+                    'anime_id'      => $segment->anime_id,
+                    'sequence'      => $segment->episode_number,
+                    'role'          => 'assistant',
+                    'content'       => $segment->tail_frame ?: '',
+                    'segment_id'    => $segmentId,
+                    'video_url'     => $videoUrl,
+                    'created_at'    => $now,
+                    'updated_at'    => $now
+                ]
+            ];
+
+            DB::table('mp_anime_records')->insert($records);
+            
+            dLog('generate')->info('视频生成对话记录添加成功', [
+                'segment_id' => $segmentId,
+                'video_url' => $videoUrl,
+                'uid' => $segment->uid,
+                'anime_id' => $segment->anime_id
+            ]);
+
+        } catch (\Exception $e) {
+            dLog('generate')->error('添加视频生成对话记录失败: ' . $e->getMessage(), [
+                'segment_id' => $segmentId,
+                'video_url' => $videoUrl,
+                'error' => $e->getMessage()
+            ]);
+        }
+    }
 }