filters(); $columns = $data->exportColumns(); $file = tmpfile(); abort_if($file === false, 500, '无法创建导出文件。'); try { fwrite($file, "\xEF\xBB\xBF"); fputcsv($file, ['业务月份', '发货记录ID', '仓库', ...array_values($columns)]); foreach ($data->rows($filters) as $row) { if ($filters['state'] !== 'all' && $filters['state'] !== $row['state']) continue; $cells = array_merge($row, ['courier' => ($row['express_name1'] ?? '') ?: ($row['express_name2'] ?? ''), 'freight' => $row['freight_cents'] === null ? '待核实' : number_format($row['freight_cents'] / 100, 2, '.', ''), 'state' => SupplierAccessoryFreightMatcher::STATES[$row['state']], 'deduction' => number_format($row['deduction_cents'] / 100, 2, '.', '')]); $values = [$filters['month'], $row['source_id'], \Modules\EcommerceFinance\Services\AccessoryReshipMatcher::WAREHOUSE]; foreach ($columns as $key => $label) $values[] = $cells[$key]; fputcsv($file, array_map(static function ($value) { $value = (string) $value; // 纯数字标识保留文本,防止 Excel 截断长单号;同时阻止公式执行。 return preg_match('/^[=+\-@\t\r\n]|^\d{12,}$/u', $value) ? "'" . $value : $value; }, $values)); } rewind($file); } catch (\Throwable $exception) { fclose($file); report($exception); abort(503, '资料读取失败,未生成不完整的扣款明细,请稍后重试。'); } return response()->streamDownload(function () use ($file) { fpassthru($file); fclose($file); }, SupplierAccessoryFreightPageData::TITLE . '-' . $filters['month'] . '.csv', ['Content-Type' => 'text/csv; charset=UTF-8']); } }