setName('procuremen:regen-pdf') ->addOption('ccydh', null, Option::VALUE_REQUIRED, '订单号,多个用英文逗号分隔') ->setDescription('Regenerate archive PDF for completed procuremen orders'); } protected function execute(Input $input, Output $output) { $raw = trim((string)$input->getOption('ccydh')); if ($raw === '') { $output->writeln('请传 --ccydh=订单号'); return; } $list = []; foreach (preg_split('/[,,\s]+/u', $raw) as $one) { $one = trim((string)$one); if ($one !== '') { $list[$one] = true; } } if ($list === []) { $output->writeln('订单号无效'); return; } foreach (array_keys($list) as $ccydh) { try { $rows = Db::table('purchase_order') ->where('CCYDH', $ccydh) ->field('id,scydgy_id,CCYDH,status,pdf_url') ->select(); } catch (\Throwable $e) { $output->writeln('' . $ccydh . ' 查询失败:' . $e->getMessage() . ''); continue; } if (!is_array($rows) || $rows === []) { $output->writeln('' . $ccydh . ' 未找到 purchase_order'); continue; } foreach ($rows as $po) { if (!is_array($po)) { continue; } $sid = (int)($po['scydgy_id'] ?? 0); $status = (string)($po['status'] ?? ''); $completed = ProcuremenStatus::isPoCompleted($status); $output->writeln(sprintf( '处理 %s scydgy_id=%d status=%s completed=%s', $ccydh, $sid, $status !== '' ? $status : '(空)', $completed ? 'yes' : 'no' )); // 强制按当前详情重存(含操作记录),不强制要求已完结标记 $path = Procuremen::regenerateArchivePdfWithoutAuth($sid, false); if ($path === '') { $output->writeln(' PDF 生成失败 scydgy_id=' . $sid . ''); } else { $output->writeln(' PDF 已更新:' . $path . ''); } } } $output->writeln('完成'); } }