|
|
@@ -442,14 +442,17 @@ class AnimeService
|
|
|
$episode = (array)$episode;
|
|
|
$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)->where('version_count', '>', 1)->count('id');
|
|
|
+ $count = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->count('id');
|
|
|
+ $sequence = $count + 1;
|
|
|
unset($episode['id']);
|
|
|
$now = date('Y-m-d H:i:s');
|
|
|
$episode['created_at'] = $now;
|
|
|
$episode['updated_at'] = $now;
|
|
|
$episode['is_default'] = 1;
|
|
|
- $episode['title'] = $count > 0 ? $episode['title']."(副本{$count})" : $episode['title']."(副本)";
|
|
|
- $episode['version_count'] = $count + 2;
|
|
|
+ // 获取版本中含有"(副本"字样的个数
|
|
|
+ $copy_count = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('title', 'like', '%(副本%')->count('id');
|
|
|
+ $episode['title'] = $copy_count > 0 ? $episode['title']."(副本{$copy_count})" : $episode['title']."(副本)"; // 生成带(副本)字样的标题
|
|
|
+ $episode['sequence'] = $sequence;
|
|
|
$episode['is_generated'] = 0;
|
|
|
|
|
|
try {
|
|
|
@@ -580,14 +583,91 @@ class AnimeService
|
|
|
Utils::throwError('1002:请选择剧集');
|
|
|
}
|
|
|
|
|
|
- $episodes = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('id', $episode_id)->select('anime_id', 'episode_number', 'sequence', 'title', 'intro', 'art_style', 'roles', 'scenes')->get()->map(function($value) {
|
|
|
+ $episode_number = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('id', $episode_id)->value('episode_number');
|
|
|
+
|
|
|
+ $episodes = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->select('id as episode_id', 'anime_id', 'episode_number', 'sequence', 'title', 'intro', 'art_style', 'roles', 'scenes', 'is_generated')->orderBy('sequence', 'desc')->get()->map(function($value) {
|
|
|
return (array)$value;
|
|
|
})->toArray();
|
|
|
if (!$episodes) Utils::throwError('20003:该剧集不存在!');
|
|
|
+
|
|
|
foreach($episodes as &$episode) {
|
|
|
- $episode['version'] = 'V'.$episode['version_count'];
|
|
|
+ $episode['version'] = 'V'.$episode['sequence'];
|
|
|
$episode['roles'] = json_decode($episode['roles'], true);
|
|
|
$episode['scenes'] = json_decode($episode['scenes'], true);
|
|
|
+
|
|
|
+ // 获取分镜信息
|
|
|
+ $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('segment_number')
|
|
|
+ ->select('*')->get()->map(function ($value) {
|
|
|
+ return (array)$value;
|
|
|
+ })->toArray();
|
|
|
+
|
|
|
+ $acts = [];
|
|
|
+ foreach($segments as $segment) {
|
|
|
+ if (isset($acts[getProp($segment, 'act_number')])) {
|
|
|
+ $acts[getProp($segment, 'act_number')]['segments'][] = [
|
|
|
+ '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'),
|
|
|
+ ];
|
|
|
+ }else {
|
|
|
+ $acts[getProp($segment, 'act_number')]= [
|
|
|
+ 'act_number' => getProp($segment, 'act_number'),
|
|
|
+ 'act_title' => getProp($segment, 'act_title'),
|
|
|
+ 'segments' => [
|
|
|
+ [
|
|
|
+ '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'),
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $episode['acts'] = array_values($acts);
|
|
|
}
|
|
|
|
|
|
return $episodes;
|