CaiWuXiTong/modules/EcommerceFinance/Http/Controllers/ThirdPartyWarehouseStorageSettlementExportController.php

50 lines
2.6 KiB
PHP

<?php
namespace Modules\EcommerceFinance\Http\Controllers;
use Illuminate\Http\Request;
use Modules\EcommerceFinance\Services\ThirdPartyWarehouseStorageSettlementService;
use Symfony\Component\HttpFoundation\StreamedResponse;
class ThirdPartyWarehouseStorageSettlementExportController
{
public function export(Request $request, ThirdPartyWarehouseStorageSettlementService $settlement): StreamedResponse
{
return $this->__invoke($request, $settlement);
}
public function __invoke(Request $request, ThirdPartyWarehouseStorageSettlementService $settlement): StreamedResponse
{
$filters = $request->only(['dimension', 'period', 'sku_code', 'product_name', 'supplier', 'category']);
$result = $settlement->settle($filters);
abort_unless($result['ready'] && $result['complete'], 422, $result['message'] ?? '核算资料尚未准备完成。');
$filename = '三方仓进销存仓储费核算-' . ($result['filters']['period'] ?? '2026-08') . '.csv';
return response()->streamDownload(function () use ($result): void {
$out = fopen('php://output', 'wb');
fwrite($out, "\xEF\xBB\xBF");
fputcsv($out, ['日期', '商品编码', '商品名称', '重量(kg)', '采购进仓', '销售出仓', '其它出库', '期末库存', '入库管理费', '出库费用', '仓储费', '合计', '报价生效日期']);
foreach ($result['rows'] as $row) {
fputcsv($out, [
$row['date'] ?? '', $row['sku_code'] ?? '', $row['product_name'] ?? '',
$row['weight_kg'], $row['purchase_in'] ?? 0, $row['sales_out'] ?? 0,
$row['other_out'] ?? 0, $row['closing_qty'] ?? 0,
number_format((float) ($row['inbound_fee'] ?? 0), 6, '.', ''),
number_format((float) ($row['outbound_fee'] ?? 0), 6, '.', ''),
number_format((float) ($row['storage_fee'] ?? 0), 6, '.', ''),
number_format((float) ($row['total_fee'] ?? 0), 6, '.', ''), $row['quote_effective_at'] ?? '',
]);
}
fputcsv($out, [
'合计', '', '', '', '', '', '', '',
number_format((float) $result['inbound_fee'], 2, '.', ''),
number_format((float) $result['outbound_fee'], 2, '.', ''),
number_format((float) $result['storage_fee'], 2, '.', ''),
number_format((float) $result['total_fee'], 2, '.', ''),
'',
]);
fclose($out);
}, $filename, ['Content-Type' => 'text/csv; charset=UTF-8']);
}
}