Files
water_new/modules/User/Http/Controllers/Api/Rank/IndexController.php
2023-03-08 09:16:04 +08:00

132 lines
3.4 KiB
PHP

<?php
namespace Modules\User\Http\Controllers\Api\Rank;
use App\Api\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Jason\Api\Api;
use Modules\User\Models\User;
use Modules\User\Traits\RankDataTrait;
class IndexController extends Controller
{
use RankDataTrait;
/**
* Notes: 总排行
*
* @Author: 玄尘
* @Date: 2022/8/17 15:10
* @param Request $request
* @return JsonResponse
*/
public function total(Request $request): JsonResponse
{
$dateBetween = [
'2022-06-01 00:00:00',
now()->toDateTimeString(),
];
$vipUsers = $this->getRankDataTrait($dateBetween);
$data = [];
$i = 1;
foreach ($vipUsers as $user) {
$data[] = [
'rank' => $i,
'avatar' => $user->info->avatar, //头像
'nickname' => $user->info->nickname,
'rate' => '---',
'number' => $user->countChild,
];
}
return $this->success([
'page_id' => 6,
'rand' => $data
]);
}
/**
* Notes: 推荐用户总排行
*
* @Author: 玄尘
* @Date: 2022/8/17 15:11
* @return JsonResponse
*/
public function totalUser(): JsonResponse
{
$user = Api::user();
$users = User::query()
->withCount('children')
->take(10)
->latest('children_count')
->get()
->map(function ($info) use ($user) {
return [
'user' => [
'user_id' => $info->id,
'username' => $info->username,
'nickname' => $info->info->nickname ?? '',
'avatar' => $info->info->avatar ?? '',
],
'is_my' => $info->id == $user->id,
'total' => $info->children_count,
];
})
->pad(10, [
'user' => [
'user_id' => 0,
'username' => '---',
'nickname' => '---',
'avatar' => '---',
],
'is_my' => false,
'total' => 0,
]);
$users = $users->toArray();
$i = 1;
$top = $other = [];
$myRank = 0;
foreach ($users as &$rank) {
$rank['rank'] = $i;
if ($rank['is_my']) {
$myRank = $i;
}
if ($i < 4) {
$top[] = $rank;
} else {
$other[] = $rank;
}
$i++;
}
$childrenCount = $user->children()->count();
if (! $myRank) {
$myRank = User::query()
->withCount('children')
->latest('children_count')
->where('children_count'.'>', $childrenCount)
->count();
}
$data = [
'user' => [
'username' => $user->username,
'nickname' => $user->info->nickname,
'avatar' => $user->info->avatar,
'total' => $user->sign->counts,
'rank' => $myRank ?: $myRank + 1,
],
'top' => $top,
'other' => $other,
];
return $this->success($data);
}
}