|
|
@@ -910,9 +910,13 @@ class AnimeService
|
|
|
$roles = json_decode(getProp($episode, 'roles'), true);
|
|
|
|
|
|
try {
|
|
|
+ $role_updated = false;
|
|
|
+ $target_role_name = getProp($target_roles, 'role');
|
|
|
+
|
|
|
foreach($roles as &$role) {
|
|
|
- if (getProp($role, 'role') === getProp($target_roles, 'role')) {
|
|
|
+ if (getProp($role, 'role') === $target_role_name) {
|
|
|
$role = $target_roles;
|
|
|
+ $role_updated = true;
|
|
|
|
|
|
// 更新角色列表
|
|
|
$result = DB::table('mp_anime_episodes')
|
|
|
@@ -926,9 +930,33 @@ class AnimeService
|
|
|
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')
|
|
|
+ ]);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (!$role_updated) {
|
|
|
+ dLog('anime')->warning('未找到匹配的角色', [
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
+ 'target_role' => $target_role_name
|
|
|
+ ]);
|
|
|
+ }
|
|
|
} catch (\Exception $e) {
|
|
|
dLog('anime')->error('更新剧集角色失败', [
|
|
|
'anime_id' => $anime_id,
|
|
|
@@ -2375,7 +2403,8 @@ class AnimeService
|
|
|
$roles_updated = false;
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
|