UrsTalentConfig.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Module\UrsPromotion\Models;
  3. use UCore\ModelCore;
  4. use App\Module\UrsPromotion\Enums\UrsTalentLevel;
  5. /**
  6. * URS达人等级配置模型
  7. * field start
  8. * @property int $id 主键ID
  9. * @property int $level 等级:0无,1初级,2中级,3高级,4资深,5顶级
  10. * @property string $name 等级名称
  11. * @property int $direct_count_required 所需直推人数
  12. * @property int $promotion_count_required 所需团队总人数
  13. * @property int $active_count_required 所需活跃人数
  14. * @property int $active_direct_required 所需直推活跃人数
  15. * @property string $icon 等级图标
  16. * @property string $description 等级描述
  17. * @property int $sort_order 排序权重
  18. * @property int $status 状态:1启用,0禁用
  19. * @property \Carbon\Carbon $created_at 创建时间
  20. * @property \Carbon\Carbon $updated_at 更新时间
  21. * @property int $promotion_direct_group 直推奖励组ID
  22. * @property int $promotion_indirect_group 间推奖励组ID
  23. * @property int $promotion_third_group 三推奖励组ID
  24. * @property float $planting_direct_rate 直推分成比例
  25. * @property float $planting_indirect_rate 间推分成比例
  26. * @property float $planting_third_rate 三推分成比例
  27. * field end
  28. *
  29. *
  30. */
  31. class UrsTalentConfig extends ModelCore
  32. {
  33. /**
  34. * 数据库表名
  35. */
  36. protected $table = 'urs_promotion_talent_configs';
  37. /**
  38. * 属性类型转换
  39. */
  40. protected $casts = [
  41. 'level' => 'integer',
  42. 'direct_count_required' => 'integer',
  43. 'promotion_count_required' => 'integer',
  44. 'active_count_required' => 'integer',
  45. 'active_direct_required' => 'integer',
  46. 'promotion_direct_group' => 'integer',
  47. 'promotion_indirect_group' => 'integer',
  48. 'promotion_third_group' => 'integer',
  49. 'planting_direct_rate' => 'decimal:4',
  50. 'planting_indirect_rate' => 'decimal:4',
  51. 'planting_third_rate' => 'decimal:4',
  52. 'sort_order' => 'integer',
  53. 'status' => 'integer',
  54. 'created_at' => 'datetime',
  55. 'updated_at' => 'datetime',
  56. ];
  57. /**
  58. * 状态常量
  59. */
  60. const STATUS_DISABLED = 0; // 禁用
  61. const STATUS_ENABLED = 1; // 启用
  62. /**
  63. * 获取达人等级枚举
  64. */
  65. public function getTalentLevelEnum(): UrsTalentLevel
  66. {
  67. return UrsTalentLevel::fromInt($this->level) ?? UrsTalentLevel::NONE;
  68. }
  69. /**
  70. * 检查配置是否启用
  71. */
  72. public function isEnabled(): bool
  73. {
  74. return $this->status === self::STATUS_ENABLED;
  75. }
  76. /**
  77. * 获取推广收益奖励组ID
  78. *
  79. * @param int $relationLevel 推荐层级 1:直推 2:间推 3:三推
  80. * @return int|null
  81. */
  82. public function getPromotionRewardGroupId(int $relationLevel): ?int
  83. {
  84. return match($relationLevel) {
  85. 1 => $this->promotion_direct_group ?: null,
  86. 2 => $this->promotion_indirect_group ?: null,
  87. 3 => $this->promotion_third_group ?: null,
  88. default => null,
  89. };
  90. }
  91. /**
  92. * 获取种植收益分成比例
  93. *
  94. * @param int $relationLevel 推荐层级 1:直推 2:间推 3:三推
  95. * @return float
  96. */
  97. public function getPlantingRewardRate(int $relationLevel): float
  98. {
  99. return match($relationLevel) {
  100. 1 => (float)$this->planting_direct_rate,
  101. 2 => (float)$this->planting_indirect_rate,
  102. 3 => (float)$this->planting_third_rate,
  103. default => 0.0,
  104. };
  105. }
  106. /**
  107. * 设置推广收益奖励组配置
  108. *
  109. * @param array $groups 奖励组配置 [1 => 1001, 2 => 1002, 3 => 1003]
  110. */
  111. public function setPromotionRewardGroups(array $groups): void
  112. {
  113. $this->promotion_direct_group = $groups[1] ?? 0;
  114. $this->promotion_indirect_group = $groups[2] ?? 0;
  115. $this->promotion_third_group = $groups[3] ?? 0;
  116. }
  117. /**
  118. * 设置种植收益分成比例
  119. *
  120. * @param array $rates 分成比例配置 [1 => 0.05, 2 => 0.03, 3 => 0.01]
  121. */
  122. public function setPlantingRewardRates(array $rates): void
  123. {
  124. $this->planting_direct_rate = $rates[1] ?? 0;
  125. $this->planting_indirect_rate = $rates[2] ?? 0;
  126. $this->planting_third_rate = $rates[3] ?? 0;
  127. }
  128. /**
  129. * 检查是否满足升级条件
  130. *
  131. * @param int $directCount 直推人数
  132. * @param int $promotionCount 团队总人数
  133. * @return bool
  134. */
  135. public function meetsRequirements(int $directCount, int $promotionCount): bool
  136. {
  137. return $directCount >= $this->direct_count_required
  138. && $promotionCount >= $this->promotion_count_required;
  139. }
  140. /**
  141. * 获取状态文本
  142. */
  143. public function getStatusText(): string
  144. {
  145. return match($this->status) {
  146. self::STATUS_ENABLED => '启用',
  147. self::STATUS_DISABLED => '禁用',
  148. default => '未知',
  149. };
  150. }
  151. }