Просмотр исходного кода

1.新增批量生成场景图片接口2.新增动漫详情和编辑动漫接口

lh 4 месяцев назад
Родитель
Сommit
4f2ca50c19

+ 17 - 0
app/Http/Controllers/Anime/AnimeController.php

@@ -35,6 +35,7 @@ class AnimeController extends BaseController
     }
 
 
+    // 批量生成主体图片
     public function batchSetRoleImg(Request $request) {
         // 忽略所有超时限制
         set_time_limit(0);
@@ -45,6 +46,7 @@ class AnimeController extends BaseController
         return $this->success($result);
     }
 
+    // 批量生成场景图片
     public function batchSetSceneImg(Request $request) {
         // 忽略所有超时限制
         set_time_limit(0);
@@ -55,6 +57,21 @@ class AnimeController extends BaseController
         return $this->success($result);
     }
 
+    // 编辑动漫
+    public function editAnime(Request $request) {
+        $data = $request->all();
+        $result = $this->AnimeService->editAnime($data);
+        return $this->success(['success'=>$result ? 1 : 0]);
+    }
+
+    // 动漫详情
+    public function animeDetail(Request $request) {
+        $data = $request->all();
+
+        $result = $this->AnimeService->animeDetail($data);
+        return $this->success($result);
+
+    }
 
     // public function scriptList(Request $request) {
     //     $data = $request->all();

+ 0 - 8
app/Http/Controllers/DeepSeek/DeepSeekController.php

@@ -460,12 +460,4 @@ class DeepSeekController extends BaseController
             'Access-Control-Allow-Credentials' => 'true'
         ]);
     }
-        
-
-    // 确认动漫剧本大纲
-    public function confirmOutline(Request $request) {
-        $data = $request->all();
-        $result = $this->deepseekService->confirmOutline($data);
-        return $this->success(['success'=>$result ? 1 : 0]);
-    }
 }

+ 120 - 0
app/Services/Anime/AnimeService.php

@@ -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;
+    }
 }

+ 0 - 81
app/Services/DeepSeek/DeepSeekService.php

@@ -2211,87 +2211,6 @@ EOD;
         ];
     }
 
-    public function confirmOutline($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 getContentByBid($bid) {
         $chapters = DB::table('chapters as c')->select('c.id', 'c.name', 'cc.content')
         ->leftJoin('chapter_contents as cc', 'c.chapter_content_id', '=', 'cc.id')

+ 3 - 1
routes/api.php

@@ -127,7 +127,9 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
 
     // 动漫管理
     Route::group(['prefix' => 'anime'], function () {
-        Route::post('confirmOutline', [DeepSeekController::class, 'confirmOutline']);
+        Route::post('chat', [AnimeController::class, 'chat']);
+        Route::get('detail', [AnimeController::class, 'animeDetail']);
+        Route::post('edit', [AnimeController::class, 'editAnime']);
         Route::post('batchUploadImg', [ImageGenerationController::class, 'batchUploadImg']);
         Route::post('batchSetRoleImg', [AnimeController::class, 'batchSetRoleImg']);
         Route::post('batchSetSceneImg', [AnimeController::class, 'batchSetSceneImg']);