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

新增批量生成场景图片接口

lh 4 месяцев назад
Родитель
Сommit
6fec86c77b
3 измененных файлов с 59 добавлено и 17 удалено
  1. 9 5
      app/Http/Controllers/Anime/AnimeController.php
  2. 49 12
      app/Services/Anime/AnimeService.php
  3. 1 0
      routes/api.php

+ 9 - 5
app/Http/Controllers/Anime/AnimeController.php

@@ -45,11 +45,15 @@ class AnimeController extends BaseController
         return $this->success($result);
     }
 
-    // public function insertBgm(Request $request) {
-    //     $data = $request->all();
-    //     $result = $this->AnimeService->insertBgm($data);
-    //     return $this->success(['success'=>$result ? 1 : 0]);
-    // }
+    public function batchSetSceneImg(Request $request) {
+        // 忽略所有超时限制
+        set_time_limit(0);
+        ini_set('max_execution_time', '0');
+
+        $data = $request->all();
+        $result = $this->AnimeService->batchSetSceneImg($data);
+        return $this->success($result);
+    }
 
 
     // public function scriptList(Request $request) {

+ 49 - 12
app/Services/Anime/AnimeService.php

@@ -29,15 +29,6 @@ class AnimeService
         $anime_id = getProp($data, 'anime_id');
         if (!$anime_id) Utils::throwError('1002:请选择对话');
         $roles = getProp($data, 'roles');
-        // $roles格式
-        // [
-        //     {
-        //         "role": "角色名",
-        //         "description": "角色描述"
-        //         "ref_img_url": "参考图地址"
-        //     },
-        //     ...
-        // ]
         
         foreach ($roles as &$role) {
             $role_name = getProp($role, 'role');
@@ -53,13 +44,13 @@ class AnimeService
                 ];
                 
                 $task = $this->aiImageGenerationService->createImageGenerationTask($params);
-                $tid = $task->id;
+                $task_id = $task->id;
                 
-                if (!$tid) {
+                if (!$task_id) {
                     Utils::throwError("20003: 角色({$role_name})生成图片失败");
                 }
                 
-                $role['task_id'] = $tid;
+                $role['task_id'] = $task_id;
                 $role['task_status'] = 'processing';
             } catch (\Exception $e) {
                 Utils::throwError("20003:" . $e->getMessage());
@@ -78,4 +69,50 @@ class AnimeService
 
         return $boolen;
     }
+
+
+    public function batchSetSceneImg($data) {
+        $anime_id = getProp($data, 'anime_id');
+        if (!$anime_id) Utils::throwError('1002:请选择对话');
+        $scenes = getProp($data, 'scenes');
+        
+        foreach ($scenes as &$scene) {
+            $scene_name = getProp($scene, 'scene');
+            $description = getProp($scene, 'description');
+            // 参考图地址
+            $ref_img_url = getProp($scene, 'url');
+            
+            // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
+            try {
+                $params = [
+                    'prompt' => $description,
+                    'ref_img_urls' => !empty($ref_img_url) ? $ref_img_url : []
+                ];
+                
+                $task = $this->aiImageGenerationService->createImageGenerationTask($params);
+                $task_id = $task->id;
+                
+                if (!$task_id) {
+                    Utils::throwError("20003: 角色({$scene_name})生成图片失败");
+                }
+                
+                $scene['task_id'] = $task_id;
+                $scene['task_status'] = 'processing';
+            } catch (\Exception $e) {
+                Utils::throwError("20003:" . $e->getMessage());
+            }
+        }
+        
+        // 保存角色信息
+        $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
+            'scenes'             => json_encode($scenes, 256),
+            'generate_status'   => '执行中',
+            'updated_at'        => date('Y-m-d H:i:s')
+        ]);
+        if (!$boolen) {
+            Utils::throwError('20003:保存角色信息失败');
+        }
+
+        return $boolen;
+    }
 }

+ 1 - 0
routes/api.php

@@ -130,6 +130,7 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
         Route::post('confirmOutline', [DeepSeekController::class, 'confirmOutline']);
         Route::post('batchUploadImg', [ImageGenerationController::class, 'batchUploadImg']);
         Route::post('batchSetRoleImg', [AnimeController::class, 'batchSetRoleImg']);
+        Route::post('batchSetSceneImg', [AnimeController::class, 'batchSetSceneImg']);
     });
     
 });