UserRebateLevelRepoistory.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Repositories;
  3. use App\Constants\ChangeLogConstant;
  4. use App\Model\ChangeLogModel;
  5. use App\Model\UserModel;
  6. use App\Model\UserRebateLevelModel;
  7. use App\Repositories\Utils\M3u8CacheRepository;
  8. use Hyperf\Cache\Cache;
  9. use Hyperf\Database\Model\Builder;
  10. use KZ2\Repositories\Model\Repository;
  11. use Psr\SimpleCache\CacheInterface;
  12. class UserRebateLevelRepoistory extends Repository
  13. {
  14. public function model()
  15. {
  16. return UserRebateLevelModel::class;
  17. }
  18. /**
  19. * 收益排行榜
  20. *
  21. * @param $incomeType
  22. * @return array|Builder[]|\Hyperf\Database\Model\Collection
  23. */
  24. public function getUserIncomeList($incomeType)
  25. {
  26. $columns = ['uid'];
  27. switch ($incomeType) {
  28. case 1:
  29. $order = 'week_amount';
  30. array_push($columns, 'week_amount as amount');
  31. break;
  32. case 2:
  33. $order = 'moon_amount';
  34. array_push($columns, 'moon_amount as amount');
  35. break;
  36. case 3:
  37. $order = 'amount';
  38. array_push($columns, 'amount');
  39. break;
  40. default:
  41. $order = 'week_amount';
  42. array_push($columns, 'week_amount as amunt');
  43. }
  44. $cache = make(CacheInterface::class);
  45. $res = $cache->remember('income_list' . $order, 60 * 60, function () use ($order, $columns){
  46. $data = UserRebateLevelModel::query()->orderByDesc($order)->limit(15)->get($columns);
  47. foreach ($data as $k => $v) {
  48. $data[$k]['nick'] = $v->user->nick;
  49. $data[$k]['avatar'] = M3u8CacheRepository::getImageUrl($v->user->avatar);
  50. unset($v->user);
  51. }
  52. return $data;
  53. });
  54. return $res;
  55. }
  56. /**
  57. * 推广记录
  58. *
  59. * @param string $userId
  60. * @param $page
  61. * @param $pageSize
  62. * @return \Hyperf\Contract\LengthAwarePaginatorInterface
  63. */
  64. public function promoteLog($userId, $page, $pageSize)
  65. {
  66. $res = UserModel::query()->where('created_at', '>', '2022-05-01')->where('parent_uid', $userId)->orderByDesc('created_at')->paginate($pageSize, ['created_at', 'nick', 'avatar'], 'page', $page);
  67. foreach ($res as &$v) {
  68. $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
  69. }
  70. return $res;
  71. }
  72. /**
  73. * 我的收益
  74. * todo 优化:昨日收益和今日收益异步处理
  75. * @param $userId
  76. * @return array
  77. * @throws \Psr\SimpleCache\InvalidArgumentException
  78. */
  79. public function userIncome($userId)
  80. {
  81. $rebate = make(ConfigRepoistory::class)->get('user_agent_rebate_rule', 'rule');
  82. $rebate = json_decode($rebate, true);
  83. // 参数初始化
  84. $res = [
  85. 'agent_level' => 1,
  86. 'rebate' => $rebate[1]['ratio'],
  87. 'lower_rebate' => $rebate[2]['ratio'],
  88. 'income' => [
  89. 'yesterday' => 0,
  90. 'today' => 0,
  91. 'total' => 0
  92. ],
  93. 'people' => [
  94. 'spread' => UserModel::query()->where('created_at', '>', '2022-05-01')->where('parent_uid', $userId)->count('id'),
  95. 'recharge' => 0
  96. ]
  97. ];
  98. $rebateUser = UserRebateLevelModel::query()->where('uid', $userId)->first(['amount', 'agent_level', 'invite_number']);
  99. if (empty($rebateUser)) {
  100. return $res;
  101. }
  102. $res['agent_level'] = $rebateUser->agent_level;
  103. $res['rebate'] = $rebate[$rebateUser->agent_level]['ratio'];
  104. $res['lower_rebate'] = $rebate[$rebateUser->agent_level + 1]['ratio'];
  105. // 总收益
  106. $res['income']['total'] = $rebateUser->amount;
  107. // 今日收益
  108. $toDayDate = date('Y-m-d');
  109. $toDatyAmount = ChangeLogModel::query()->whereBetween('created_at', [$toDayDate . ' 00:00:00', $toDayDate . ' 23:59:59'])
  110. ->where(['user_uid' => $userId, 'type' => ChangeLogConstant::TYPE_3])->sum('amount');
  111. $res['income']['today'] = $toDatyAmount;
  112. // 昨日收益
  113. $yesterdayDate = date('Y-m-d', strtotime('-1 day'));
  114. $yesterdayAmount = ChangeLogModel::query()->whereBetween('created_at', [$yesterdayDate . ' 00:00:00', $yesterdayDate . ' 23:59:59'])
  115. ->where(['user_uid' => $userId, 'type' => ChangeLogConstant::TYPE_3])->sum('amount');
  116. $res['income']['yesterday'] = $yesterdayAmount;
  117. // 充值人数
  118. $res['people']['recharge'] = $rebateUser->invite_number;
  119. return $res;
  120. }
  121. }