|
|
@@ -436,7 +436,9 @@ class AnimeService
|
|
|
if (!$episode) Utils::throwError('20003:该剧集不存在');
|
|
|
|
|
|
$episode = (array)$episode;
|
|
|
- $count = DB::table('mp_anime_episodes')->where('anime_id', $episode['anime_id'])->where('episode_number', $episode['episode_number'])->count('id');
|
|
|
+ $anime_id = $episode['anime_id'];
|
|
|
+ $episode_number = $episode['episode_number'];
|
|
|
+ $count = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->count('id');
|
|
|
$sequence = $count + 1;
|
|
|
unset($episode['id']);
|
|
|
$episode['sequence'] = $sequence;
|
|
|
@@ -447,7 +449,7 @@ class AnimeService
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
// 移除is_default标志
|
|
|
- $boolen = DB::table('mp_anime_episodes')->where('anime_id', $episode['anime_id'])->where('episode_number', $episode['episode_number'])->update(['is_default' => 0, 'updated_at'=>date('Y-m-d H:i:s')]);
|
|
|
+ $boolen = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->update(['is_default' => 0, 'updated_at'=>date('Y-m-d H:i:s')]);
|
|
|
if (!$boolen) {
|
|
|
Utils::throwError('20003:更新失败!');
|
|
|
}
|
|
|
@@ -457,10 +459,9 @@ class AnimeService
|
|
|
if (!$new_episode_id) {
|
|
|
Utils::throwError('20003:创建副本失败!');
|
|
|
}
|
|
|
- $episode['episode_id'] = $new_episode_id;
|
|
|
|
|
|
- // 获取分镜数据
|
|
|
- $segments = DB::table('mp_episode_segments')->where('episode_id', $episode_id)->get()->map(function($item) use ($new_episode_id) {
|
|
|
+ // 获取分镜数据并准备插入
|
|
|
+ $segments_for_insert = DB::table('mp_episode_segments')->where('episode_id', $episode_id)->orderBy('segment_number')->get()->map(function($item) use ($new_episode_id) {
|
|
|
$item = (array)$item;
|
|
|
unset($item['id']);
|
|
|
$item['episode_id'] = $new_episode_id;
|
|
|
@@ -470,7 +471,7 @@ class AnimeService
|
|
|
})->toArray();
|
|
|
|
|
|
// 写入分镜数据
|
|
|
- $boolen2 = DB::table('mp_episode_segments')->insert($segments);
|
|
|
+ $boolen2 = DB::table('mp_episode_segments')->insert($segments_for_insert);
|
|
|
if (!$boolen2) {
|
|
|
Utils::throwError('20003:写入分镜数据失败!');
|
|
|
}
|
|
|
@@ -481,7 +482,63 @@ class AnimeService
|
|
|
|
|
|
DB::commit();
|
|
|
|
|
|
- return $episode;
|
|
|
+ // 构建与 episodeInfo 方法一致的返回数据结构
|
|
|
+ $result = [
|
|
|
+ 'episode_id' => $new_episode_id,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'episode_number' => $episode_number,
|
|
|
+ 'title' => $episode['title'],
|
|
|
+ 'intro' => $episode['intro'],
|
|
|
+ 'art_style' => $episode['art_style'],
|
|
|
+ 'roles' => json_decode($episode['roles'], true),
|
|
|
+ 'scenes' => json_decode($episode['scenes'], true),
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 复用已有的分镜数据,按 act 分组(避免重复查询数据库)
|
|
|
+ $acts = [];
|
|
|
+ foreach($segments_for_insert as $segment) {
|
|
|
+ $act_number = getProp($segment, 'act_number');
|
|
|
+ $segment_info = [
|
|
|
+ 'segment_id' => getProp($segment, 'segment_id'),
|
|
|
+ 'segment_number' => getProp($segment, 'segment_number'),
|
|
|
+ 'segment_content' => getProp($segment, 'segment_content'),
|
|
|
+ 'description' => getProp($segment, 'description'),
|
|
|
+ 'composition' => getProp($segment, 'composition'),
|
|
|
+ 'camera_movement' => getProp($segment, 'camera_movement'),
|
|
|
+ 'voice_actor' => getProp($segment, 'voice_actor'),
|
|
|
+ 'dialogue' => getProp($segment, 'dialogue'),
|
|
|
+ 'frame_type' => getProp($segment, 'frame_type'),
|
|
|
+ 'scene' => getProp($segment, 'scene'),
|
|
|
+ 'characters' => getProp($segment, 'characters'),
|
|
|
+ 'tail_frame' => getProp($segment, 'tail_frame'),
|
|
|
+ 'emotion' => getProp($segment, 'emotion'),
|
|
|
+ 'emotion_type' => getProp($segment, 'emotion_type'),
|
|
|
+ 'gender' => getProp($segment, 'gender'),
|
|
|
+ 'speed_ratio' => getProp($segment, 'speed_ratio'),
|
|
|
+ 'loudness_ratio' => getProp($segment, 'loudness_ratio'),
|
|
|
+ 'emotion_scale' => getProp($segment, 'emotion_scale'),
|
|
|
+ 'pitch' => getProp($segment, 'pitch'),
|
|
|
+ 'voice_name' => getProp($segment, 'voice_name'),
|
|
|
+ 'voice_type' => getProp($segment, 'voice_type'),
|
|
|
+ 'voice_audio_url' => getProp($segment, 'voice_audio_url'),
|
|
|
+ 'img_url' => getProp($segment, 'img_url'),
|
|
|
+ 'video_url' => getProp($segment, 'video_url'),
|
|
|
+ 'last_frame_url' => getProp($segment, 'last_frame_url'),
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (isset($acts[$act_number])) {
|
|
|
+ $acts[$act_number]['segments'][] = $segment_info;
|
|
|
+ } else {
|
|
|
+ $acts[$act_number] = [
|
|
|
+ 'act_number' => $act_number,
|
|
|
+ 'act_title' => getProp($segment, 'act_title'),
|
|
|
+ 'segments' => [$segment_info]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $result['acts'] = array_values($acts);
|
|
|
+
|
|
|
+ return $result;
|
|
|
}
|
|
|
|
|
|
public function episodeVersions($data) {
|