generated from panliang/owl-admin-starter
90 lines
2.7 KiB
PHP
90 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\{PartyUser, PartyCate, UserRank, CateRank};
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class RankController extends Controller
|
|
{
|
|
// 本季度排名
|
|
public function index(Request $request)
|
|
{
|
|
$request->validate([
|
|
// user: 党员, cate: 党支部
|
|
'type' => ['required', Rule::in(['user', 'cate'])]
|
|
]);
|
|
$type = $request->input('type', 'user');
|
|
$query = match($type) {
|
|
'user' => PartyUser::query(),
|
|
'cate' => PartyCate::query(),
|
|
};
|
|
$query->orderBy('current_score', 'desc');
|
|
if ($request->filled('limit')) {
|
|
$query->limit($request->input('limit'));
|
|
}
|
|
$list = $query->get();
|
|
$rankList = [];
|
|
foreach ($list as $index => $item) {
|
|
$rankList[] = [
|
|
'id' => $item->id,
|
|
'name' => $item->name,
|
|
'rank' => $index + 1,
|
|
'score' => $item->current_score,
|
|
];
|
|
}
|
|
|
|
return $this->response()->success($rankList);
|
|
}
|
|
|
|
// 获取已有的期数
|
|
public function dates(Request $request)
|
|
{
|
|
$request->validate([
|
|
// user: 党员排名期数, cate: 党支部排名期数
|
|
'type' => ['required', Rule::in(['user', 'cate'])]
|
|
]);
|
|
$type = $request->input('type', 'user');
|
|
$query = match($type) {
|
|
'user' => UserRank::query(),
|
|
'cate' => CateRank::query(),
|
|
};
|
|
$list = $query->select('sn')->groupBy('sn')->pluck('sn');
|
|
|
|
return $this->response()->success($list);
|
|
}
|
|
|
|
// 党员其他季度的排名记录
|
|
public function list(Request $request)
|
|
{
|
|
$request->validate([
|
|
// 期数
|
|
'sn' => 'required',
|
|
// user: 党员, cate: 党支部
|
|
'type' => ['required', Rule::in(['user', 'cate'])]
|
|
]);
|
|
$type = $request->input('type', 'user');
|
|
$query = match($type) {
|
|
'user' => UserRank::query(),
|
|
'cate' => CateRank::query(),
|
|
};
|
|
$list = $query->with([$type])->where('sn', $request->input('sn'))->orderBy('score', 'desc')->get();
|
|
$rankList = [];
|
|
foreach ($list as $index => $item) {
|
|
$rankList[] = [
|
|
'id' => $item->id,
|
|
'name' => match($type) {
|
|
'user' => $item->user?->name,
|
|
'cate' => $item->cate?->name,
|
|
},
|
|
'rank' => $index + 1,
|
|
'score' => $item->score,
|
|
];
|
|
}
|
|
|
|
return $this->response()->success($rankList);
|
|
}
|
|
}
|