AgentCustomer.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Http\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Database\Eloquent\SoftDeletes;
  5. use Illuminate\Database\Eloquent\Builder;
  6. class AgentCustomer extends Model
  7. {
  8. use SoftDeletes;
  9. protected $primaryKey = 'id';
  10. protected $table = 'agent_customer';
  11. protected $guarded = [];
  12. protected $casts = [
  13. 'channel_ids' => 'array'
  14. ];
  15. const ORIGIN = [
  16. 1 => '代理商',
  17. 2 => '渠道'
  18. ];
  19. public function user()
  20. {
  21. return $this->hasOne(User::class, 'id', 'user_id');
  22. }
  23. public function scopeUser(Builder $builder)
  24. {
  25. $user = auth()->user();
  26. if ($user->is_super) {
  27. return $builder;
  28. }
  29. // boss按理只有一个
  30. switch ($user->role_id) {
  31. case Role::TYPE_AGENT_BOSS:
  32. $userIds = User::query()->where('agent_id', $user->agent_id)->pluck('id')->toArray();
  33. break;
  34. case Role::TYPE_AGENT_MANAGER:
  35. $userIds = User::query()->where('agent_id', $user->agent_id)
  36. ->where('role_id', Role::TYPE_AGENT_WORKER)->pluck('id')->toArray();
  37. array_unshift($userIds, $user->id);
  38. break;
  39. case Role::TYPE_AGENT_WORKER:
  40. $userIds = [$user->id];
  41. break;
  42. case Role::TYPE_CHANNEL_BOSS:
  43. return $builder;
  44. case Role::TYPE_CHANNEL_MANAGER:
  45. $userIds = User::query()->where('agent_id', '>', 0)
  46. ->pluck('id')->toArray();
  47. array_unshift($userIds, $user->id);
  48. break;
  49. case Role::TYPE_CHANNEL_WORKER:
  50. $anentIds = Agent::query()->whereJsonContains('channel_ids', (string)$user->id)
  51. ->pluck('id')->toArray();
  52. $userIds = User::query()->whereIn('agent_id', $anentIds)->pluck('id')->toArray();
  53. array_unshift($userIds, $user->id);
  54. break;
  55. default:
  56. $userIds = [];
  57. break;
  58. }
  59. return $builder->whereIn('user_id', $userIds);
  60. }
  61. }