User.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. use Notifiable;
  15. protected $table = 'user';
  16. protected $casts = ['expired_at' => 'date:Y-m-d', 'reset_time' => 'date:Y-m-d',];
  17. protected $dates = ['expired_at', 'reset_time'];
  18. protected $guarded = ['id'];
  19. public function onlineIpLogs(): HasMany {
  20. return $this->hasMany(NodeOnlineUserIp::class);
  21. }
  22. public function orders(): HasMany {
  23. return $this->hasMany(Order::class);
  24. }
  25. public function payments(): HasMany {
  26. return $this->hasMany(Payment::class);
  27. }
  28. public function commissionSettlements(): HasMany {
  29. return $this->hasMany(ReferralApply::class);
  30. }
  31. public function commissionLogs(): HasMany {
  32. return $this->hasMany(ReferralLog::class, 'inviter_id');
  33. }
  34. public function ruleLogs(): HasMany {
  35. return $this->hasMany(RuleLog::class);
  36. }
  37. public function tickets(): HasMany {
  38. return $this->hasMany(Ticket::class);
  39. }
  40. public function ticketReplies(): HasMany {
  41. return $this->hasMany(TicketReply::class);
  42. }
  43. public function banedLogs(): HasMany {
  44. return $this->hasMany(UserBanedLog::class);
  45. }
  46. public function creditLogs(): HasMany {
  47. return $this->hasMany(UserCreditLog::class);
  48. }
  49. public function dailyDataFlows(): HasMany {
  50. return $this->hasMany(UserDailyDataFlow::class);
  51. }
  52. public function dataFlowLogs(): HasMany {
  53. return $this->hasMany(UserDataFlowLog::class);
  54. }
  55. public function dataModifyLogs(): HasMany {
  56. return $this->hasMany(UserDataModifyLog::class);
  57. }
  58. public function hourlyDataFlows(): HasMany {
  59. return $this->HasMany(UserHourlyDataFlow::class);
  60. }
  61. public function loginLogs(): HasMany {
  62. return $this->HasMany(UserLoginLog::class);
  63. }
  64. public function subscribe(): HasOne {
  65. return $this->hasOne(UserSubscribe::class);
  66. }
  67. public function subscribeLogs(): HasManyThrough {
  68. return $this->hasManyThrough(UserSubscribeLog::class, UserSubscribe::class);
  69. }
  70. public function verify(): HasMany {
  71. return $this->hasMany(Verify::class);
  72. }
  73. public function group(): BelongsTo {
  74. return $this->belongsTo(UserGroup::class);
  75. }
  76. public function inviter(): BelongsTo {
  77. return $this->belongsTo(__CLASS__);
  78. }
  79. public function invites(): HasMany {
  80. return $this->hasMany(Invite::class, 'inviter_id');
  81. }
  82. public function invitees(): HasMany {
  83. return $this->hasMany(__CLASS__, 'inviter_id');
  84. }
  85. public function getLevelNameAttribute(): string {
  86. return Level::whereLevel($this->attributes['level'])->first()->name;
  87. }
  88. public function getCreditAttribute($value) {
  89. return $value / 100;
  90. }
  91. public function getExpiredAtAttribute() {
  92. return $this->attributes['expired_at'];
  93. }
  94. public function getResetTimeAttribute() {
  95. return $this->attributes['reset_time'];
  96. }
  97. public function setCreditAttribute($value) {
  98. return $this->attributes['credit'] = $value * 100;
  99. }
  100. public function scopeUid($query) {
  101. return $query->whereId(Auth::id());
  102. }
  103. public function scopeActiveUser($query) {
  104. return $query->where('status', '<>', -1)->whereEnable(1);
  105. }
  106. public function scopeNodeAllowUsers($query, $node_id, $node_level) {
  107. $groups = [0];
  108. if($node_id){
  109. foreach(UserGroup::all() as $userGroup){
  110. $nodes = $userGroup->nodes;
  111. if($nodes && in_array($node_id, $nodes, true)){
  112. $groups[] = $userGroup->id;
  113. }
  114. }
  115. }
  116. return $query->activeUser()->whereIn('group_id', $groups)->where('level', '>=', $node_level);
  117. }
  118. public function scopeUserAccessNodes() {
  119. return Node::userAllowNodes($this->attributes['group_id'], $this->attributes['level']);
  120. }
  121. }