| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace App\Module\UrsPromotion\Models;
- use UCore\ModelCore;
- use Illuminate\Database\Eloquent\Relations\BelongsTo;
- use App\Module\User\Models\User;
- use App\Module\UrsPromotion\Enums\UrsTalentLevel;
- /**
- * URS用户达人等级模型
- *
- * @property int $id 主键ID
- * @property int $user_id 用户ID
- * @property int $talent_level URS达人等级
- * @property int $direct_count 直推人数
- * @property int $indirect_count 间推人数
- * @property int $third_count 三推人数
- * @property int $promotion_count 团队总人数
- * @property \Carbon\Carbon|null $last_level_update_time 最后等级更新时间
- * @property \Carbon\Carbon $created_at 创建时间
- * @property \Carbon\Carbon $updated_at 更新时间
- *
- * @property-read User $user 用户
- */
- class UrsUserTalent extends ModelCore
- {
- /**
- * 数据库表名
- */
- protected $table = 'urs_promotion_user_talents';
- // field start
- /**
- * 可批量赋值的属性
- */
- protected $fillable = [
- 'user_id',
- 'talent_level',
- 'direct_count',
- 'indirect_count',
- 'third_count',
- 'promotion_count',
- 'last_level_update_time',
- ];
- // field end
- /**
- * 属性类型转换
- */
- protected $casts = [
- 'user_id' => 'integer',
- 'talent_level' => 'integer',
- 'direct_count' => 'integer',
- 'indirect_count' => 'integer',
- 'third_count' => 'integer',
- 'promotion_count' => 'integer',
- 'last_level_update_time' => 'datetime',
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- ];
- /**
- * 获取用户关系
- */
- public function user(): BelongsTo
- {
- return $this->belongsTo(User::class, 'user_id');
- }
- /**
- * 获取达人等级枚举
- */
- public function getTalentLevelEnum(): UrsTalentLevel
- {
- return UrsTalentLevel::fromInt($this->talent_level) ?? UrsTalentLevel::NONE;
- }
- /**
- * 获取达人等级名称
- */
- public function getTalentLevelName(): string
- {
- return $this->getTalentLevelEnum()->getName();
- }
- /**
- * 检查是否为达人
- */
- public function isTalent(): bool
- {
- return $this->getTalentLevelEnum()->isTalent();
- }
- /**
- * 更新团队统计数据
- */
- public function updateTeamStats(int $directCount, int $indirectCount, int $thirdCount): void
- {
- $this->direct_count = $directCount;
- $this->indirect_count = $indirectCount;
- $this->third_count = $thirdCount;
- $this->promotion_count = $directCount + $indirectCount + $thirdCount;
- }
- /**
- * 升级达人等级
- */
- public function upgradeTalentLevel(int $newLevel): void
- {
- if ($newLevel > $this->talent_level) {
- $this->talent_level = $newLevel;
- $this->last_level_update_time = now();
- }
- }
- /**
- * 获取团队总人数
- */
- public function getTotalTeamCount(): int
- {
- return $this->direct_count + $this->indirect_count + $this->third_count;
- }
- }
|