validateData($data, [ 'date_from' => 'date', 'date_to' => 'date|after_or_equal:date_from', 'user_id' => 'integer|min:1', 'game_type' => 'string|max:50', ]); if ($validationErrors) { return $this->errorResponse('参数验证失败', $validationErrors, 422); } // 获取统计参数 $dateFrom = $data['date_from'] ?? now()->subDays(7)->toDateString(); $dateTo = $data['date_to'] ?? now()->toDateString(); $userId = $data['user_id'] ?? null; $gameType = $data['game_type'] ?? ''; // 调用Game模块服务获取统计数据 $stats = $this->getGameStats($dateFrom, $dateTo, $userId, $gameType); // 记录操作日志 $this->logAction('game.stats.get', [ 'date_from' => $dateFrom, 'date_to' => $dateTo, 'user_id' => $userId, 'game_type' => $gameType, ], $context); return $this->successResponse('获取游戏统计成功', $stats); } /** * 获取游戏统计数据 * * 这里应该调用Game模块的实际服务 * * @param string $dateFrom * @param string $dateTo * @param int|null $userId * @param string $gameType * @return array */ protected function getGameStats(string $dateFrom, string $dateTo, ?int $userId, string $gameType): array { // TODO: 这里应该调用Game模块的服务 // 例如: return app(GameService::class)->getStats($dateFrom, $dateTo, $userId, $gameType); // 暂时返回示例数据,等待与Game模块集成 return [ 'overview' => [ 'total_players' => rand(5000, 10000), 'online_players' => rand(500, 1500), 'total_games' => rand(50000, 100000), 'active_games' => rand(100, 500), 'daily_active_users' => rand(2000, 5000), 'new_players_today' => rand(50, 200), ], 'game_types' => [ [ 'type' => 'farm', 'name' => '农场游戏', 'players' => rand(1000, 3000), 'games_played' => rand(10000, 30000), 'avg_session_time' => rand(300, 1800), // 秒 ], [ 'type' => 'pet', 'name' => '宠物游戏', 'players' => rand(800, 2500), 'games_played' => rand(8000, 25000), 'avg_session_time' => rand(600, 2400), ], [ 'type' => 'shop', 'name' => '商店系统', 'players' => rand(1500, 4000), 'games_played' => rand(15000, 40000), 'avg_session_time' => rand(180, 900), ], ], 'daily_stats' => $this->generateDailyStats($dateFrom, $dateTo), 'user_stats' => $userId ? $this->getUserGameStats($userId) : null, 'period' => [ 'from' => $dateFrom, 'to' => $dateTo, ], ]; } /** * 生成每日统计数据 * * @param string $dateFrom * @param string $dateTo * @return array */ protected function generateDailyStats(string $dateFrom, string $dateTo): array { $stats = []; $start = \Carbon\Carbon::parse($dateFrom); $end = \Carbon\Carbon::parse($dateTo); while ($start <= $end) { $stats[] = [ 'date' => $start->toDateString(), 'active_users' => rand(1000, 3000), 'new_users' => rand(20, 100), 'games_played' => rand(5000, 15000), 'total_playtime' => rand(50000, 150000), // 秒 ]; $start->addDay(); } return $stats; } /** * 获取用户游戏统计 * * @param int $userId * @return array */ protected function getUserGameStats(int $userId): array { return [ 'user_id' => $userId, 'total_games' => rand(100, 1000), 'total_playtime' => rand(10000, 100000), // 秒 'favorite_game_type' => ['farm', 'pet', 'shop'][rand(0, 2)], 'level' => rand(1, 100), 'achievements' => rand(5, 50), 'last_played' => now()->subHours(rand(1, 48))->toISOString(), ]; } }