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