|
|
@@ -1003,6 +1003,7 @@ class AnimeService
|
|
|
$anime_id = getProp($data, 'anime_id');
|
|
|
$episode_id = getProp($data, 'episode_id');
|
|
|
$target_roles = getProp($data, 'roles');
|
|
|
+ $is_deleted = getProp($data, 'is_deleted');
|
|
|
|
|
|
// 参数验证
|
|
|
if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
|
|
|
@@ -1019,51 +1020,74 @@ class AnimeService
|
|
|
$roles = json_decode(getProp($episode, 'roles'), true);
|
|
|
|
|
|
try {
|
|
|
- $role_found = false;
|
|
|
$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) {
|
|
|
dLog('anime')->error('更新剧集角色失败', [
|
|
|
'anime_id' => $anime_id,
|
|
|
@@ -1080,6 +1104,7 @@ class AnimeService
|
|
|
$anime_id = getProp($data, 'anime_id');
|
|
|
$episode_id = getProp($data, 'episode_id');
|
|
|
$target_scenes = getProp($data, 'scenes');
|
|
|
+ $is_deleted = getProp($data, 'is_deleted');
|
|
|
|
|
|
// 参数验证
|
|
|
if (!$anime_id) Utils::throwError('20003:请提供动漫ID');
|
|
|
@@ -1096,34 +1121,57 @@ class AnimeService
|
|
|
$scenes = json_decode(getProp($episode, 'scenes'), true);
|
|
|
|
|
|
try {
|
|
|
- $scene_found = false;
|
|
|
$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) {
|
|
|
dLog('anime')->error('更新剧集场景失败', [
|