sort() ->simplePaginate($request->query('per_page', 20)); return $this->success(['activities' => ActivityResource::collection($activities)->resolve()]); } public function show(Activity $activity, Request $request) { $resource = ActivityResource::make($activity); //判断当前用户是否在该活动有奖品 $resource->offsetSet('has_gift', UserActivity::where([ 'user_id' => $request->user()->id, 'activity_id' => $activity->id ])->value('has_gift') ?? 0); return $resource; } public function rankList(Request $request) { $activityId = $request->input('activity_id', 0); //获取排行表 $list = UserActivity::with('user')->where('activity_id', $activityId)->where('mark', '>', 0)->sort()->limit(30)->get(); //获取当前排名; $userActivity = UserActivity::where([ 'user_id' => $request->user()->id, 'activity_id' => $activityId, ])->first(); $rankNumber = null; if($userActivity?->mark > 0){ //计算自己的排名 $markNumber = UserActivity::where('activity_id', $activityId)->where('mark', '>', $userActivity->mark)->sort()->count(); $rightTimesNumber = UserActivity::where('activity_id', $activityId)->where('mark', '=', $userActivity->mark)->where('right_times', '>', $userActivity->right_times)->count(); $joinAtNumber = UserActivity::where('activity_id', $activityId)->where([ 'mark' =>$userActivity->mark, 'right_times' => $userActivity->right_times ])->where('last_join_at', '<', $userActivity->last_join_at)->count(); $rankNumber = $markNumber + $rightTimesNumber + $joinAtNumber + 1; } return $this->success(['rank_list' => UserActivityResource::collection($list)->resolve(), 'rank_number'=>$rankNumber]); } public function latestRankList(Request $request) { $activity = Activity::show()->sort()->first(); $activityId = $activity?->id ?? 0; //获取排行表 $list = UserActivity::with('user')->where('activity_id', $activityId)->where('mark', '>', 0)->sort()->limit(30)->get(); //获取当前排名; $userActivity = UserActivity::where([ 'user_id' => $request->user()->id, 'activity_id' => $activityId, ])->first(); $rankNumber = null; if($userActivity?->mark > 0){ //计算自己的排名 $markNumber = UserActivity::where('activity_id', $activityId)->where('mark', '>', $userActivity->mark)->sort()->count(); $rightTimesNumber = UserActivity::where('activity_id', $activityId)->where('mark', '=', $userActivity->mark)->where('right_times', '>', $userActivity->right_times)->count(); $joinAtNumber = UserActivity::where('activity_id', $activityId)->where([ 'mark' =>$userActivity->mark, 'right_times' => $userActivity->right_times ])->where('last_join_at', '<', $userActivity->last_join_at)->count(); $rankNumber = $markNumber + $rightTimesNumber + $joinAtNumber + 1; } return $this->success([ 'activity'=> ActivityResource::make($activity)->resolve(), 'rank_list' => UserActivityResource::collection($list)->resolve(), 'rank_number'=>$rankNumber, ]); } }