| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- namespace App\Module\OpenAPI\Handlers\Game;
- use App\Module\OpenAPI\Handlers\BaseHandler;
- use App\Module\OpenAPI\Services\ScopeService;
- use App\Module\OpenAPI\Enums\SCOPE_TYPE;
- use Illuminate\Http\JsonResponse;
- /**
- * 游戏统计Handler
- *
- * 处理获取游戏统计数据的业务逻辑
- */
- class GameStatsHandler extends BaseHandler
- {
- public function __construct(ScopeService $scopeService)
- {
- parent::__construct($scopeService);
- }
- /**
- * 获取所需的权限范围
- *
- * @return SCOPE_TYPE[]
- */
- public function getRequiredScopes(): array
- {
- return [SCOPE_TYPE::GAME_READ];
- }
- /**
- * 处理获取游戏统计请求
- *
- * @param array $data 请求数据
- * @param array $context 上下文信息
- * @return JsonResponse
- */
- protected function process(array $data, array $context = []): JsonResponse
- {
- // 验证请求参数
- $validationErrors = $this->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(),
- ];
- }
- }
|