setName('shopro:print-retry') ->addOption('order-id', null, Option::VALUE_REQUIRED, 'failed print task order id') ->addOption('all', null, Option::VALUE_NONE, 'retry all failed print tasks') ->setDescription('Requeue failed Shopro receipt print tasks'); } protected function execute(Input $input, Output $output) { $orderId = (int)$input->getOption('order-id'); $all = (bool)$input->getOption('all'); if (!$orderId && !$all) { $output->error('Use --order-id= or --all.'); return 1; } $staleBefore = time() - 300; $query = Db::name('shopro_order_print_task') ->whereRaw('(status = -1 OR (status = 2 AND updated_at < ' . $staleBefore . '))'); if ($orderId) { $query->where('order_id', $orderId); } $tasks = $query->select(); foreach ($tasks as $task) { Db::name('shopro_order_print_task')->where('id', $task['id'])->update([ 'status' => 0, 'updated_at' => time(), 'last_error' => '', ]); \think\Queue::push('\\addons\\shopro\\job\\OrderPrint@handle', ['order_id' => $task['order_id']], 'shopro-high'); } $output->info('Requeued ' . count($tasks) . ' receipt print task(s).'); return 0; } }