Pārlūkot izejas kodu

首帧图字段维护

lh 4 mēneši atpakaļ
vecāks
revīzija
972dbbea29

+ 0 - 1
app/Console/Test/TestCommand.php

@@ -50,7 +50,6 @@ class TestCommand extends Command
      */
     public function handle()
     {
-        handleEpisodeContent('');
         // dd(testStoryboardParsing(''));
         // dd(handleEpisodeContent(''));
         

+ 11 - 1
app/Services/AIGeneration/AIImageGenerationService.php

@@ -8,6 +8,7 @@ use GuzzleHttp\Client;
 use GuzzleHttp\Exception\GuzzleException;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Redis;
 
 class AIImageGenerationService
 {
@@ -86,6 +87,7 @@ class AIImageGenerationService
         // 创建排队状态的任务记录
         return MpGeneratePicTask::create([
             'task_id' => $taskId,
+            'alias_segment_id' => $params['alias_segment_id'] ?? 0,
             'prompt' => $params['prompt'] ?? '',
             'width' => $params['width'] ?? 2048,
             'height' => $params['height'] ?? 2048,
@@ -337,11 +339,19 @@ class AIImageGenerationService
                 ]);
 
                 // 同步调整分镜图片状态和结果
-                if (getProp($task, 'alias_segment_id')) {
+                $segment_id = getProp($task, 'alias_segment_id');
+                if ($segment_id) {
                     DB::table('mp_episode_segments')->where('segment_id', getProp($task, 'alias_segment_id'))->update([
                         'img_url'   => $statusInfo['result_url'][0],
                         'pic_task_status'   => '已完成',
                     ]);
+                    
+                    // 如果是首帧图ID则更新anime表
+                    if (Redis::sismember('anime_first_frame_urls', $segment_id)) {
+                        $anime_id = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->value('anime_id');
+                        DB::table('mp_animes')->where('id', $anime_id)->update(['first_frame_url'=>$statusInfo['result_url'][0], 'updated_at'=>date('Y-m-d H:i:s')]);
+                        Redis::srem('anime_first_frame_urls', $segment_id);
+                    }
                 }
             } elseif ($statusInfo['status'] === 'failed') {
                 $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [

+ 8 - 2
app/Services/Anime/AnimeService.php

@@ -532,8 +532,9 @@ class AnimeService
         $segments = DB::table('mp_episode_segments')
             ->where('anime_id', $anime_id)
             ->where('episode_id', $episode->episode_id)
+            ->where('pic_task_status', '')
             ->orderBy('segment_number')
-            ->select('segment_id', 'segment_number', 'segment_content', 'scene', 'characters')
+            ->select('episode_number', 'segment_id', 'segment_number', 'segment_content', 'scene', 'characters')
             ->limit(3)
             ->get()
             ->toArray();
@@ -623,13 +624,18 @@ class AnimeService
                         'pic_task_status' => '生成中',
                         'updated_at' => date('Y-m-d H:i:s')
                     ]);
+
+                // 如果是第一集的首帧图片,则存入待更新数组
+                if ((int)getProp($segment, 'episode_number') === 1 && (int)getProp($segment, 'segment_number') === 1) {
+                    Redis::sadd('anime_first_frame_urls', $segment_id);
+                }
                 
                 if ($update_result) {
                     $updated_segments[] = [
                         'segment_id' => $segment_id,
                         'task_id' => $task_id,
                         'status' => '生成中',
-                        'matched_scenes' => $scene,
+                        'matched_scenes' => $matched_scene,
                         'matched_roles' => $segment_characters,
                         'ref_urls_count' => count($ref_img_urls)
                     ];