self::STATUS_ACTIVE, ]; /** * @var array */ protected $fillable = [ 'username', 'password', 'phone', 'phone_verified_at', 'email', 'email_verified_at', 'last_login_ip', 'last_login_at', 'register_ip', 'status', 'status_remark', ]; /** * @var array */ protected $casts = [ 'phone_verified_at' => 'datetime', 'email_verified_at' => 'datetime', 'last_login_at' => 'datetime', 'status' => 'int', ]; /** * {@inheritdoc} */ protected static function booted() { parent::created(function ($user) { //初始化钱包 $user->wallet()->create(); //初始化余额 $user->balance()->create(); //初始化经销商信息 $user->dealer()->create(); //初始化经销商余额 $user->dealerWallet()->create(); }); } /** * 属于此用户的个人信息 * * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function userInfo(): HasOne { return $this->hasOne(UserInfo::class); } /** * 用户的VIP信息 */ public function userVip() { return $this->hasOne(UserVip::class, 'user_id'); } /** * 属于此用户的购物车中的商品 */ public function shoppingCartItems() { return $this->hasMany(ShoppingCartItem::class); } /** * 属于此用户的批零购物车商品 * */ public function dealerShoppingCartItems() { return $this->hasMany(DealerShoppingCartItem::class); } /** * 属于此用户的收货地址 */ public function shippingAddresses() { return $this->hasMany(ShippingAddress::class); } /** * 属于此用户的订单 */ public function orders() { return $this->hasMany(Order::class); } /** * 属于此用户的订单包裹 */ public function orderPackages() { return $this->hasMany(OrderPackage::class); } /** * 属于此用户的商品收藏记录 */ public function skuFavorites() { return $this->hasMany(ProductSkuFavorite::class); } /** * 属于此用户的推送cid */ public function cid() { return $this->hasOne(UserCid::class, 'user_id'); } /** * 属于此用户得经销商身份 * * @return void */ public function dealer() { return $this->hasOne(Dealer::class, 'user_id'); } /** * 属于此用户得经销商余额 */ public function dealerWallet() { return $this->hasOne(DealerWallet::class, 'user_id'); } /** * 属于此用户得经销商余额日志 */ public function dealerWalletLogs() { return $this->hasMany(DealerWalletLog::class, 'user_id'); } /** * * 属于此用户的经销商余额提现日志 */ public function dealerWalletToBankLogs() { return $this->hasMany(DealerWalletToBankLog::class, 'user_id'); } /** * 经销商订购订单 * */ public function dealerOrders() { return $this->hasMany(DealerOrder::class, 'user_id'); } /** * 经销商提货单 * */ public function dealerDeliveryBills() { return $this->hasMany(DealerDeliveryBill::class, 'user_id'); } /** * 经销商的发货订单 * */ public function dealerConsignOrders() { return $this->hasMany(DealerOrder::class, 'consignor_id'); } /** * 经销商商品库存 * */ public function dealerProducts() { return $this->hasMany(DealerUserProduct::class, 'user_id'); } /** * 经销商商品库存 * */ public function dealerProductLogs() { return $this->hasMany(DealerUserProductLog::class, 'user_id'); } public function socialites() { return $this->hasMany(SocialiteUser::class, 'user_id'); } /** * 确认此用户是否是 VIP * * @return bool */ public function isVip(): bool { if ($this->userInfo->agent_level > UserInfo::AGENT_LEVEL_VIP) { return true; } return $this->userInfo?->growth_value >= config('agent.upgrade_rules.vip.sales_value'); } /** * 确认这个用户是否是经销商 * * @return boolean */ public function isDealer(): bool { return $this->dealer ? true : false; } /** * 用户收益记录 * * @return void */ public function dealerEarnings() { return $this->hasMany(DealerEarning::class, 'user_id'); } public function dealerPayEarnings() { return $this->hasMany(DealerEarning::class, 'payer_id'); } /** * 属于此用户的售后订单 */ public function afterSales() { return $this->hasMany(AfterSale::class); } /** * 属于此用户的优惠券 */ public function coupons() { return $this->hasMany(UserCoupon::class); } /** * 签到情况 * * @return void */ public function click() { return $this->hasOne(Click::class, 'user_id'); } /** * 用户签到记录 * * @return void */ public function clickLogs() { return $this->hasMany(ClickLog::class); } /** * 用户的银行卡 */ public function bank() { return $this->hasOne(UserBank::class, 'user_id'); } /** * 用户的资产 */ public function wallet() { return $this->hasOne(Wallet::class, 'user_id'); } /** * 用户的钱包日志 */ public function walletLogs() { return $this->hasMany(WalletLog::class, 'user_id'); } /** * 用户的提现到银行卡记录 */ public function walletToBankLogs() { return $this->hasMany(WalletToBankLog::class, 'user_id'); } /** * 用户的余额 */ public function balance() { return $this->hasOne(Balance::class, 'user_id'); } /** * 用户的余额日志 */ public function balanceLogs() { return $this->hasOne(BalanceLog::class, 'user_id'); } /** * 用户的预收益 */ public function distributionPreIncomes() { return $this->hasMany(DistributionPreIncome::class, 'user_id'); } /** * 用户的配额日志 */ public function quotaLogs() { return $this->hasMany(QuotaLog::class); } /** * 用户的配额日志 */ public function quotaV1Logs() { return $this->hasMany(QuotaV1Log::class); } /** * 属于此用户的团队销售值(含自己的销售值) */ public function teamSalesValueLogs() { return $this->hasMany(SalesValueLog::class); } /** * 属于此用户的团队销售值(含自己的销售值) */ public function salesValueLogs() { return $this->hasMany(SalesValueLog::class)->where('type', SalesValueLog::TYPE_INDIVIDUAL); } /** * 用户的粉丝 */ public function fans() { return $this->belongsToMany(User::class, 'user_infos', 'inviter_id', 'user_id'); } /** * 获取我的粉丝总数 * * @return int */ public function getFansCount(): int { return UserInfo::where('inviter_id', $this->id)->count(); } /** * 禁用用户 * * @param string|null $statusRemark * @return void */ public function disable(?string $statusRemark = null) { if ($this->status === static::STATUS_ACTIVE) { $this->update([ 'status' => static::STATUS_DISABLED, 'status_remark' => $statusRemark, ]); } } /** * 启用用户 * * @return void */ public function enable() { if ($this->status !== static::STATUS_ACTIVE) { return $this->update([ 'status' => static::STATUS_ACTIVE, 'status_remark' => null, ]); } } /** * 设置此用户的密码 * * @param string $value * @return void */ public function setPasswordAttribute($value): void { if ((string) $value === '') { $value = null; } elseif (Hash::needsRehash($value)) { $value = Hash::make($value); // 清空老密码 $this->attributes['old_password'] = null; } $this->attributes['password'] = $value; } /** * 获取此用户的总预收入 * * @return string */ public function getTotalPreRevenue(): string { return $this->distributionPreIncomes()->unsettlement()->sum('total_revenue'); } /** * 确认给定的密码是否正确 * * @param string $password * @return bool */ public function verifyPassword(string $password): bool { // 如果旧密码存在,则校验旧密码 if ($this->old_password) { return $this->old_password === md5($password); } return $this->password && Hash::check($password, $this->password); } /** * 创建用户 * * @param array $attributes * @param self|null $inviter * @return self */ public static function create(array $attributes = [], ?self $inviter = null): self { if ($inviter === null) { $inviter = static::find(1); } $user = static::query()->create($attributes); // 邀请人的深度 $depth = (int) $inviter?->userInfo?->depth; $user->userInfo()->create([ 'inviter_id' => $inviter?->id, 'depth' => $depth + 1, 'path' => Str::finish($inviter?->userInfo?->full_path, '-'), 'real_inviter_id' => $inviter?->id, ]); return $user; } public function checkStatus() { if (in_array($this->status, [static::STATUS_ACTIVE, static::STATUS_INACTIVATED])) { return; } elseif ($this->status === static::STATUS_FROZEN) { abort(403, '账号已冻结'); } elseif ($this->status === static::STATUS_DISABLED) { abort(403, '账号已禁用'); } abort(403, '账号状态异常'); } }