Modules_Web_Controllers_PromotionController.proxy.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace Modules\Web\Controllers;
  3. use App\Model\UserModel;
  4. use App\Repositories\Utils\M3u8CacheRepository;
  5. use Carbon\Carbon;
  6. use Psr\SimpleCache\CacheInterface;
  7. class PromotionController extends BaseController
  8. {
  9. use \Hyperf\Di\Aop\ProxyTrait;
  10. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  11. function __construct()
  12. {
  13. if (method_exists(parent::class, '__construct')) {
  14. parent::__construct(...func_get_args());
  15. }
  16. $this->__handlePropertyHandler(__CLASS__);
  17. }
  18. /**
  19. * 20220910 H5活动
  20. */
  21. public function top20220910()
  22. {
  23. $cacheRepo = make(CacheInterface::class);
  24. $cacheTime = 1 * 60 * 60 - 1;
  25. $cacheKey = 'hd:20220910_top20';
  26. if (env('APP_ENV') != 'prod') {
  27. $startObj = Carbon::create(2022, 1, 2)->startOfDay();
  28. } else {
  29. $startObj = Carbon::create(2022, 9, 9)->startOfDay();
  30. // $startObj = Carbon::create(2022, 03, 01)->startOfDay();
  31. }
  32. $endObj = Carbon::create(2022, 10, 9)->startOfDay();
  33. $fakeNum = 3;
  34. $limitNum = 20;
  35. $fakeUsers = [];
  36. $fakeDoukuiUsers = ['bdPY45', 'bXq7LV', 'Z4LmKQ'];
  37. $fakeChujiUsers = ['VWwW2D', 'VAG1vZ', 'ox2Jxb'];
  38. if (preg_match('/doukui/i', env('APP_NAME'))) {
  39. $fakeUsers = $fakeDoukuiUsers;
  40. } else {
  41. $fakeUsers = $fakeChujiUsers;
  42. }
  43. $result = $cacheRepo->remember($cacheKey, $cacheTime, function () use($startObj, $endObj, $fakeNum, $limitNum, $fakeUsers) {
  44. $result = [];
  45. $endAt = clone $endObj;
  46. $lists = UserModel::query()->distinct()->where('parent_uid', '!=', '')->whereBetween('created_at', [$startObj, $endObj])->groupBy(['parent_uid'])->orderByDesc('invite_num')->orderBy('id', 'ASC')->take($limitNum)->selectRaw('parent_uid, count(id) AS `invite_num`')->get();
  47. if ($lists->isNotEmpty()) {
  48. $nowDate = Carbon::now();
  49. $fakeStartObj = (clone $endAt)->subHours(5)->addMinutes(27);
  50. $diffDays = (clone $fakeStartObj)->diffInDays(Carbon::now());
  51. $no1Position = $diffDays + 1;
  52. $no2Position = $diffDays + 4;
  53. $no3Position = $diffDays + 6;
  54. $previousNum = 0;
  55. $firstNum = 0;
  56. $k = 1;
  57. foreach ($lists as $v1) {
  58. $userObj = UserModel::query()->where(['code' => $v1->parent_uid])->first(['id', 'code', 'nick', 'avatar']);
  59. if (!empty($userObj)) {
  60. $inviteNum = intval($v1->invite_num);
  61. $item = ['code' => $userObj->code, 'avatar' => $userObj->avatar, 'nick' => $userObj->nick, 'invite_num' => $inviteNum];
  62. $diffNum = $previousNum - $inviteNum;
  63. if ($nowDate > $fakeStartObj) {
  64. if ($k == 1) {
  65. // 临近尾声
  66. $fakeInviteNum = $inviteNum;
  67. $fakeInviteNum += 7;
  68. $fakeUserCode = $fakeUsers[2];
  69. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  70. $fakeItem3 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  71. $fakeInviteNum += 15;
  72. $fakeUserCode = $fakeUsers[1];
  73. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  74. $fakeItem2 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  75. $fakeInviteNum += 29;
  76. $fakeUserCode = $fakeUsers[0];
  77. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  78. $fakeItem1 = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  79. $result[] = $fakeItem1;
  80. $result[] = $fakeItem2;
  81. $result[] = $fakeItem3;
  82. }
  83. } else {
  84. if ($k == $no1Position) {
  85. if ($diffNum > 1) {
  86. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  87. } else {
  88. $fakeInviteNum = $inviteNum;
  89. }
  90. $fakeUserCode = $fakeUsers[0];
  91. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  92. $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  93. $result[] = $fakeItem;
  94. } elseif ($k == $no2Position) {
  95. if ($diffNum > 1) {
  96. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  97. } else {
  98. $fakeInviteNum = $inviteNum;
  99. }
  100. $fakeUserCode = $fakeUsers[1];
  101. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  102. $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  103. $result[] = $fakeItem;
  104. } elseif ($k == $no3Position) {
  105. if ($diffNum > 1) {
  106. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  107. } else {
  108. $fakeInviteNum = $inviteNum;
  109. }
  110. $fakeUserCode = $fakeUsers[2];
  111. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  112. $fakeItem = ['code' => $fakeUserObj->code, 'avatar' => $fakeUserObj->avatar, 'nick' => $fakeUserObj->nick, 'invite_num' => $fakeInviteNum];
  113. $result[] = $fakeItem;
  114. }
  115. }
  116. $result[] = $item;
  117. $previousNum = $inviteNum;
  118. }
  119. $k++;
  120. }
  121. $arrLen = count($result);
  122. if (!empty($result) && $arrLen >= $limitNum) {
  123. $result = array_slice($result, 0, $limitNum, false);
  124. }
  125. }
  126. return $result;
  127. });
  128. if (!empty($result)) {
  129. foreach ($result as &$v) {
  130. $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
  131. }
  132. }
  133. return $this->jsonSuccess($result);
  134. }
  135. }