50 lines
2.6 KiB
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']);
|
|
}
|
|
}
|