AnimeService.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Services\Anime;
  3. use App\Consts\ErrorConst;
  4. use App\Facade\Site;
  5. use App\Libs\Utils;
  6. use App\Services\AIGeneration\AIImageGenerationService;
  7. use GuzzleHttp\Client;
  8. use Illuminate\Support\Facades\DB;
  9. use Illuminate\Support\Facades\Log;
  10. use Illuminate\Support\Facades\Redis;
  11. use OSS\Core\OssException;
  12. use OSS\OssClient;
  13. class AnimeService
  14. {
  15. protected $aiImageGenerationService;
  16. public function __construct(AIImageGenerationService $aiImageGenerationService) {
  17. $this->aiImageGenerationService = $aiImageGenerationService;
  18. }
  19. public function uploadImg($data) {
  20. }
  21. public function batchSetRoleImg($data) {
  22. $anime_id = getProp($data, 'anime_id');
  23. if (!$anime_id) Utils::throwError('1002:请选择对话');
  24. $roles = getProp($data, 'roles');
  25. // $roles格式
  26. // [
  27. // {
  28. // "role": "角色名",
  29. // "description": "角色描述"
  30. // "ref_img_url": "参考图地址"
  31. // },
  32. // ...
  33. // ]
  34. foreach ($roles as &$role) {
  35. $role_name = getProp($role, 'role');
  36. $description = getProp($role, 'description');
  37. // 参考图地址
  38. $ref_img_url = getProp($role, 'ref_img_url');
  39. // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
  40. try {
  41. $params = [
  42. 'prompt' => $description,
  43. 'ref_img_urls' => !empty($ref_img_url) ? $ref_img_url : []
  44. ];
  45. $task = $this->aiImageGenerationService->createImageGenerationTask($params);
  46. $task_id = $task->task_id;
  47. if (!$task_id) {
  48. Utils::throwError("20003: 角色({$role_name})生成图片失败");
  49. }
  50. $role['task_id'] = $task_id;
  51. $role['task_status'] = 'processing';
  52. } catch (\Exception $e) {
  53. Utils::throwError("20003:" . $e->getMessage());
  54. }
  55. }
  56. // 保存角色信息
  57. $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
  58. 'roles' => json_encode($roles, 256),
  59. 'generate_status' => '执行中',
  60. 'updated_at' => date('Y-m-d H:i:s')
  61. ]);
  62. if (!$boolen) {
  63. Utils::throwError('20003:保存角色信息失败');
  64. }
  65. return $boolen;
  66. }
  67. }