导出任务取消:点击后立即置为「已取消」,后台下一个检查点停止并删除半成品文件

This commit is contained in:
yueyang 2026-10-08 15:34:01 +08:00
parent ad65f0cc75
commit 6255179bf5
2 changed files with 8 additions and 2 deletions

View File

@ -67,7 +67,6 @@ class RunAccountBillsExportTask extends Command
));
$written++;
if ($written % 2000 === 0) {
$task = $tasks->patch($task, ['status' => 'running', 'rows' => $written]);
// 用户在弹窗里点了「取消」:停止导出并删掉半成品文件。
$fresh = $tasks->find((int) $task['user_id'], (string) $task['token']);
if (! empty($fresh['cancel'])) {
@ -78,6 +77,7 @@ class RunAccountBillsExportTask extends Command
return self::SUCCESS;
}
$task = $tasks->patch($task, ['status' => 'running', 'rows' => $written]);
}
}
fclose($csv);

View File

@ -451,7 +451,13 @@ class AccountBills extends Controller
$status = (string) ($task['status'] ?? '');
abort_if(in_array($status, ['done', 'failed', 'cancelled'], true), 409, '该任务已结束,无需取消。');
$tasks->patch($task, ['cancel' => true]);
// 立刻显示「已取消」(排队中的任务没有进程去改状态,必须在这里定稿);
// 运行中的任务会在下一个检查点停下并删掉半成品文件。
$tasks->patch($task, [
'cancel' => true,
'status' => 'cancelled',
'finished_at' => \Modules\EcommerceFinance\Services\AccountBillsExportTasks::beijingNow(),
]);
return response()->json(['status' => 'ok'], 200, ['Cache-Control' => 'private, no-store']);
}