| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?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\UrsProfitType;
- use App\Module\UrsPromotion\Enums\UrsPromotionRelationLevel;
- use App\Module\UrsPromotion\Enums\UrsTalentLevel;
- /**
- * URS团队收益记录模型
- *
- * field start
- * @property int $id 主键ID
- * @property int $urs_user_id 获得收益的URS用户ID
- * @property int $urs_promotion_member_id 团队成员URS用户ID(产生收益的用户)
- * @property int $promotion_member_farm_user_id 产生收益的农场用户ID
- * @property int $source_id 收益来源ID
- * @property string $source_type 收益来源类型
- * @property string $profit_type 收益类型:promotion_reward推广收益,planting_reward种植收益
- * @property int $relation_level 推荐层级:1直推,2间推,3三推
- * @property float $original_amount 原始收益金额
- * @property float $profit_amount 分成收益金额,资金
- * @property float $profit_rate 分成比例
- * @property int $reward_group_id 奖励组ID(推广收益时使用)
- * @property int $talent_level 获得收益时的达人等级
- * @property int $farm_user_id 实际发放奖励的农场用户ID(冗余字段,便于查询)
- * @property int $status 状态:1正常,0取消
- * @property \Carbon\Carbon $created_at 创建时间
- * @property \Carbon\Carbon $updated_at 更新时间
- * @property int $item_number 物品数量
- * @property int $item_id 物品ID
- * field end
- * @property-read User $user 获得收益的用户
- * @property-read User $promotionMember 团队成员
- */
- class UrsProfit extends ModelCore
- {
- /**
- * 数据库表名
- */
- protected $table = 'urs_promotion_profits';
-
- /**
- * 可批量赋值的属性
- */
- protected $fillable = [
- 'urs_user_id',
- 'urs_promotion_member_id',
- 'promotion_member_farm_user_id',
- 'source_id',
- 'source_type',
- 'profit_type',
- 'relation_level',
- 'original_amount',
- 'profit_amount',
- 'profit_rate',
- 'talent_level',
- 'farm_user_id',
- 'status',
- ];
- /**
- * 属性类型转换
- */
- protected $casts = [
- 'urs_user_id' => '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 => '未知',
- };
- }
- }
|