lh 1 miesiąc temu
rodzic
commit
97615c61b2
1 zmienionych plików z 58 dodań i 50 usunięć
  1. 58 50
      app/Services/Anime/AnimeService.php

+ 58 - 50
app/Services/Anime/AnimeService.php

@@ -1019,53 +1019,51 @@ class AnimeService
         $roles = json_decode(getProp($episode, 'roles'), true);
         $roles = json_decode(getProp($episode, 'roles'), true);
 
 
         try {
         try {
-            $role_updated = false;
+            $role_found = false;
             $target_role_name = getProp($target_roles, 'role');
             $target_role_name = getProp($target_roles, 'role');
             
             
+            // 查找并更新已存在的角色
             foreach($roles as &$role) {
             foreach($roles as &$role) {
                 if (getProp($role, 'role') === $target_role_name) {
                 if (getProp($role, 'role') === $target_role_name) {
                     $role = $target_roles;
                     $role = $target_roles;
-                    $role_updated = true;
-
-                    // 更新角色列表
-                    $result = DB::table('mp_anime_episodes')
-                        ->where('anime_id', $anime_id)
-                        ->where('id', $episode_id)
-                        ->update([
-                            'roles' => json_encode($roles, 256),
-                            'updated_at' => date('Y-m-d H:i:s')
-                        ]);
-
-                    if ($result === false) {
-                        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')
-                        ]);
+                    $role_found = true;
                     break;
                     break;
                 }
                 }
             }
             }
             
             
-            if (!$role_updated) {
-                dLog('anime')->warning('未找到匹配的角色', [
-                    'anime_id' => $anime_id,
-                    'episode_id' => $episode_id,
-                    'target_role' => $target_role_name
+            // 如果角色不存在,则新增
+            if (!$role_found) {
+                $roles[] = $target_roles;
+            }
+
+            // 更新角色列表
+            $result = DB::table('mp_anime_episodes')
+                ->where('anime_id', $anime_id)
+                ->where('id', $episode_id)
+                ->update([
+                    'roles' => json_encode($roles, 256),
+                    'updated_at' => date('Y-m-d H:i:s')
                 ]);
                 ]);
+
+            if ($result === false) {
+                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')
+                ]);
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             dLog('anime')->error('更新剧集角色失败', [
             dLog('anime')->error('更新剧集角色失败', [
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,
@@ -1098,25 +1096,35 @@ class AnimeService
         $scenes = json_decode(getProp($episode, 'scenes'), true);
         $scenes = json_decode(getProp($episode, 'scenes'), true);
 
 
         try {
         try {
+            $scene_found = false;
+            $target_scene_name = getProp($target_scenes, 'scene');
+            
+            // 查找并更新已存在的场景
             foreach($scenes as &$scene) {
             foreach($scenes as &$scene) {
-                if (getProp($scene, 'scene') === getProp($target_scenes, 'scene')) {
+                if (getProp($scene, 'scene') === $target_scene_name) {
                     $scene = $target_scenes;
                     $scene = $target_scenes;
-
-                    // 更新场景列表
-                    $result = DB::table('mp_anime_episodes')
-                        ->where('anime_id', $anime_id)
-                        ->where('id', $episode_id)
-                        ->update([
-                            'scenes' => json_encode($scenes, 256),
-                            'updated_at' => date('Y-m-d H:i:s')
-                        ]);
-
-                    if ($result === false) {
-                        Utils::throwError('20003:更新场景列表失败');
-                    }
+                    $scene_found = true;
                     break;
                     break;
                 }
                 }
             }
             }
+            
+            // 如果场景不存在,则新增
+            if (!$scene_found) {
+                $scenes[] = $target_scenes;
+            }
+
+            // 更新场景列表
+            $result = DB::table('mp_anime_episodes')
+                ->where('anime_id', $anime_id)
+                ->where('id', $episode_id)
+                ->update([
+                    'scenes' => json_encode($scenes, 256),
+                    'updated_at' => date('Y-m-d H:i:s')
+                ]);
+
+            if ($result === false) {
+                Utils::throwError('20003:更新场景列表失败');
+            }
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             dLog('anime')->error('更新剧集场景失败', [
             dLog('anime')->error('更新剧集场景失败', [
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,