__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']); } }