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 current(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(); $user = auth('api')->user(); $rank = ['score' => '-', 'rank' => '-']; foreach ($list as $index => $item) { if ($item->id == match($type) { 'user' => $user->id, 'cate' => $user->cate_id }) { $rank['score'] = $item->score; $rank['rank'] = $index + 1; } } return $this->response()->success($rank); } // 获取已有的期数 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); } public function currentList(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->where('sn', $request->input('sn'))->orderBy('score', 'desc')->get(); $user = auth('api')->user(); $rank = ['score' => '-', 'rank' => '-']; foreach ($list as $index => $item) { if (match($type) { 'user' => $item->user_id == $user->id, 'cate' => $item->cate_id == $user->cate_id, }) { $rank['score'] = $item->score; $rank['rank'] = $index + 1; } } return $this->response()->success($rank); } }