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('完成');
}
}