| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace App\Module\Farm\Repositories;
- use App\Module\Farm\Models\FarmUserTalent;
- use Dcat\Admin\Repositories\EloquentRepository;
- use Illuminate\Database\Eloquent\Collection;
- /**
- * 达人等级仓库
- *
- * 提供达人等级数据的访问和操作功能。
- * 该类是达人等级模块与后台管理系统的桥梁,用于处理达人等级数据的CRUD操作。
- */
- class FarmUserTalentRepository extends EloquentRepository
- {
- /**
- * 模型类名
- *
- * @var string
- */
- protected $eloquentClass = FarmUserTalent::class;
- /**
- * 根据用户ID查找达人等级
- *
- * @param int $userId
- * @return FarmUserTalent|null
- */
- public function findByUserId(int $userId): ?FarmUserTalent
- {
- return FarmUserTalent::where('user_id', $userId)->first();
- }
- /**
- * 获取指定等级的达人
- *
- * @param int $talentLevel
- * @return Collection
- */
- public function findByTalentLevel(int $talentLevel): Collection
- {
- return FarmUserTalent::where('talent_level', $talentLevel)->get();
- }
- /**
- * 获取达人等级大于等于指定等级的用户
- *
- * @param int $talentLevel
- * @return Collection
- */
- public function findByTalentLevelGreaterOrEqual(int $talentLevel): Collection
- {
- return FarmUserTalent::where('talent_level', '>=', $talentLevel)->get();
- }
- /**
- * 获取直推人数大于等于指定数量的用户
- *
- * @param int $directCount
- * @return Collection
- */
- public function findByDirectCountGreaterOrEqual(int $directCount): Collection
- {
- return FarmUserTalent::where('direct_count', '>=', $directCount)->get();
- }
- /**
- * 获取团队总人数大于等于指定数量的用户
- *
- * @param int $teamCount
- * @return Collection
- */
- public function findByTeamCountGreaterOrEqual(int $teamCount): Collection
- {
- return FarmUserTalent::where('team_count', '>=', $teamCount)->get();
- }
- /**
- * 获取需要更新达人等级的用户
- *
- * @return Collection
- */
- public function findNeedUpdateTalentLevel(): Collection
- {
- return FarmUserTalent::whereRaw('(direct_count >= 5 AND talent_level = 0) OR
- (direct_count >= 10 AND team_count >= 50 AND talent_level = 1) OR
- (direct_count >= 20 AND team_count >= 100 AND talent_level = 2) OR
- (direct_count >= 30 AND team_count >= 200 AND talent_level = 3) OR
- (direct_count >= 50 AND team_count >= 500 AND talent_level = 4)')
- ->get();
- }
- }
|