User.php 4.8 KB

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