| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- <?php
- namespace Modules\Web\Controllers;
- use App\Model\UserModel;
- use App\Repositories\Utils\M3u8CacheRepository;
- use Carbon\Carbon;
- use Psr\SimpleCache\CacheInterface;
- class PromotionController extends BaseController
- {
- /**
- * 20220910 H5活动
- */
- public function top20220910()
- {
- $cacheRepo = make(CacheInterface::class);
- $cacheTime = 1 * 60 * 60 - 1;
- $cacheKey = 'hd:20220910_top20';
- if (env('APP_ENV') != 'prod') {
- $startObj = Carbon::create(2022, 1, 2)->startOfDay();
- } else {
- $startObj = Carbon::create(2022, 9, 9)->startOfDay();
- // $startObj = Carbon::create(2022, 03, 01)->startOfDay();
- }
- $endObj = Carbon::create(2022, 10, 9)->startOfDay();
- $fakeNum = 3;
- $limitNum = 20;
- $fakeUsers = [];
- $fakeDoukuiUsers = [
- 'bdPY45', 'bXq7LV', 'Z4LmKQ',
- ];
- $fakeChujiUsers = [
- 'VWwW2D', 'VAG1vZ', 'ox2Jxb',
- ];
- if (preg_match('/doukui/i', env('APP_NAME'))) {
- $fakeUsers = $fakeDoukuiUsers;
- } else {
- $fakeUsers = $fakeChujiUsers;
- }
- $result = $cacheRepo->remember($cacheKey, $cacheTime, function () use ($startObj, $endObj, $fakeNum, $limitNum, $fakeUsers) {
- $result = [];
- $endAt = clone $endObj;
- $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();
- if ($lists->isNotEmpty()) {
- $nowDate = Carbon::now();
- $fakeStartObj = (clone $endAt)->subHours(5)->addMinutes(27);
- $diffDays = (clone $fakeStartObj)->diffInDays(Carbon::now());
- $no1Position = $diffDays + 1;
- $no2Position = $diffDays + 4;
- $no3Position = $diffDays + 6;
- $previousNum = 0;
- $firstNum = 0;
- $k = 1;
- foreach ($lists as $v1) {
- $userObj = UserModel::query()->where(['code' => $v1->parent_uid])->first(['id', 'code', 'nick', 'avatar']);
- if (!empty($userObj)) {
- $inviteNum = intval($v1->invite_num);
- $item = [
- 'code' => $userObj->code,
- 'avatar' => $userObj->avatar,
- 'nick' => $userObj->nick,
- 'invite_num' => $inviteNum,
- ];
- $diffNum = $previousNum - $inviteNum;
- if ($nowDate > $fakeStartObj) {
- if ($k == 1) {
- // 临近尾声
- $fakeInviteNum = $inviteNum;
- $fakeInviteNum += 7;
- $fakeUserCode = $fakeUsers[2];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem3 = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $fakeInviteNum += 15;
- $fakeUserCode = $fakeUsers[1];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem2 = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $fakeInviteNum += 29;
- $fakeUserCode = $fakeUsers[0];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem1 = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $result[] = $fakeItem1;
- $result[] = $fakeItem2;
- $result[] = $fakeItem3;
- }
- } else {
- if ($k == $no1Position) {
- if ($diffNum > 1) {
- $fakeInviteNum = $inviteNum + intval($diffNum / 2);
- } else {
- $fakeInviteNum = $inviteNum;
- }
- $fakeUserCode = $fakeUsers[0];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $result[] = $fakeItem;
- } elseif ($k == $no2Position) {
- if ($diffNum > 1) {
- $fakeInviteNum = $inviteNum + intval($diffNum / 2);
- } else {
- $fakeInviteNum = $inviteNum;
- }
- $fakeUserCode = $fakeUsers[1];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $result[] = $fakeItem;
- } elseif ($k == $no3Position) {
- if ($diffNum > 1) {
- $fakeInviteNum = $inviteNum + intval($diffNum / 2);
- } else {
- $fakeInviteNum = $inviteNum;
- }
- $fakeUserCode = $fakeUsers[2];
- $fakeUserObj = UserModel::query()->where(['code' => $fakeUserCode])->first(['id', 'code', 'nick', 'avatar']);
- $fakeItem = [
- 'code' => $fakeUserObj->code,
- 'avatar' => $fakeUserObj->avatar,
- 'nick' => $fakeUserObj->nick,
- 'invite_num' => $fakeInviteNum,
- ];
- $result[] = $fakeItem;
- }
- }
- $result[] = $item;
- $previousNum = $inviteNum;
- }
- $k++;
- }
- $arrLen = count($result);
- if (!empty($result) && $arrLen >= $limitNum) {
- $result = array_slice($result, 0, $limitNum, false);
- }
- }
- return $result;
- });
- if (!empty($result)) {
- foreach ($result as &$v) {
- $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
- }
- }
- return $this->jsonSuccess($result);
- }
- }
|