- 复用已登记镜像 jiansun.dbo.jst_workOrderInfo,不新增上游链路 - 口径与聚工单「记账」视图一致:工单类型“记账”,状态待审核/已拒绝/待处理/处理中/已完成, 记账原因为厂家记账 12 项 + 仓库记账 5 项二级原因,发起时间 >= 2026-09-01;同一工单只取最新一版 - 新页面 供应商应付 → 厂家记账:筛选、记账金额合计、列设置、CSV 导出;首次同步未完成时明确提示 - 镜像索引迁移 (woTypeId, created, Id) 涉及:金额展示(只读)、镜像索引迁移;不涉及权限模型和上游写入。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N5KQeRJaLrbJY9iKNC5veV
45 lines
1.6 KiB
PHP
45 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Business;
|
|
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\EcommerceFinance\View\SupplierBookkeepingPageData;
|
|
|
|
class SupplierBookkeeping extends Controller
|
|
{
|
|
public function export(SupplierBookkeepingPageData $data)
|
|
{
|
|
$filters = $data->filters();
|
|
$columns = $data->exportColumns();
|
|
$file = tmpfile();
|
|
abort_if($file === false, 500, '无法创建导出文件。');
|
|
|
|
try {
|
|
fwrite($file, "\xEF\xBB\xBF");
|
|
fputcsv($file, array_values($columns));
|
|
foreach ($data->rows($filters) as $row) {
|
|
$values = [];
|
|
foreach (array_keys($columns) as $key) {
|
|
$values[] = $row[$key] ?? '';
|
|
}
|
|
fputcsv($file, array_map(static function (mixed $value): string {
|
|
$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(static function () use ($file): void {
|
|
fpassthru($file);
|
|
fclose($file);
|
|
}, SupplierBookkeepingPageData::TITLE . '-' . now()->format('YmdHis') . '.csv', ['Content-Type' => 'text/csv; charset=UTF-8']);
|
|
}
|
|
}
|