AnimeService.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. foreach ($roles as &$role) {
  26. $role_name = getProp($role, 'role');
  27. $description = getProp($role, 'description');
  28. // 参考图地址
  29. $ref_img_url = getProp($role, 'ref_img_url');
  30. // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
  31. try {
  32. $params = [
  33. 'prompt' => $description,
  34. 'ref_img_urls' => !empty($ref_img_url) ? $ref_img_url : []
  35. ];
  36. $task = $this->aiImageGenerationService->createImageGenerationTask($params);
  37. $task_id = $task->id;
  38. if (!$task_id) {
  39. Utils::throwError("20003: 角色({$role_name})生成图片失败");
  40. }
  41. $role['task_id'] = $task_id;
  42. $role['task_status'] = 'processing';
  43. } catch (\Exception $e) {
  44. Utils::throwError("20003:" . $e->getMessage());
  45. }
  46. }
  47. // 保存角色信息
  48. $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
  49. 'roles' => json_encode($roles, 256),
  50. 'generate_status' => '执行中',
  51. 'updated_at' => date('Y-m-d H:i:s')
  52. ]);
  53. if (!$boolen) {
  54. Utils::throwError('20003:保存角色信息失败');
  55. }
  56. return $boolen;
  57. }
  58. public function batchSetSceneImg($data) {
  59. $anime_id = getProp($data, 'anime_id');
  60. if (!$anime_id) Utils::throwError('1002:请选择对话');
  61. $scenes = getProp($data, 'scenes');
  62. foreach ($scenes as &$scene) {
  63. $scene_name = getProp($scene, 'scene');
  64. $description = getProp($scene, 'description');
  65. // 参考图地址
  66. $ref_img_url = getProp($scene, 'url');
  67. // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
  68. try {
  69. $params = [
  70. 'prompt' => $description,
  71. 'ref_img_urls' => !empty($ref_img_url) ? $ref_img_url : []
  72. ];
  73. $task = $this->aiImageGenerationService->createImageGenerationTask($params);
  74. $task_id = $task->id;
  75. if (!$task_id) {
  76. Utils::throwError("20003: 角色({$scene_name})生成图片失败");
  77. }
  78. $scene['task_id'] = $task_id;
  79. $scene['task_status'] = 'processing';
  80. } catch (\Exception $e) {
  81. Utils::throwError("20003:" . $e->getMessage());
  82. }
  83. }
  84. // 保存角色信息
  85. $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
  86. 'scenes' => json_encode($scenes, 256),
  87. 'generate_status' => '执行中',
  88. 'updated_at' => date('Y-m-d H:i:s')
  89. ]);
  90. if (!$boolen) {
  91. Utils::throwError('20003:保存角色信息失败');
  92. }
  93. return $boolen;
  94. }
  95. }