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); } }