lh 1 mesiac pred
rodič
commit
5ee3d35d94
1 zmenil súbory, kde vykonal 110 pridanie a 62 odobranie
  1. 110 62
      app/Services/Anime/AnimeService.php

+ 110 - 62
app/Services/Anime/AnimeService.php

@@ -1003,6 +1003,7 @@ class AnimeService
         $anime_id = getProp($data, 'anime_id');
         $anime_id = getProp($data, 'anime_id');
         $episode_id = getProp($data, 'episode_id');
         $episode_id = getProp($data, 'episode_id');
         $target_roles = getProp($data, 'roles');
         $target_roles = getProp($data, 'roles');
+        $is_deleted = getProp($data, 'is_deleted');
 
 
         // 参数验证
         // 参数验证
         if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
         if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
@@ -1019,51 +1020,74 @@ class AnimeService
         $roles = json_decode(getProp($episode, 'roles'), true);
         $roles = json_decode(getProp($episode, 'roles'), true);
 
 
         try {
         try {
-            $role_found = false;
             $target_role_name = getProp($target_roles, 'role');
             $target_role_name = getProp($target_roles, 'role');
             
             
-            // 查找并更新已存在的角色
-            foreach($roles as &$role) {
-                if (getProp($role, 'role') === $target_role_name) {
-                    $role = $target_roles;
-                    $role_found = true;
-                    break;
+            // 如果是删除操作
+            if ($is_deleted == 1) {
+                // 从角色列表中移除该角色
+                $roles = array_values(array_filter($roles, function($role) use ($target_role_name) {
+                    return getProp($role, 'role') !== $target_role_name;
+                }));
+                
+                // 更新角色列表
+                $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:删除角色失败');
+                }
+            } else {
+                // 新增或更新操作
+                $role_found = false;
+                
+                // 查找并更新已存在的角色
+                foreach($roles as &$role) {
+                    if (getProp($role, 'role') === $target_role_name) {
+                        $role = $target_roles;
+                        $role_found = true;
+                        break;
+                    }
+                }
+                
+                // 如果角色不存在,则新增
+                if (!$role_found) {
+                    $roles[] = $target_roles;
                 }
                 }
-            }
-            
-            // 如果角色不存在,则新增
-            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')
-                ]);
+                // 更新角色列表
+                $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:更新角色列表失败');
+                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')
+                    ]);
             }
             }
-            
-            // 同步更新分镜表中对应主体的音色信息
-            $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,
@@ -1080,6 +1104,7 @@ class AnimeService
         $anime_id = getProp($data, 'anime_id');
         $anime_id = getProp($data, 'anime_id');
         $episode_id = getProp($data, 'episode_id');
         $episode_id = getProp($data, 'episode_id');
         $target_scenes = getProp($data, 'scenes');
         $target_scenes = getProp($data, 'scenes');
+        $is_deleted = getProp($data, 'is_deleted');
 
 
         // 参数验证
         // 参数验证
         if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
         if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
@@ -1096,34 +1121,57 @@ 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');
             $target_scene_name = getProp($target_scenes, 'scene');
             
             
-            // 查找并更新已存在的场景
-            foreach($scenes as &$scene) {
-                if (getProp($scene, 'scene') === $target_scene_name) {
-                    $scene = $target_scenes;
-                    $scene_found = true;
-                    break;
+            // 如果是删除操作
+            if ($is_deleted == 1) {
+                // 从场景列表中移除该场景
+                $scenes = array_values(array_filter($scenes, function($scene) use ($target_scene_name) {
+                    return getProp($scene, 'scene') !== $target_scene_name;
+                }));
+                
+                // 更新场景列表
+                $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:删除场景失败');
+                }
+            } else {
+                // 新增或更新操作
+                $scene_found = false;
+                
+                // 查找并更新已存在的场景
+                foreach($scenes as &$scene) {
+                    if (getProp($scene, 'scene') === $target_scene_name) {
+                        $scene = $target_scenes;
+                        $scene_found = true;
+                        break;
+                    }
+                }
+                
+                // 如果场景不存在,则新增
+                if (!$scene_found) {
+                    $scenes[] = $target_scenes;
                 }
                 }
-            }
-            
-            // 如果场景不存在,则新增
-            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')
-                ]);
+                // 更新场景列表
+                $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:更新场景列表失败');
+                if ($result === false) {
+                    Utils::throwError('20003:更新场景列表失败');
+                }
             }
             }
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             dLog('anime')->error('更新剧集场景失败', [
             dLog('anime')->error('更新剧集场景失败', [