UrsPartnerDividendRecord.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 \Carbon\Carbon $dividend_date 分红日期
  10. * @property float $total_fee_amount 当日总手续费金额
  11. * @property float $dividend_amount 分红总金额(总手续费的20%)
  12. * @property int $partner_count 合伙人数量
  13. * @property float $per_partner_amount 每个合伙人分红金额
  14. * @property int $transfer_app_id 转账应用ID
  15. * @property string $status 状态:pending待处理,processing处理中,completed已完成,failed失败
  16. * @property string $error_message 错误信息
  17. * @property \Carbon\Carbon $created_at 创建时间
  18. * @property \Carbon\Carbon $updated_at 更新时间
  19. * field end
  20. *
  21. * relation start
  22. * @property \App\Module\Transfer\Models\TransferApp $transferApp 转账应用
  23. * @property \Illuminate\Database\Eloquent\Collection|\App\Module\UrsPromotion\Models\UrsPartnerDividendDetail[] $details 分红详情
  24. * relation end
  25. */
  26. class UrsPartnerDividendRecord extends ModelCore
  27. {
  28. /**
  29. * 表名
  30. */
  31. protected $table = 'urs_promotion_partner_dividend_records';
  32. // attrlist start
  33. protected $fillable = [
  34. 'id',
  35. 'dividend_date',
  36. 'total_fee_amount',
  37. 'dividend_amount',
  38. 'partner_count',
  39. 'per_partner_amount',
  40. 'transfer_app_id',
  41. 'status',
  42. 'error_message',
  43. ];
  44. // attrlist end
  45. /**
  46. * 属性类型转换
  47. */
  48. protected $casts = [
  49. 'id' => 'integer',
  50. 'dividend_date' => 'date',
  51. 'total_fee_amount' => 'decimal:10',
  52. 'dividend_amount' => 'decimal:10',
  53. 'partner_count' => 'integer',
  54. 'per_partner_amount' => 'decimal:10',
  55. 'transfer_app_id' => 'integer',
  56. 'status' => 'string',
  57. 'error_message' => 'string',
  58. 'created_at' => 'datetime',
  59. 'updated_at' => 'datetime',
  60. ];
  61. /**
  62. * 隐藏字段
  63. */
  64. protected $hidden = [];
  65. // 状态常量
  66. const STATUS_PENDING = 'pending';
  67. const STATUS_PROCESSING = 'processing';
  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_PROCESSING => '处理中',
  78. self::STATUS_COMPLETED => '已完成',
  79. self::STATUS_FAILED => '失败',
  80. ];
  81. }
  82. /**
  83. * 获取状态名称
  84. */
  85. public function getStatusNameAttribute(): string
  86. {
  87. return self::getStatuses()[$this->status] ?? '未知';
  88. }
  89. /**
  90. * 关联转账应用
  91. */
  92. public function transferApp()
  93. {
  94. return $this->belongsTo(\App\Module\Transfer\Models\TransferApp::class, 'transfer_app_id');
  95. }
  96. /**
  97. * 关联分红详情
  98. */
  99. public function details()
  100. {
  101. return $this->hasMany(UrsPartnerDividendDetail::class, 'dividend_record_id');
  102. }
  103. /**
  104. * 根据日期获取分红记录
  105. */
  106. public static function getByDate(string $date): ?self
  107. {
  108. return self::where('dividend_date', $date)->first();
  109. }
  110. /**
  111. * 检查指定日期是否已经分红
  112. */
  113. public static function isDividendProcessed(string $date): bool
  114. {
  115. return self::where('dividend_date', $date)
  116. ->whereIn('status', [self::STATUS_COMPLETED, self::STATUS_PROCESSING])
  117. ->exists();
  118. }
  119. /**
  120. * 获取成功分红的记录数量
  121. */
  122. public static function getCompletedCount(): int
  123. {
  124. return self::where('status', self::STATUS_COMPLETED)->count();
  125. }
  126. /**
  127. * 获取总分红金额
  128. */
  129. public static function getTotalDividendAmount(): string
  130. {
  131. return self::where('status', self::STATUS_COMPLETED)
  132. ->sum('dividend_amount');
  133. }
  134. }