generated from panliang/owl-admin-starter
91 lines
2.8 KiB
PHP
91 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\{PartyCate, CateRank};
|
|
|
|
class CateRankController extends Controller
|
|
{
|
|
// 支部排名
|
|
public function index(Request $request)
|
|
{
|
|
$query = PartyCate::withCount(['users']);
|
|
if ($request->filled('limit')) {
|
|
$query->limit($request->input('limit'));
|
|
}
|
|
|
|
$user = auth('api')->user();
|
|
// 当前用户所在的支部排名
|
|
$current = ['score' => '-', 'rank' => '-', 'cate' => ''];
|
|
|
|
$list = $query->get();
|
|
$rankList = collect();
|
|
foreach ($list as $item) {
|
|
$rankList->push([
|
|
'id' => $item->id,
|
|
'name' => $item->name,
|
|
'count' => $item->users_count,
|
|
'score' => floor($item->current_score / $item->users_count),
|
|
]);
|
|
}
|
|
$rankList = $rankList->sortByDesc('score');
|
|
$rankList = $rankList->values()->map(function ($item, $index) use ($user, &$current) {
|
|
$item['rank'] = $index + 1;
|
|
if ($user && $item['id'] == $user->cate_id) {
|
|
$current['cate'] = $item['name'];
|
|
$current['rank'] = $item['rank'];
|
|
$current['score'] = $item['score'];
|
|
}
|
|
return $item;
|
|
});
|
|
|
|
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
|
}
|
|
|
|
// 党支部排名期数
|
|
public function dates()
|
|
{
|
|
$query = CateRank::query();
|
|
$list = $query->select('sn')->groupBy('sn')->pluck('sn');
|
|
|
|
return $this->response()->success($list);
|
|
}
|
|
|
|
// 党支部其他季度的排名记录
|
|
public function list(Request $request)
|
|
{
|
|
$request->validate([
|
|
// 期数
|
|
'sn' => 'required',
|
|
]);
|
|
$type = $request->input('column', 'avg_score');
|
|
$list = CateRank::with(['cate'])
|
|
->where('sn', $request->input('sn'))
|
|
->orderBy($type, 'desc')
|
|
->get();
|
|
$rankList = [];
|
|
$user = auth('api')->user();
|
|
// 当前用户所在的支部排名
|
|
$current = ['score' => '-', 'rank' => '-', 'cate' => ''];
|
|
foreach ($list as $index => $item) {
|
|
$rankItem = [
|
|
'id' => $item->id,
|
|
'name' => $item->cate?->name,
|
|
'rank' => $index + 1,
|
|
'score' => $item->$type,
|
|
];
|
|
$rankList[] = $rankItem;
|
|
|
|
if ($user && $rankItem['id'] == $user->cate_id) {
|
|
$current['cate'] = $rankItem['name'];
|
|
$current['rank'] = $rankItem['rank'];
|
|
$current['score'] = $rankItem['score'];
|
|
}
|
|
}
|
|
|
|
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
|
}
|
|
}
|