User.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. namespace App\Models;
  3. use Auth;
  4. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  5. use Illuminate\Database\Eloquent\Relations\HasMany;
  6. use Illuminate\Database\Eloquent\Relations\HasManyThrough;
  7. use Illuminate\Database\Eloquent\Relations\HasOne;
  8. use Illuminate\Foundation\Auth\User as Authenticatable;
  9. use Illuminate\Notifications\Notifiable;
  10. /**
  11. * 用户信息
  12. */
  13. class User extends Authenticatable
  14. {
  15. use Notifiable;
  16. protected $table = 'user';
  17. protected $casts = [
  18. 'expired_at' => 'date:Y-m-d',
  19. 'reset_time' => 'date:Y-m-d',
  20. ];
  21. protected $dates = ['expired_at', 'reset_time'];
  22. protected $guarded = ['id'];
  23. public function onlineIpLogs(): HasMany
  24. {
  25. return $this->hasMany(NodeOnlineUserIp::class);
  26. }
  27. public function orders(): HasMany
  28. {
  29. return $this->hasMany(Order::class);
  30. }
  31. public function payments(): HasMany
  32. {
  33. return $this->hasMany(Payment::class);
  34. }
  35. public function commissionSettlements(): HasMany
  36. {
  37. return $this->hasMany(ReferralApply::class);
  38. }
  39. public function commissionLogs(): HasMany
  40. {
  41. return $this->hasMany(ReferralLog::class, 'inviter_id');
  42. }
  43. public function ruleLogs(): HasMany
  44. {
  45. return $this->hasMany(RuleLog::class);
  46. }
  47. public function tickets(): HasMany
  48. {
  49. return $this->hasMany(Ticket::class);
  50. }
  51. public function ticketReplies(): HasMany
  52. {
  53. return $this->hasMany(TicketReply::class);
  54. }
  55. public function banedLogs(): HasMany
  56. {
  57. return $this->hasMany(UserBanedLog::class);
  58. }
  59. public function creditLogs(): HasMany
  60. {
  61. return $this->hasMany(UserCreditLog::class);
  62. }
  63. public function dailyDataFlows(): HasMany
  64. {
  65. return $this->hasMany(UserDailyDataFlow::class);
  66. }
  67. public function dataFlowLogs(): HasMany
  68. {
  69. return $this->hasMany(UserDataFlowLog::class);
  70. }
  71. public function dataModifyLogs(): HasMany
  72. {
  73. return $this->hasMany(UserDataModifyLog::class);
  74. }
  75. public function hourlyDataFlows(): HasMany
  76. {
  77. return $this->HasMany(UserHourlyDataFlow::class);
  78. }
  79. public function loginLogs(): HasMany
  80. {
  81. return $this->HasMany(UserLoginLog::class);
  82. }
  83. public function subscribe(): HasOne
  84. {
  85. return $this->hasOne(UserSubscribe::class);
  86. }
  87. public function subscribeLogs(): HasManyThrough
  88. {
  89. return $this->hasManyThrough(
  90. UserSubscribeLog::class,
  91. UserSubscribe::class
  92. );
  93. }
  94. public function verify(): HasMany
  95. {
  96. return $this->hasMany(Verify::class);
  97. }
  98. public function group(): BelongsTo
  99. {
  100. return $this->belongsTo(UserGroup::class);
  101. }
  102. public function inviter(): BelongsTo
  103. {
  104. return $this->belongsTo(__CLASS__);
  105. }
  106. public function invites(): HasMany
  107. {
  108. return $this->hasMany(Invite::class, 'inviter_id');
  109. }
  110. public function invitees(): HasMany
  111. {
  112. return $this->hasMany(__CLASS__, 'inviter_id');
  113. }
  114. public function getLevelNameAttribute(): string
  115. {
  116. return Level::whereLevel($this->attributes['level'])->first()->name;
  117. }
  118. public function getCreditAttribute($value)
  119. {
  120. return $value / 100;
  121. }
  122. public function getExpiredAtAttribute()
  123. {
  124. return $this->attributes['expired_at'];
  125. }
  126. public function getResetTimeAttribute()
  127. {
  128. return $this->attributes['reset_time'];
  129. }
  130. public function setCreditAttribute($value)
  131. {
  132. return $this->attributes['credit'] = $value * 100;
  133. }
  134. public function scopeUid($query)
  135. {
  136. return $query->whereId(Auth::id());
  137. }
  138. public function scopeActiveUser($query)
  139. {
  140. return $query->where('status', '<>', -1)->whereEnable(1);
  141. }
  142. public function scopeNodeAllowUsers($query, $node_id, $node_level)
  143. {
  144. $groups = [0];
  145. if ($node_id) {
  146. foreach (UserGroup::all() as $userGroup) {
  147. $nodes = $userGroup->nodes;
  148. if ($nodes && in_array($node_id, $nodes, true)) {
  149. $groups[] = $userGroup->id;
  150. }
  151. }
  152. }
  153. return $query->activeUser()->whereIn('group_id', $groups)->where(
  154. 'level',
  155. '>=',
  156. $node_level
  157. );
  158. }
  159. public function scopeUserAccessNodes()
  160. {
  161. return Node::userAllowNodes(
  162. $this->attributes['group_id'],
  163. $this->attributes['level']
  164. );
  165. }
  166. }