diff --git a/app/Console/Commands/RunAccountBillsExportTask.php b/app/Console/Commands/RunAccountBillsExportTask.php index a18bf71a..e57835f0 100644 --- a/app/Console/Commands/RunAccountBillsExportTask.php +++ b/app/Console/Commands/RunAccountBillsExportTask.php @@ -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); diff --git a/modules/EcommerceFinance/Http/Controllers/AccountBills.php b/modules/EcommerceFinance/Http/Controllers/AccountBills.php index a3361f78..6caeeb14 100644 --- a/modules/EcommerceFinance/Http/Controllers/AccountBills.php +++ b/modules/EcommerceFinance/Http/Controllers/AccountBills.php @@ -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']); }