option('type'); $limit = (int) $this->option('limit'); $useQueue = $this->option('queue'); $dryRun = $this->option('dry-run'); $this->info("开始处理Transfer订单 (类型: {$type}, 限制: {$limit})"); if ($dryRun) { $this->warn('*** 这是一次试运行,不会实际处理订单 ***'); } $totalProcessed = 0; try { switch ($type) { case 'orders': $totalProcessed = $this->processOrders($limit, $useQueue, $dryRun); break; case 'callbacks': $totalProcessed = $this->processCallbacks($limit, $useQueue, $dryRun); break; case 'all': default: $ordersProcessed = $this->processOrders($limit, $useQueue, $dryRun); $callbacksProcessed = $this->processCallbacks($limit - $ordersProcessed, $useQueue, $dryRun); $totalProcessed = $ordersProcessed + $callbacksProcessed; break; } $this->info("处理完成,共处理 {$totalProcessed} 个项目"); return 0; } catch (\Exception $e) { $this->error("处理失败: " . $e->getMessage()); return 1; } } /** * 处理待处理的订单 */ private function processOrders(int $limit, bool $useQueue, bool $dryRun): int { $this->line('正在查找待处理的订单...'); // 查找需要处理的订单 $orders = TransferOrder::where('status', TransferStatus::PROCESSING) ->where('created_at', '>', now()->subHours(24)) ->orderBy('created_at') ->limit($limit) ->get(); if ($orders->isEmpty()) { $this->info('没有找到待处理的订单'); return 0; } $this->info("找到 {$orders->count()} 个待处理的订单"); if ($dryRun) { $this->table( ['ID', '类型', '状态', '应用', '金额', '创建时间'], $orders->map(function ($order) { return [ $order->id, $order->type->getDescription(), $order->status->getDescription(), $order->transferApp->title, $order->amount, $order->created_at->format('Y-m-d H:i:s') ]; }) ); return $orders->count(); } $processed = 0; $progressBar = $this->output->createProgressBar($orders->count()); $progressBar->start(); foreach ($orders as $order) { try { if ($useQueue) { // 使用队列处理 ProcessTransferOrderJob::dispatch($order->id, 'query'); $this->line(" 订单 {$order->id} 已加入队列"); } else { // 直接处理 if ($order->isTransferOut()) { $success = OrderLogic::queryTransferOutStatus($order); } else { $success = OrderLogic::queryTransferInStatus($order); } if ($success) { $this->line(" 订单 {$order->id} 处理成功"); } else { $this->line(" 订单 {$order->id} 处理失败"); } } $processed++; $progressBar->advance(); } catch (\Exception $e) { $this->error(" 订单 {$order->id} 处理异常: " . $e->getMessage()); } } $progressBar->finish(); $this->line(''); return $processed; } /** * 处理待回调的订单 */ private function processCallbacks(int $limit, bool $useQueue, bool $dryRun): int { if ($limit <= 0) { return 0; } $this->line('正在查找待回调的订单...'); // 查找需要回调的订单 $orders = TransferOrder::where('status', TransferStatus::PROCESSING) ->whereHas('transferApp', function ($query) { $query->whereNotNull('order_callback_url'); }) ->where('created_at', '>', now()->subHours(24)) ->where('created_at', '<', now()->subMinutes(5)) // 5分钟前创建的订单 ->orderBy('created_at') ->limit($limit) ->get(); if ($orders->isEmpty()) { $this->info('没有找到待回调的订单'); return 0; } $this->info("找到 {$orders->count()} 个待回调的订单"); if ($dryRun) { $this->table( ['ID', '类型', '状态', '回调URL', '创建时间'], $orders->map(function ($order) { return [ $order->id, $order->type->getDescription(), $order->status->getDescription(), $order->transferApp->order_callback_url, $order->created_at->format('Y-m-d H:i:s') ]; }) ); return $orders->count(); } $processed = 0; $progressBar = $this->output->createProgressBar($orders->count()); $progressBar->start(); foreach ($orders as $order) { try { if ($useQueue) { // 使用队列处理 SendCallbackJob::dispatch($order->id); $this->line(" 订单 {$order->id} 回调已加入队列"); } else { // 直接处理 $success = CallbackLogic::sendCallback($order); if ($success) { $this->line(" 订单 {$order->id} 回调发送成功"); } else { $this->line(" 订单 {$order->id} 回调发送失败"); } } $processed++; $progressBar->advance(); } catch (\Exception $e) { $this->error(" 订单 {$order->id} 回调异常: " . $e->getMessage()); } } $progressBar->finish(); $this->line(''); return $processed; } }