diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index e0ea3ec..83c167c 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -457,6 +457,22 @@ class PlatformOrderController extends Controller fputcsv($out, ['payment_status', (string) ($order->payment_status ?? '')]); fputcsv($out, ['payable_amount', number_format((float) ($order->payable_amount ?? 0), 2, '.', '')]); fputcsv($out, ['paid_amount', number_format((float) ($order->paid_amount ?? 0), 2, '.', '')]); + + // 汇总字段:对账/退款快速口径 + $receiptTotal = 0.0; + foreach ($paymentReceipts as $r) { + $receiptTotal += (float) (data_get($r, 'amount') ?? 0); + } + $refundTotal = 0.0; + foreach ($refundReceipts as $r) { + $refundTotal += (float) (data_get($r, 'amount') ?? 0); + } + $delta = $receiptTotal - (float) ($order->paid_amount ?? 0); + + fputcsv($out, ['receipt_total', number_format($receiptTotal, 2, '.', '')]); + fputcsv($out, ['refund_total', number_format($refundTotal, 2, '.', '')]); + fputcsv($out, ['reconcile_delta', number_format($delta, 2, '.', '')]); + fputcsv($out, ['placed_at', (string) (optional($order->placed_at)->format('Y-m-d H:i:s') ?? '')]); fputcsv($out, ['paid_at', (string) (optional($order->paid_at)->format('Y-m-d H:i:s') ?? '')]); fputcsv($out, ['activated_at', (string) (optional($order->activated_at)->format('Y-m-d H:i:s') ?? '')]); diff --git a/tests/Feature/AdminPlatformOrderExportLedgerTest.php b/tests/Feature/AdminPlatformOrderExportLedgerTest.php index 6d4674f..4a67bba 100644 --- a/tests/Feature/AdminPlatformOrderExportLedgerTest.php +++ b/tests/Feature/AdminPlatformOrderExportLedgerTest.php @@ -108,6 +108,11 @@ class AdminPlatformOrderExportLedgerTest extends TestCase $this->assertStringContainsString("merchant_id,{$merchant->id}", $content2); $this->assertStringContainsString('payment_status,unpaid', $content2); $this->assertStringContainsString('site_subscription_id,', $content2); + + // 对账/退款汇总字段 + $this->assertStringContainsString('receipt_total,10.00', $content2); + $this->assertStringContainsString('refund_total,1.00', $content2); + $this->assertStringContainsString('reconcile_delta,10.00', $content2); } public function test_show_page_should_render_export_ledger_link(): void