whereIn('status', $status_arr)->min('id'); while (true) { Order::query() ->where('id', '>=', $min_id) ->whereIn('status', $status_arr) ->whereNotNull('timeout') ->orderBy('id') ->chunk(100, function ($order) use (&$min_id) { foreach ($order as $v) { if (!is_null($v->timeout) && strtotime($v->timeout) < time()) { DB::beginTransaction(); try { //取消订单 $v->status = OrderStatus::CANCEL; $v->save(); //加回库存 Product::whereIn('id', explode(',', $v->product_ids))->increment('stock', $v->num); DB::commit(); $min_id = $v->id; } catch (\Exception $exception) { DB::rollBack(); $this->line("订单ID {$v->id} 错误:" . $exception->getMessage()); } } } }); $this->line('[' . date('Y-m-d H:i:s') . "] ID游标:$min_id ,等待下一个任务"); sleep(3); } return 0; } }