PromotionController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. /**
  10. * 20220910 H5活动
  11. */
  12. public function top20220910()
  13. {
  14. $cacheRepo = make(CacheInterface::class);
  15. $cacheTime = 1 * 60 * 60 - 1;
  16. $cacheKey = 'hd:20220910_top20';
  17. if (env('APP_ENV') != 'prod') {
  18. $startObj = Carbon::create(2022, 1, 2)->startOfDay();
  19. } else {
  20. $startObj = Carbon::create(2022, 9, 9)->startOfDay();
  21. // $startObj = Carbon::create(2022, 03, 01)->startOfDay();
  22. }
  23. $endObj = Carbon::create(2022, 10, 9)->startOfDay();
  24. $fakeNum = 3;
  25. $limitNum = 20;
  26. $fakeUsers = [];
  27. $fakeDoukuiUsers = [
  28. 'bdPY45', 'bXq7LV', 'Z4LmKQ',
  29. ];
  30. $fakeChujiUsers = [
  31. 'VWwW2D', 'VAG1vZ', 'ox2Jxb',
  32. ];
  33. if (preg_match('/doukui/i', env('APP_NAME'))) {
  34. $fakeUsers = $fakeDoukuiUsers;
  35. } else {
  36. $fakeUsers = $fakeChujiUsers;
  37. }
  38. $result = $cacheRepo->remember($cacheKey, $cacheTime, function () use ($startObj, $endObj, $fakeNum, $limitNum, $fakeUsers) {
  39. $result = [];
  40. $endAt = clone $endObj;
  41. $lists = UserModel::query()
  42. ->distinct()
  43. ->where('parent_uid', '!=', '')
  44. ->whereBetween('created_at', [$startObj, $endObj])
  45. ->groupBy(['parent_uid'])
  46. ->orderByDesc('invite_num')
  47. ->orderBy('id', 'ASC')
  48. ->take($limitNum)
  49. ->selectRaw('parent_uid, count(id) AS `invite_num`')
  50. ->get();
  51. if ($lists->isNotEmpty()) {
  52. $nowDate = Carbon::now();
  53. $fakeStartObj = (clone $endAt)->subHours(5)->addMinutes(27);
  54. $diffDays = (clone $fakeStartObj)->diffInDays(Carbon::now());
  55. $no1Position = $diffDays + 1;
  56. $no2Position = $diffDays + 4;
  57. $no3Position = $diffDays + 6;
  58. $previousNum = 0;
  59. $firstNum = 0;
  60. $k = 1;
  61. foreach ($lists as $v1) {
  62. $userObj = UserModel::query()->where(['code' => $v1->parent_uid])->first(['id', 'code', 'nick', 'avatar']);
  63. if (!empty($userObj)) {
  64. $inviteNum = intval($v1->invite_num);
  65. $item = [
  66. 'code' => $userObj->code,
  67. 'avatar' => $userObj->avatar,
  68. 'nick' => $userObj->nick,
  69. 'invite_num' => $inviteNum,
  70. ];
  71. $diffNum = $previousNum - $inviteNum;
  72. if ($nowDate > $fakeStartObj) {
  73. if ($k == 1) {
  74. // 临近尾声
  75. $fakeInviteNum = $inviteNum;
  76. $fakeInviteNum += 7;
  77. $fakeUserCode = $fakeUsers[2];
  78. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  79. $fakeItem3 = [
  80. 'code' => $fakeUserObj->code,
  81. 'avatar' => $fakeUserObj->avatar,
  82. 'nick' => $fakeUserObj->nick,
  83. 'invite_num' => $fakeInviteNum,
  84. ];
  85. $fakeInviteNum += 15;
  86. $fakeUserCode = $fakeUsers[1];
  87. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  88. $fakeItem2 = [
  89. 'code' => $fakeUserObj->code,
  90. 'avatar' => $fakeUserObj->avatar,
  91. 'nick' => $fakeUserObj->nick,
  92. 'invite_num' => $fakeInviteNum,
  93. ];
  94. $fakeInviteNum += 29;
  95. $fakeUserCode = $fakeUsers[0];
  96. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  97. $fakeItem1 = [
  98. 'code' => $fakeUserObj->code,
  99. 'avatar' => $fakeUserObj->avatar,
  100. 'nick' => $fakeUserObj->nick,
  101. 'invite_num' => $fakeInviteNum,
  102. ];
  103. $result[] = $fakeItem1;
  104. $result[] = $fakeItem2;
  105. $result[] = $fakeItem3;
  106. }
  107. } else {
  108. if ($k == $no1Position) {
  109. if ($diffNum > 1) {
  110. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  111. } else {
  112. $fakeInviteNum = $inviteNum;
  113. }
  114. $fakeUserCode = $fakeUsers[0];
  115. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  116. $fakeItem = [
  117. 'code' => $fakeUserObj->code,
  118. 'avatar' => $fakeUserObj->avatar,
  119. 'nick' => $fakeUserObj->nick,
  120. 'invite_num' => $fakeInviteNum,
  121. ];
  122. $result[] = $fakeItem;
  123. } elseif ($k == $no2Position) {
  124. if ($diffNum > 1) {
  125. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  126. } else {
  127. $fakeInviteNum = $inviteNum;
  128. }
  129. $fakeUserCode = $fakeUsers[1];
  130. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  131. $fakeItem = [
  132. 'code' => $fakeUserObj->code,
  133. 'avatar' => $fakeUserObj->avatar,
  134. 'nick' => $fakeUserObj->nick,
  135. 'invite_num' => $fakeInviteNum,
  136. ];
  137. $result[] = $fakeItem;
  138. } elseif ($k == $no3Position) {
  139. if ($diffNum > 1) {
  140. $fakeInviteNum = $inviteNum + intval($diffNum / 2);
  141. } else {
  142. $fakeInviteNum = $inviteNum;
  143. }
  144. $fakeUserCode = $fakeUsers[2];
  145. $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
  146. $fakeItem = [
  147. 'code' => $fakeUserObj->code,
  148. 'avatar' => $fakeUserObj->avatar,
  149. 'nick' => $fakeUserObj->nick,
  150. 'invite_num' => $fakeInviteNum,
  151. ];
  152. $result[] = $fakeItem;
  153. }
  154. }
  155. $result[] = $item;
  156. $previousNum = $inviteNum;
  157. }
  158. $k++;
  159. }
  160. $arrLen = count($result);
  161. if (!empty($result) && $arrLen >= $limitNum) {
  162. $result = array_slice($result, 0, $limitNum, false);
  163. }
  164. }
  165. return $result;
  166. });
  167. if (!empty($result)) {
  168. foreach ($result as &$v) {
  169. $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
  170. }
  171. }
  172. return $this->jsonSuccess($result);
  173. }
  174. }