| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace App\Repositories;
- use App\Constants\ChangeLogConstant;
- use App\Model\ChangeLogModel;
- use App\Model\UserModel;
- use App\Model\UserRebateLevelModel;
- use App\Repositories\Utils\M3u8CacheRepository;
- use Hyperf\Cache\Cache;
- use Hyperf\Database\Model\Builder;
- use KZ2\Repositories\Model\Repository;
- use Psr\SimpleCache\CacheInterface;
- class UserRebateLevelRepoistory extends Repository
- {
- public function model()
- {
- return UserRebateLevelModel::class;
- }
- /**
- * 收益排行榜
- *
- * @param $incomeType
- * @return array|Builder[]|\Hyperf\Database\Model\Collection
- */
- public function getUserIncomeList($incomeType)
- {
- $columns = ['uid'];
- switch ($incomeType) {
- case 1:
- $order = 'week_amount';
- array_push($columns, 'week_amount as amount');
- break;
- case 2:
- $order = 'moon_amount';
- array_push($columns, 'moon_amount as amount');
- break;
- case 3:
- $order = 'amount';
- array_push($columns, 'amount');
- break;
- default:
- $order = 'week_amount';
- array_push($columns, 'week_amount as amunt');
- }
- $cache = make(CacheInterface::class);
- $res = $cache->remember('income_list' . $order, 60 * 60, function () use ($order, $columns){
- $data = UserRebateLevelModel::query()->orderByDesc($order)->limit(15)->get($columns);
- foreach ($data as $k => $v) {
- $data[$k]['nick'] = $v->user->nick;
- $data[$k]['avatar'] = M3u8CacheRepository::getImageUrl($v->user->avatar);
- unset($v->user);
- }
- return $data;
- });
- return $res;
- }
- /**
- * 推广记录
- *
- * @param string $userId
- * @param $page
- * @param $pageSize
- * @return \Hyperf\Contract\LengthAwarePaginatorInterface
- */
- public function promoteLog($userId, $page, $pageSize)
- {
- $res = UserModel::query()->where('created_at', '>', '2022-05-01')->where('parent_uid', $userId)->orderByDesc('created_at')->paginate($pageSize, ['created_at', 'nick', 'avatar'], 'page', $page);
- foreach ($res as &$v) {
- $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
- }
- return $res;
- }
- /**
- * 我的收益
- * todo 优化:昨日收益和今日收益异步处理
- * @param $userId
- * @return array
- * @throws \Psr\SimpleCache\InvalidArgumentException
- */
- public function userIncome($userId)
- {
- $rebate = make(ConfigRepoistory::class)->get('user_agent_rebate_rule', 'rule');
- $rebate = json_decode($rebate, true);
- // 参数初始化
- $res = [
- 'agent_level' => 1,
- 'rebate' => $rebate[1]['ratio'],
- 'lower_rebate' => $rebate[2]['ratio'],
- 'income' => [
- 'yesterday' => 0,
- 'today' => 0,
- 'total' => 0
- ],
- 'people' => [
- 'spread' => UserModel::query()->where('created_at', '>', '2022-05-01')->where('parent_uid', $userId)->count('id'),
- 'recharge' => 0
- ]
- ];
- $rebateUser = UserRebateLevelModel::query()->where('uid', $userId)->first(['amount', 'agent_level', 'invite_number']);
- if (empty($rebateUser)) {
- return $res;
- }
- $res['agent_level'] = $rebateUser->agent_level;
- $res['rebate'] = $rebate[$rebateUser->agent_level]['ratio'];
- $res['lower_rebate'] = $rebate[$rebateUser->agent_level + 1]['ratio'];
- // 总收益
- $res['income']['total'] = $rebateUser->amount;
- // 今日收益
- $toDayDate = date('Y-m-d');
- $toDatyAmount = ChangeLogModel::query()->whereBetween('created_at', [$toDayDate . ' 00:00:00', $toDayDate . ' 23:59:59'])
- ->where(['user_uid' => $userId, 'type' => ChangeLogConstant::TYPE_3])->sum('amount');
- $res['income']['today'] = $toDatyAmount;
- // 昨日收益
- $yesterdayDate = date('Y-m-d', strtotime('-1 day'));
- $yesterdayAmount = ChangeLogModel::query()->whereBetween('created_at', [$yesterdayDate . ' 00:00:00', $yesterdayDate . ' 23:59:59'])
- ->where(['user_uid' => $userId, 'type' => ChangeLogConstant::TYPE_3])->sum('amount');
- $res['income']['yesterday'] = $yesterdayAmount;
- // 充值人数
- $res['people']['recharge'] = $rebateUser->invite_number;
- return $res;
- }
- }
|