|
|
@@ -115,4 +115,124 @@ class AnimeService
|
|
|
|
|
|
return $boolen;
|
|
|
}
|
|
|
+
|
|
|
+ public function editAnime($data) {
|
|
|
+ $script_arr =getProp($data, 'script', []);
|
|
|
+ if (!$script_arr) Utils::throwError('20003:剧本内容不能为空');
|
|
|
+ $start_episode_sequence = getProp($data, 'start_episode_sequence', 1);
|
|
|
+ $anime_id = getProp($data, 'anime_id');
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ $table_data = [
|
|
|
+ 'intro' => isset($script_arr['intro']) ? $script_arr['intro'] : '',
|
|
|
+ 'highlights' => isset($script_arr['highlights']) ? $script_arr['highlights'] : '',
|
|
|
+ 'role_relationship' => isset($script_arr['role_relationship']) ? $script_arr['role_relationship'] : '',
|
|
|
+ 'core_contradiction' => isset($script_arr['core_contradiction']) ? $script_arr['core_contradiction'] : '',
|
|
|
+ 'roles' => isset($script_arr['roles']) ? json_encode($script_arr['roles'], 256) : '',
|
|
|
+ 'art_style' => isset($script_arr['art_style']) ? $script_arr['art_style'] : '',
|
|
|
+ 'scenes' => isset($script_arr['scenes']) ? json_encode($script_arr['scenes'], 256) : '',
|
|
|
+ 'status' => 3,
|
|
|
+ 'start_episode_sequence' => $start_episode_sequence,
|
|
|
+ 'end_episode_sequence' => $start_episode_sequence + count($script_arr['episodes']) - 1,
|
|
|
+ 'episode_num' => count($script_arr['episodes']),
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 保存剧本内容
|
|
|
+ if (!empty($anime_id)) {
|
|
|
+ $boolen = DB::table('mp_animes')->where('id', $anime_id)->update($table_data);
|
|
|
+ if (!$boolen) {
|
|
|
+ dLog('deepseek')->info('对话保存失败', $table_data);
|
|
|
+ Utils::throwError('20003:对话保存失败');
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ $table['created_at'] = $table_data['updated_at'];
|
|
|
+ $anime_id = DB::table('mp_animes')->insertGetId($table_data);
|
|
|
+ if (!$anime_id) {
|
|
|
+ dLog('deepseek')->info('对话保存失败', $table_data);
|
|
|
+ Utils::throwError('20003:对话保存失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 保存分集内容
|
|
|
+ // 删除历史分集内容
|
|
|
+ $boolen1 = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->delete();
|
|
|
+
|
|
|
+ $episodes = [];
|
|
|
+ $sequence = 1;
|
|
|
+ foreach ($script_arr['episodes'] as $episode) {
|
|
|
+ $segment_number = 1;
|
|
|
+ foreach($episode['segments'] as $segment) {
|
|
|
+ $episodes[] = [
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'episode_number' => $episode['episode_number'],
|
|
|
+ 'title' => $episode['title'],
|
|
|
+ // 'content' => $episode['content'],
|
|
|
+ 'content' => '',
|
|
|
+ 'segment_number' => $segment_number,
|
|
|
+ 'segment_content' => $segment['segment_content'],
|
|
|
+ 'sequence' => $sequence,
|
|
|
+ 'created_at' => date('Y-m-d H:i:s'),
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ];
|
|
|
+ $sequence++;
|
|
|
+ $segment_number++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ $boolen2 = DB::table('mp_anime_episodes')->insert($episodes);
|
|
|
+ if (!$boolen2) {
|
|
|
+ dLog('deepseek')->info('分集内容保存失败', $episodes);
|
|
|
+ Utils::throwError('20003:分集内容保存失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ DB::rollBack();
|
|
|
+ Utils::throwError('20003:'.$e->getMessage());
|
|
|
+ }
|
|
|
+ DB::commit();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function animeDetail($data) {
|
|
|
+ $anime_id = getProp($data, 'anime_id');
|
|
|
+ $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)
|
|
|
+ ->selectRaw('id as anime_id, anime_name, intro, highlights, roles, role_relationship, core_contradiction, art_style, scenes, status, start_episode_sequence, end_episode_sequence, episode_num, remark, generate_status, created_at')->first();
|
|
|
+ if (!$anime) Utils::throwError('20003:该剧本不存在!');
|
|
|
+ $anime = (array)$anime;
|
|
|
+ $anime['roles'] = json_decode($anime['roles']);
|
|
|
+ $anime['scenes'] = json_decode($anime['scenes']);
|
|
|
+
|
|
|
+ // 获取分集信息
|
|
|
+ $episodes = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->orderBy('episode_number')
|
|
|
+ ->select('id', 'episode_number', 'title', 'content', 'segment_number', 'segment_content')
|
|
|
+ ->orderBy('episode_number')->orderBy('segment_number')->get()->map(function ($value) {
|
|
|
+ return (array)$value;
|
|
|
+ })->toArray();
|
|
|
+ $return_episodes = [];
|
|
|
+ foreach($episodes as $episode) {
|
|
|
+ $episode_number = getProp($episode, 'episode_number');
|
|
|
+ if (isset($return_episodes[$episode_number])) {
|
|
|
+ $return_episodes[$episode_number]['segments'][] = [
|
|
|
+ 'segment_number' => getProp($episode, 'segment_number'),
|
|
|
+ 'segment_content' => getProp($episode, 'segment_content')
|
|
|
+ ];
|
|
|
+ }else {
|
|
|
+ $return_episodes[$episode_number] = [
|
|
|
+ 'episode_number' => $episode_number,
|
|
|
+ 'title' => getProp($episode, 'title'),
|
|
|
+ 'segments' => [
|
|
|
+ [
|
|
|
+ 'segment_number' => getProp($episode, 'segment_number'),
|
|
|
+ 'segment_content' => getProp($episode, 'segment_content')
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $anime['episodes'] = array_values($return_episodes);
|
|
|
+ return $anime;
|
|
|
+ }
|
|
|
}
|