Przeglądaj źródła

完成分集和分镜剧本中的音色继承相关逻辑

lh 3 miesięcy temu
rodzic
commit
b243dbcbad

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

@@ -910,9 +910,13 @@ class AnimeService
         $roles = json_decode(getProp($episode, 'roles'), true);
         $roles = json_decode(getProp($episode, 'roles'), true);
 
 
         try {
         try {
+            $role_updated = false;
+            $target_role_name = getProp($target_roles, 'role');
+            
             foreach($roles as &$role) {
             foreach($roles as &$role) {
-                if (getProp($role, 'role') === getProp($target_roles, 'role')) {
+                if (getProp($role, 'role') === $target_role_name) {
                     $role = $target_roles;
                     $role = $target_roles;
+                    $role_updated = true;
 
 
                     // 更新角色列表
                     // 更新角色列表
                     $result = DB::table('mp_anime_episodes')
                     $result = DB::table('mp_anime_episodes')
@@ -926,9 +930,33 @@ class AnimeService
                     if ($result === false) {
                     if ($result === false) {
                         Utils::throwError('20003:更新角色列表失败');
                         Utils::throwError('20003:更新角色列表失败');
                     }
                     }
+                    
+                    // 同步更新分镜表中对应主体的音色信息
+                    $voice_name = getProp($target_roles, 'voice_name');
+                    $voice_type = getProp($target_roles, 'voice_type');
+                    $voice_audio_url = getProp($target_roles, 'voice_audio_url');
+                    
+                    DB::table('mp_episode_segments')
+                        ->where('anime_id', $anime_id)
+                        ->where('episode_id', $episode_id)
+                        ->where('voice_actor', $target_role_name)
+                        ->update([
+                            'voice_name' => $voice_name,
+                            'voice_type' => $voice_type,
+                            'voice_audio_url' => $voice_audio_url,
+                            'updated_at' => date('Y-m-d H:i:s')
+                        ]);
                     break;
                     break;
                 }
                 }
             }
             }
+            
+            if (!$role_updated) {
+                dLog('anime')->warning('未找到匹配的角色', [
+                    'anime_id' => $anime_id,
+                    'episode_id' => $episode_id,
+                    'target_role' => $target_role_name
+                ]);
+            }
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             dLog('anime')->error('更新剧集角色失败', [
             dLog('anime')->error('更新剧集角色失败', [
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,
@@ -2375,7 +2403,8 @@ class AnimeService
                     $roles_updated = false;
                     $roles_updated = false;
 
 
                     foreach ($episode_roles as &$role) {
                     foreach ($episode_roles as &$role) {
-                        if (trim((string)getProp($role, 'voice_name')) !== $target_voice_actor) {
+                        // 通过 role 字段匹配角色名,而不是 voice_name
+                        if (trim((string)getProp($role, 'role')) !== $target_voice_actor) {
                             continue;
                             continue;
                         }
                         }
 
 

Plik diff jest za duży
+ 121 - 22
app/Services/DeepSeek/DeepSeekService.php