logger = $logger; } public function __invoke() { // 获取需要处理的订单ID列表 判断是否能够结束 $currentTime = date('Y-m-d H:i:s'); $orderIds = Order::where('status', 1) //已经审核,等待结束 ->where('edtime', '<=', $currentTime) ->pluck('id') ->toArray(); //获取需要处理的订单id,判断是否生效 $orderIdsTO2 = Order::where('status', 1) //已经审核,等待开始 ->where('sttime', '<=', $currentTime) ->where('edtime', '>=', $currentTime) ->pluck('id') ->toArray(); //单个处理 // foreach ($orderIds as $orderId) { // $data = ['id' => $orderId]; // $this->singleOverOrder($data); // } // 批量处理结束订单 if ($orderIds) { $this->logger->info('需要处理的订单ID列表:' . implode(', ', $orderIds)); $this->OverOder($orderIds); } if ($orderIdsTO2) { $this->logger->info('需要处理的订单ID列表:' . implode(', ', $orderIdsTO2)); $this->startOder($orderIdsTO2); } //过期时间 //$exploredTime = date('Y-m-d H:i:s', (time() + 60 * 60 * 2)); // 获取所有状态为6的订单 $orders = Order::where('status', 6) // 未审核等待过期 ->get(); $expiredOrderIds = []; foreach ($orders as $order) { // 计算 created_at + 24小时 $exploredTime = date('Y-m-d H:i:s', strtotime($order->created_at . ' +24 hours')); $this->logger->info('exploredTime: ' . $exploredTime . ' 当前时间' . $order->created_at); // 检查当前时间是否大于 exploredTime if (time() > strtotime($exploredTime)) { $expiredOrderIds[] = $order->id; } } if ($expiredOrderIds) { $this->logger->info('需要处理的订单ID列表:' . implode(', ', $expiredOrderIds)); //单个处理 // 获取需要处理的订单ID列表 判断是否能够过期 $this->ExpiredOrder($expiredOrderIds); } } /** * 处理单个订单是否结束 */ private function singleOverOrder(array $data) { $order = Order::where('id', $data['id'])->first(); if (empty($order)) { $this->logger->warning("没有找到订单ID: {$data['id']}"); return; } Db::beginTransaction(); try { $order->status = 7; $order->ad_status = 7; $order->save(); //获取 order_ad 表中的记录 $orderAds = OrderAd::where('order_id', $data['id'])->get(); if ($orderAds->isEmpty()) { $this->logger->warning("没有找到订单ID: {$data['id']} 的 order_ad 记录"); return; } //获取 order_ad 表中的记录 OrderAd::where('order_id', $data['id']) ->update(['status' => 7]); //在ad表中删除的数据 Ad::where('order_id', $data['id'])->delete(); Db::commit(); } catch (\Exception $e) { Db::rollBack(); $this->logger->error("处理订单ID: {$data['id']} 时发生错误: " . $e->getMessage()); } } private function startOder(array $data): void { Db::beginTransaction(); try { //ad 变更状态为已经审核但是不生效,或者删除订单,或者加入别的状态:比如过期 OrderAd::whereIn('order_id', $data)->update(['status' => 1, 'ad_status' => 8]); OrderAd::whereIn('order_id', $data)->update(['status' => 1]); $pid = OrderAd::whereIn('order_id', $data)->pluck('pid')->toArray(); Ad::whereIn('pid', $pid)->update(['status' => 1]); Db::commit(); } catch (\Exception $e) { Db::rollBack(); $this->logger->error("处理启用订单ID: {$data['id']} 时发生错误: " . $e->getMessage()); } } private function OverOder(array $data): void { Db::beginTransaction(); try { //设置订单状态 Order::whereIn('id', $data)->update(['status' => 7, 'ad_status' => 7]); //设置广告状态 OrderAd::whereIn('order_id', $data)->update(['status' => 7]); //ad 变更状态为已经审核但是不生效,或者删除订单,或者加入别的状态:比如过期 $pid = OrderAd::whereIn('order_id', $data)->pluck('pid')->toArray(); Ad::whereIn('pid', $pid)->update(['status' => 2]); Db::commit(); } catch (\Exception $e) { Db::rollBack(); $this->logger->error("处理结束订单ID: {$data['id']} 时发生错误: " . $e->getMessage()); } } private function ExpiredOrder(array $data): void { Db::beginTransaction();try { //设置订单状态 Order::whereIn('id', $data)->update(['status' => 5, 'ad_status' => 5]); //设置广告状态 OrderAd::whereIn('order_id', $data)->update(['status' => 5]); Db::commit(); } catch (\Exception $e) { Db::rollBack(); $this->logger->error("处理过期订单ID: {$data['id']} 时发生错误: " . $e->getMessage()); } } }