FarmUserTalentRepository.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Module\Farm\Repositories;
  3. use App\Module\Farm\Models\FarmUserTalent;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. use Illuminate\Database\Eloquent\Collection;
  6. /**
  7. * 达人等级仓库
  8. *
  9. * 提供达人等级数据的访问和操作功能。
  10. * 该类是达人等级模块与后台管理系统的桥梁,用于处理达人等级数据的CRUD操作。
  11. */
  12. class FarmUserTalentRepository extends EloquentRepository
  13. {
  14. /**
  15. * 模型类名
  16. *
  17. * @var string
  18. */
  19. protected $eloquentClass = FarmUserTalent::class;
  20. /**
  21. * 根据用户ID查找达人等级
  22. *
  23. * @param int $userId
  24. * @return FarmUserTalent|null
  25. */
  26. public function findByUserId(int $userId): ?FarmUserTalent
  27. {
  28. return FarmUserTalent::where('user_id', $userId)->first();
  29. }
  30. /**
  31. * 获取指定等级的达人
  32. *
  33. * @param int $talentLevel
  34. * @return Collection
  35. */
  36. public function findByTalentLevel(int $talentLevel): Collection
  37. {
  38. return FarmUserTalent::where('talent_level', $talentLevel)->get();
  39. }
  40. /**
  41. * 获取达人等级大于等于指定等级的用户
  42. *
  43. * @param int $talentLevel
  44. * @return Collection
  45. */
  46. public function findByTalentLevelGreaterOrEqual(int $talentLevel): Collection
  47. {
  48. return FarmUserTalent::where('talent_level', '>=', $talentLevel)->get();
  49. }
  50. /**
  51. * 获取直推人数大于等于指定数量的用户
  52. *
  53. * @param int $directCount
  54. * @return Collection
  55. */
  56. public function findByDirectCountGreaterOrEqual(int $directCount): Collection
  57. {
  58. return FarmUserTalent::where('direct_count', '>=', $directCount)->get();
  59. }
  60. /**
  61. * 获取团队总人数大于等于指定数量的用户
  62. *
  63. * @param int $teamCount
  64. * @return Collection
  65. */
  66. public function findByTeamCountGreaterOrEqual(int $teamCount): Collection
  67. {
  68. return FarmUserTalent::where('team_count', '>=', $teamCount)->get();
  69. }
  70. /**
  71. * 获取需要更新达人等级的用户
  72. *
  73. * @return Collection
  74. */
  75. public function findNeedUpdateTalentLevel(): Collection
  76. {
  77. return FarmUserTalent::whereRaw('(direct_count >= 5 AND talent_level = 0) OR
  78. (direct_count >= 10 AND team_count >= 50 AND talent_level = 1) OR
  79. (direct_count >= 20 AND team_count >= 100 AND talent_level = 2) OR
  80. (direct_count >= 30 AND team_count >= 200 AND talent_level = 3) OR
  81. (direct_count >= 50 AND team_count >= 500 AND talent_level = 4)')
  82. ->get();
  83. }
  84. }