|
|
@@ -5,6 +5,7 @@ namespace App\Services\Anime;
|
|
|
use App\Consts\ErrorConst;
|
|
|
use App\Facade\Site;
|
|
|
use App\Libs\Utils;
|
|
|
+use App\Services\AIGeneration\AIImageGenerationService;
|
|
|
use GuzzleHttp\Client;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
@@ -14,9 +15,10 @@ use OSS\OssClient;
|
|
|
|
|
|
class AnimeService
|
|
|
{
|
|
|
+ protected $aiImageGenerationService;
|
|
|
|
|
|
- public function __construct() {
|
|
|
-
|
|
|
+ public function __construct(AIImageGenerationService $aiImageGenerationService) {
|
|
|
+ $this->aiImageGenerationService = $aiImageGenerationService;
|
|
|
}
|
|
|
|
|
|
public function uploadImg($data) {
|
|
|
@@ -24,11 +26,56 @@ class AnimeService
|
|
|
}
|
|
|
|
|
|
public function batchSetRoleImg($data) {
|
|
|
+ $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) {
|
|
|
+ foreach ($roles as &$role) {
|
|
|
+ $role_name = getProp($role, 'role');
|
|
|
+ $description = getProp($role, 'description');
|
|
|
// 参考图地址
|
|
|
- $ref
|
|
|
+ $ref_img_url = getProp($role, 'ref_img_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->task_id;
|
|
|
+
|
|
|
+ if (!$task_id) {
|
|
|
+ Utils::throwError("20003: 角色({$role_name})生成图片失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ $role['task_id'] = $task_id;
|
|
|
+ $role['task_status'] = 'processing';
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Utils::throwError("20003:" . $e->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存角色信息
|
|
|
+ $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
|
|
|
+ 'roles' => json_encode($roles, 256),
|
|
|
+ 'generate_status' => '执行中',
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
+ if (!$boolen) {
|
|
|
+ Utils::throwError('20003:保存角色信息失败');
|
|
|
}
|
|
|
+
|
|
|
+ return $boolen;
|
|
|
}
|
|
|
}
|