lh 2 дней назад
Родитель
Сommit
0fdb7b2631

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

@@ -103,6 +103,12 @@ class AnimeController extends BaseController
         return $this->success($result);
     }
 
+    public function createAnime(Request $request) {
+        $data = $request->all();
+        $result = $this->AnimeService->createAnime($data);
+        return $this->success(['anime_id' => $result]);
+    }
+
 
     // 批量生成主体图片
     public function batchSetRoleImg(Request $request) {

+ 29 - 1
app/Services/Anime/AnimeService.php

@@ -8,6 +8,7 @@ use App\Libs\Utils;
 use App\Models\MpGeneratePicTask;
 use App\Services\AIGeneration\AIImageGenerationService;
 use App\Services\AIGeneration\AIVideoGenerationService;
+use App\Services\DeepSeek\DeepSeekService;
 use Dflydev\DotAccessData\Util;
 use GuzzleHttp\Client;
 use Illuminate\Support\Facades\DB;
@@ -20,16 +21,19 @@ class AnimeService
 {
     protected $aiImageGenerationService;
     protected $aiVideoGenerationService;
+    protected $DeepSeekService;
     private $url;
     private $api_key;
     private $headers;
 
     public function __construct(
         AIImageGenerationService $aiImageGenerationService,
-        AIVideoGenerationService $aiVideoGenerationService
+        AIVideoGenerationService $aiVideoGenerationService,
+        DeepSeekService $DeepSeekService
     ) {
         $this->aiImageGenerationService = $aiImageGenerationService;
         $this->aiVideoGenerationService = $aiVideoGenerationService;
+        $this->DeepSeekService = $DeepSeekService;
         $this->url = 'https://api.deepseek.com/chat/completions';
         $this->api_key = env('DEEPSEEK_API_KEY');
         $this->headers = [
@@ -38,6 +42,30 @@ class AnimeService
         ];
     }
 
+    public function createAnime($data) {
+        $uid = Site::getUid();
+        $input_art_style = getProp($data, 'art_style');
+        // 替换美术风格
+        $mappedArtStyle = $this->DeepSeekService->getArtStylePromptByInput($input_art_style);
+
+        $model = getProp($data, 'model');
+        if ($model && !DB::table('mp_text_models')->where('model', $model)->where('is_enabled', 1)->value('id')) {
+            Utils::throwError('20003:该模型不存在!');
+        }
+        $anime_data = [
+            'user_id'       => $uid,
+            'anime_name'    => '新剧本策划',
+            'is_multi'      => getProp($data, 'is_multi', 1),
+            'model'         => $model,
+            'created_at'    => date('Y-m-d H:i:s'),
+            'updated_at'    => date('Y-m-d H:i:s'),
+        ];
+
+        if ($mappedArtStyle) $anime_data['art_style'] = $mappedArtStyle;
+
+        return DB::table('mp_animes')->insertGetId($anime_data);
+    }
+
     public function chatList($data) {
         $anime_name = getProp($data, 'anime_name');
 

+ 10 - 5
app/Services/DeepSeek/DeepSeekService.php

@@ -371,7 +371,7 @@ class DeepSeekService
         ];
     }
 
-    private function getArtStylePromptByInput($inputArtStyle): string
+    public function getArtStylePromptByInput($inputArtStyle): string
     {
         $normalizedInput = $this->normalizeArtStyleInput($inputArtStyle);
         if ($normalizedInput === '') {
@@ -2177,6 +2177,10 @@ class DeepSeekService
      */
     public function addChat($data) {
         $uid = Site::getUid();
+        $anime_id = getProp($data, 'anime_id');
+        if (!$anime_id) Utils::throwError('20003:请选择对话');
+        $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->first();
+        if (!$anime) Utils::throwError('20003:对话不存在');
         $file = getProp($data, 'file');
         $content = getProp($data, 'content', '');
         $bid = getProp($data, 'bid', 0);
@@ -2480,6 +2484,7 @@ class DeepSeekService
         $table_data = [
             'user_id' => $uid,
             'anime_name' => $anime_name,
+            'model' => $model,
             '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'] : '',
@@ -2494,7 +2499,7 @@ class DeepSeekService
             // 'episode_num' => count($script_arr['episodes']),
             'is_multi' => $is_multi,
             'generate_status' => '待执行',
-            'created_at' => date('Y-m-d H:i:s'),
+            // 'created_at' => date('Y-m-d H:i:s'),
             'updated_at' => date('Y-m-d H:i:s')
         ];
 
@@ -2502,9 +2507,9 @@ class DeepSeekService
         try {
             DB::beginTransaction();
             $now = date('Y-m-d H:i:s');
-            // 新动漫大纲
-            $anime_id = DB::table('mp_animes')->insertGetId($table_data);
-            if (!$anime_id) {
+            // 新动漫大纲
+            $boolen = DB::table('mp_animes')->where('id', $anime_id)->update($table_data);
+            if (!$boolen) {
                 dLog('deepseek')->info('对话保存失败', $table_data);
                 Utils::throwError('20003:对话保存失败');
             }

+ 1 - 0
routes/api.php

@@ -130,6 +130,7 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
     Route::group(['prefix' => 'anime'], function () {
         Route::get('textModel', [AnimeController::class, 'textModel']);
         Route::get('artStyleList', [AnimeController::class, 'artStyleList']);
+        Route::post('create', [AnimeController::class, 'createAnime']);
         Route::post('addChat', [DeepSeekController::class, 'addChat']);
         Route::post('reGenerateAnime', [DeepSeekController::class, 'reGenerateAnime']);
         Route::get('chatList', [AnimeController::class, 'chatList']);