validate([ 'start_at' => '', 'end_at' => '' ]); if (isset($params['start_at']) && isset($params['end_at'])) { $stats = Stat::where('record_at', '>=', $params['start_at']) ->where('record_at', '<', $params['end_at']) ->get() ->makeHidden(['record_at', 'created_at', 'updated_at', 'id', 'record_type']) ->toArray(); } else { $statisticalService = new StatisticalService(); return [ 'data' => $statisticalService->generateStatData() ]; } $stats = array_reduce($stats, function($carry, $item) { foreach($item as $key => $value) { if(isset($carry[$key]) && $carry[$key]) { $carry[$key] += $value; } else { $carry[$key] = $value; } } return $carry; }, []); return [ 'data' => $stats ]; } public function record(Request $request) { $request->validate([ 'type' => 'required|in:paid_total,commission_total,register_count', 'start_at' => '', 'end_at' => '' ]); $statisticalService = new StatisticalService(); $statisticalService->setStartAt($request->input('start_at')); $statisticalService->setEndAt($request->input('end_at')); return [ 'data' => $statisticalService->getStatRecord($request->input('type')) ]; } public function ranking(Request $request) { $request->validate([ 'type' => 'required|in:server_traffic_rank,user_consumption_rank,invite_rank', 'start_at' => '', 'end_at' => '', 'limit' => 'nullable|integer' ]); $statisticalService = new StatisticalService(); $statisticalService->setStartAt($request->input('start_at')); $statisticalService->setEndAt($request->input('end_at')); return [ 'data' => $statisticalService->getRanking($request->input('type'), $request->input('limit') ?? 20) ]; } }