syncRealtime($page, 2000); } catch (\Throwable $e) { Log::error('third_game_sync_orders_failed', ['page' => $page, 'exception' => $e]); $this->error($e->getMessage()); return self::FAILURE; } if (empty($result['ok'])) { $message = (string) ($result['msg'] ?? '三方实时订单同步失败'); // The provider allows one realtime query per minute and the admin list shares that quota. Each // query covers the last 10 minutes, so a throttled run is skipped and the next run catches up. if (!empty($result['throttled'])) { $this->warn("page={$page} skipped: {$message}"); return self::SUCCESS; } Log::error('third_game_sync_orders_failed', ['page' => $page, 'message' => $message]); $this->error($message); return self::FAILURE; } $synced += (int) ($result['synced'] ?? 0); $this->line(sprintf( 'page=%d received=%d synced=%d unmatched=%d', $page, (int) ($result['received'] ?? 0), (int) ($result['synced'] ?? 0), (int) ($result['unmatched_orders'] ?? 0) )); if (empty($result['has_more'])) { break; } if ($page >= 1000) { $this->error('实时订单分页超过1000页,已停止同步'); return self::FAILURE; } $page++; } while (true); $this->info("实时订单同步完成,共写入或更新 {$synced} 条"); return self::SUCCESS; } }