AIElement.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. class AIElement extends Model
  6. {
  7. use HasFactory;
  8. protected $table = 'mp_ai_elements';
  9. protected $fillable = [
  10. 'task_id',
  11. 'external_task_id',
  12. 'task_status',
  13. 'task_status_msg',
  14. 'element_id',
  15. 'element_name',
  16. 'element_description',
  17. 'reference_type',
  18. 'element_image_list',
  19. 'element_video_list',
  20. 'element_voice_id',
  21. 'element_voice_info',
  22. 'tag_list',
  23. 'owned_by',
  24. 'status',
  25. 'callback_url',
  26. 'final_unit_deduction',
  27. ];
  28. protected $casts = [
  29. 'element_image_list' => 'array',
  30. 'element_video_list' => 'array',
  31. 'element_voice_info' => 'array',
  32. 'tag_list' => 'array',
  33. ];
  34. /**
  35. * 任务状态常量
  36. */
  37. const STATUS_SUBMITTED = 'submitted';
  38. const STATUS_PROCESSING = 'processing';
  39. const STATUS_SUCCEED = 'succeed';
  40. const STATUS_FAILED = 'failed';
  41. /**
  42. * 参考类型常量
  43. */
  44. const REFERENCE_TYPE_IMAGE = 'image_refer';
  45. const REFERENCE_TYPE_VIDEO = 'video_refer';
  46. /**
  47. * 主体状态常量
  48. */
  49. const ELEMENT_STATUS_SUCCEED = 'succeed';
  50. const ELEMENT_STATUS_DELETED = 'deleted';
  51. /**
  52. * 标签映射
  53. */
  54. const TAG_MAP = [
  55. 'o_101' => '热梗',
  56. 'o_102' => '人物',
  57. 'o_103' => '动物',
  58. 'o_104' => '道具',
  59. 'o_105' => '服饰',
  60. 'o_106' => '场景',
  61. 'o_107' => '特效',
  62. 'o_108' => '其他',
  63. ];
  64. /**
  65. * 获取标签名称
  66. */
  67. public function getTagNamesAttribute()
  68. {
  69. if (!$this->tag_list) {
  70. return [];
  71. }
  72. return collect($this->tag_list)->map(function ($tag) {
  73. return [
  74. 'tag_id' => $tag['tag_id'],
  75. 'tag_name' => self::TAG_MAP[$tag['tag_id']] ?? '未知',
  76. ];
  77. })->toArray();
  78. }
  79. /**
  80. * 是否为自定义主体
  81. */
  82. public function isCustomElement()
  83. {
  84. return $this->owned_by !== 'kling';
  85. }
  86. /**
  87. * 是否任务成功
  88. */
  89. public function isTaskSucceed()
  90. {
  91. return $this->task_status === self::STATUS_SUCCEED;
  92. }
  93. /**
  94. * 是否主体可用
  95. */
  96. public function isElementAvailable()
  97. {
  98. return $this->status === self::ELEMENT_STATUS_SUCCEED;
  99. }
  100. }