UrsPartnerDividendDetail.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Module\UrsPromotion\Models;
  3. use UCore\ModelCore;
  4. /**
  5. * URS合伙人分红详情模型
  6. *
  7. * field start
  8. * @property int $id 主键ID
  9. * @property int $dividend_record_id 分红记录ID
  10. * @property int $user_id 用户ID(农场用户ID)
  11. * @property int $urs_user_id URS用户ID
  12. * @property int $talent_level 达人等级
  13. * @property float $dividend_amount 分红金额
  14. * @property string $status 状态:pending待处理,completed已完成,failed失败
  15. * @property string $error_message 错误信息
  16. * @property int $transfer_order_id 转账订单ID
  17. * @property \Carbon\Carbon $created_at 创建时间
  18. * @property \Carbon\Carbon $updated_at 更新时间
  19. * field end
  20. *
  21. * relation start
  22. * @property \App\Module\UrsPromotion\Models\UrsPartnerDividendRecord $dividendRecord 分红记录
  23. * @property \App\Module\User\Models\User $user 用户
  24. * @property \App\Module\Transfer\Models\TransferOrder $transferOrder 转账订单
  25. * relation end
  26. */
  27. class UrsPartnerDividendDetail extends ModelCore
  28. {
  29. /**
  30. * 表名
  31. */
  32. protected $table = 'urs_promotion_partner_dividend_details';
  33. // attrlist start
  34. protected $fillable = [
  35. 'id',
  36. 'dividend_record_id',
  37. 'user_id',
  38. 'urs_user_id',
  39. 'talent_level',
  40. 'dividend_amount',
  41. 'status',
  42. 'error_message',
  43. 'transfer_order_id',
  44. ];
  45. // attrlist end
  46. /**
  47. * 属性类型转换
  48. */
  49. protected $casts = [
  50. 'id' => 'integer',
  51. 'dividend_record_id' => 'integer',
  52. 'user_id' => 'integer',
  53. 'urs_user_id' => 'integer',
  54. 'talent_level' => 'integer',
  55. 'dividend_amount' => 'decimal:10',
  56. 'status' => 'string',
  57. 'error_message' => 'string',
  58. 'transfer_order_id' => 'integer',
  59. 'created_at' => 'datetime',
  60. 'updated_at' => 'datetime',
  61. ];
  62. /**
  63. * 隐藏字段
  64. */
  65. protected $hidden = [];
  66. // 状态常量
  67. const STATUS_PENDING = 'pending';
  68. const STATUS_COMPLETED = 'completed';
  69. const STATUS_FAILED = 'failed';
  70. /**
  71. * 获取所有状态
  72. */
  73. public static function getStatuses(): array
  74. {
  75. return [
  76. self::STATUS_PENDING => '待处理',
  77. self::STATUS_COMPLETED => '已完成',
  78. self::STATUS_FAILED => '失败',
  79. ];
  80. }
  81. /**
  82. * 获取状态名称
  83. */
  84. public function getStatusNameAttribute(): string
  85. {
  86. return self::getStatuses()[$this->status] ?? '未知';
  87. }
  88. /**
  89. * 关联分红记录
  90. */
  91. public function dividendRecord()
  92. {
  93. return $this->belongsTo(UrsPartnerDividendRecord::class, 'dividend_record_id');
  94. }
  95. /**
  96. * 关联用户
  97. */
  98. public function user()
  99. {
  100. return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id');
  101. }
  102. /**
  103. * 关联转账订单
  104. */
  105. public function transferOrder()
  106. {
  107. return $this->belongsTo(\App\Module\Transfer\Models\TransferOrder::class, 'transfer_order_id');
  108. }
  109. /**
  110. * 获取达人等级名称
  111. */
  112. public function getTalentLevelNameAttribute(): string
  113. {
  114. $levels = [
  115. 0 => '青铜',
  116. 1 => '白银',
  117. 2 => '黄金',
  118. 3 => '钻石',
  119. 4 => '至尊',
  120. 5 => '合伙人',
  121. ];
  122. return $levels[$this->talent_level] ?? '未知';
  123. }
  124. /**
  125. * 根据分红记录ID获取详情列表
  126. */
  127. public static function getByDividendRecordId(int $dividendRecordId): \Illuminate\Database\Eloquent\Collection
  128. {
  129. return self::where('dividend_record_id', $dividendRecordId)
  130. ->with(['user', 'transferOrder'])
  131. ->get();
  132. }
  133. /**
  134. * 获取用户的分红历史
  135. */
  136. public static function getUserDividendHistory(int $userId): \Illuminate\Database\Eloquent\Collection
  137. {
  138. return self::where('user_id', $userId)
  139. ->with(['dividendRecord', 'transferOrder'])
  140. ->orderBy('created_at', 'desc')
  141. ->get();
  142. }
  143. }