'integer', 'urs_promotion_member_id' => 'integer', 'promotion_member_farm_user_id' => 'integer', 'source_id' => 'integer', 'relation_level' => 'integer', 'original_amount' => 'decimal:10', 'profit_amount' => 'decimal:10', 'profit_rate' => 'decimal:6', 'talent_level' => 'integer', 'farm_user_id' => 'integer', 'status' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 状态常量 */ const STATUS_CANCELLED = 0; // 取消 const STATUS_NORMAL = 1; // 正常 const STATUS_SKIPPED = 2; // 跳过(用户未进入农场) /** * 获取用户映射关系 */ public function userMapping(): BelongsTo { return $this->belongsTo(UrsUserMapping::class, 'urs_user_id', 'urs_user_id'); } /** * 获取团队成员映射关系 */ public function promotionMemberMapping(): BelongsTo { return $this->belongsTo(UrsUserMapping::class, 'urs_promotion_member_id', 'urs_user_id'); } /** * 获取农场用户关系(通过冗余字段) */ public function farmUser(): BelongsTo { return $this->belongsTo(User::class, 'farm_user_id'); } /** * 获取产生收益的农场用户关系 */ public function promotionMemberFarmUser(): BelongsTo { return $this->belongsTo(User::class, 'promotion_member_farm_user_id'); } /** * 获取收益类型枚举 */ public function getProfitTypeEnum(): ?UrsProfitType { return UrsProfitType::fromString($this->profit_type); } /** * 获取收益类型名称 */ public function getProfitTypeName(): string { return $this->getProfitTypeEnum()?->getName() ?? '未知'; } /** * 获取推荐层级枚举 */ public function getRelationLevelEnum(): ?UrsPromotionRelationLevel { return UrsPromotionRelationLevel::tryFrom($this->relation_level); } /** * 获取推荐层级名称 */ public function getRelationLevelName(): string { return $this->getRelationLevelEnum()?->getName() ?? '未知'; } /** * 获取达人等级枚举 */ public function getTalentLevelEnum(): UrsTalentLevel { return UrsTalentLevel::fromInt($this->talent_level) ?? UrsTalentLevel::NONE; } /** * 获取达人等级名称 */ public function getTalentLevelName(): string { return $this->getTalentLevelEnum()->getName(); } /** * 检查收益是否正常 */ public function isNormal(): bool { return $this->status === self::STATUS_NORMAL; } /** * 检查收益是否跳过 */ public function isSkipped(): bool { return $this->status === self::STATUS_SKIPPED; } /** * 取消收益 */ public function cancel(): void { $this->status = self::STATUS_CANCELLED; } /** * 设置为跳过状态 */ public function skip(): void { $this->status = self::STATUS_SKIPPED; } /** * 获取状态文本 */ public function getStatusText(): string { return match($this->status) { self::STATUS_NORMAL => '正常', self::STATUS_CANCELLED => '取消', self::STATUS_SKIPPED => '跳过', default => '未知', }; } }