平台订单:单笔对账明细CSV导出(支付回执+退款记录)
This commit is contained in:
@@ -413,6 +413,65 @@ class PlatformOrderController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出单笔订单的“对账明细”(支付回执 + 退款记录)CSV。
|
||||
* 用于运营线下对账沟通/留档,不依赖订单列表的筛选口径。
|
||||
*/
|
||||
public function exportLedger(Request $request, PlatformOrder $order): StreamedResponse
|
||||
{
|
||||
$this->ensurePlatformAdmin($request);
|
||||
|
||||
$order->loadMissing(['merchant', 'plan', 'siteSubscription']);
|
||||
|
||||
$paymentReceipts = (array) (data_get($order->meta, 'payment_receipts', []) ?? []);
|
||||
$refundReceipts = (array) (data_get($order->meta, 'refund_receipts', []) ?? []);
|
||||
|
||||
$filename = 'platform_order_' . $order->id . '_ledger_' . now()->format('Ymd_His') . '.csv';
|
||||
|
||||
return response()->streamDownload(function () use ($order, $paymentReceipts, $refundReceipts) {
|
||||
$out = fopen('php://output', 'w');
|
||||
|
||||
// UTF-8 BOM,避免 Excel 打开中文乱码
|
||||
fwrite($out, "\xEF\xBB\xBF");
|
||||
|
||||
// 订单摘要(两行)
|
||||
fputcsv($out, ['order_id', (string) $order->id]);
|
||||
fputcsv($out, ['order_no', (string) $order->order_no]);
|
||||
fputcsv($out, []);
|
||||
|
||||
// 明细表头
|
||||
fputcsv($out, ['record_type', 'channel', 'amount', 'biz_time', 'created_at', 'admin_id', 'note']);
|
||||
|
||||
foreach ($paymentReceipts as $r) {
|
||||
fputcsv($out, [
|
||||
'payment',
|
||||
(string) (data_get($r, 'channel') ?? ''),
|
||||
(string) (data_get($r, 'amount') ?? ''),
|
||||
(string) (data_get($r, 'paid_at') ?? ''),
|
||||
(string) (data_get($r, 'created_at') ?? ''),
|
||||
(string) (data_get($r, 'admin_id') ?? ''),
|
||||
(string) (data_get($r, 'note') ?? ''),
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($refundReceipts as $r) {
|
||||
fputcsv($out, [
|
||||
'refund',
|
||||
(string) (data_get($r, 'channel') ?? ''),
|
||||
(string) (data_get($r, 'amount') ?? ''),
|
||||
(string) (data_get($r, 'refunded_at') ?? ''),
|
||||
(string) (data_get($r, 'created_at') ?? ''),
|
||||
(string) (data_get($r, 'admin_id') ?? ''),
|
||||
(string) (data_get($r, 'note') ?? ''),
|
||||
]);
|
||||
}
|
||||
|
||||
fclose($out);
|
||||
}, $filename, [
|
||||
'Content-Type' => 'text/csv; charset=UTF-8',
|
||||
]);
|
||||
}
|
||||
|
||||
public function activateSubscription(Request $request, PlatformOrder $order, SubscriptionActivationService $service): RedirectResponse
|
||||
{
|
||||
$admin = $this->ensurePlatformAdmin($request);
|
||||
|
||||
Reference in New Issue
Block a user