lh 3 недель назад
Родитель
Сommit
fdc99485df
1 измененных файлов с 19 добавлено и 6 удалено
  1. 19 6
      app/Services/Anime/AnimeService.php

+ 19 - 6
app/Services/Anime/AnimeService.php

@@ -619,7 +619,7 @@ class AnimeService
         // }
         // }
         
         
         // 获取分镜信息
         // 获取分镜信息
-        $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('segment_number')
+        $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('act_number')
         ->select('*')->get()->map(function ($value) {
         ->select('*')->get()->map(function ($value) {
             return (array)$value;
             return (array)$value;
         })->toArray();
         })->toArray();
@@ -701,6 +701,9 @@ class AnimeService
         $episode['sequence'] = $sequence;
         $episode['sequence'] = $sequence;
         $episode['is_generated'] = 0;
         $episode['is_generated'] = 0;
 
 
+         // 获取ace_mode
+        $ace_mode = DB::table('mp_animes')->where('id', $anime_id)->value('ace_mode');
+
         try {
         try {
             DB::beginTransaction();
             DB::beginTransaction();
             DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->update(['is_default' => 0, 'updated_at'=>$now]);
             DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->update(['is_default' => 0, 'updated_at'=>$now]);
@@ -713,11 +716,11 @@ class AnimeService
 
 
             // 获取分镜数据并准备插入
             // 获取分镜数据并准备插入
             $segments_for_insert = DB::table('mp_episode_segments')
             $segments_for_insert = DB::table('mp_episode_segments')
-            ->select('anime_id', 'episode_number', 'act_number', 'act_title', 'act_duration', 'segment_number', 'segment_content', 'description', 'composition', 'camera_movement', 'voice_actor', 'dialogue', 'frame_type', 'scene', 'characters', 'tail_frame', 'voice_name', 'voice_type', 'voice_audio_url', 'emotion', 'emotion_type', 'gender', 'speed_ratio', 'loudness_ratio', 'emotion_scale', 'pitch')
-            ->where('episode_id', $episode_id)->orderBy('segment_number')->get()->map(function($item) use ($new_episode_id) {
+            ->select('anime_id', 'episode_number', 'act_number', 'act_title', 'act_duration', 'act_content', 'segment_number', 'segment_content', 'description', 'composition', 'camera_movement', 'voice_actor', 'dialogue', 'frame_type', 'scene', 'characters', 'tail_frame', 'voice_name', 'voice_type', 'voice_audio_url', 'emotion', 'emotion_type', 'gender', 'speed_ratio', 'loudness_ratio', 'emotion_scale', 'pitch')
+            ->where('episode_id', $episode_id)->orderBy('segment_number')->get()->map(function($item) use ($new_episode_id,$ace_mode) {
                 $item = (array)$item;
                 $item = (array)$item;
                 $item['episode_id'] = $new_episode_id;
                 $item['episode_id'] = $new_episode_id;
-                $item['segment_id'] = date('YmdHis').mt_rand(1000,9999).str_pad($item['segment_number'], 3, "0", STR_PAD_LEFT);
+                if ((int)$ace_mode !== 1) $item['segment_id'] = date('YmdHis').mt_rand(1000,9999).str_pad($item['segment_number'], 3, "0", STR_PAD_LEFT);
                 $item['created_at'] = $item['updated_at'] = date('Y-m-d H:i:s');
                 $item['created_at'] = $item['updated_at'] = date('Y-m-d H:i:s');
                 return $item;
                 return $item;
             })->toArray();
             })->toArray();
@@ -776,8 +779,18 @@ class AnimeService
             'is_generated' => (int)$episode['is_generated']
             'is_generated' => (int)$episode['is_generated']
         ];
         ];
 
 
-        // 复用已有的分镜数据,按 act 分组(避免重复查询数据库)
-        $segmentsStructure = $this->buildEpisodeSegmentsStructure($segments_for_insert);
+        if ((int)$ace_mode === 1) {
+            // 获取分镜信息
+            $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', $new_episode_id)->orderBy('act_number')
+            ->select('*')->get()->map(function ($value) {
+                return (array)$value;
+            })->toArray();
+
+            $segmentsStructure = $this->buildEpisodeActsStructureForAce($segments);
+        }else {
+            // 复用已有的分镜数据,按 act 分组(避免重复查询数据库)
+            $segmentsStructure = $this->buildEpisodeSegmentsStructure($segments_for_insert);
+        }
         $result['acts'] = $segmentsStructure['acts'];
         $result['acts'] = $segmentsStructure['acts'];
         $result['total_duration'] = $segmentsStructure['total_duration'];
         $result['total_duration'] = $segmentsStructure['total_duration'];