diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index 99efe63..e2c7864 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -302,6 +302,24 @@ class PlatformOrderController extends Controller $order->paid_at = $order->paid_at ?: $now; $order->activated_at = $order->activated_at ?: $now; $order->paid_amount = $order->paid_amount > 0 ? $order->paid_amount : $order->payable_amount; + + // 兼容:若尚未写入“支付回执”,则自动补一条(可治理) + $meta = (array) ($order->meta ?? []); + $receipts = (array) (data_get($meta, 'payment_receipts', []) ?? []); + if (count($receipts) === 0) { + $receipts[] = [ + 'type' => 'manual_mark_paid', + 'channel' => (string) ($order->payment_channel ?? ''), + 'amount' => (float) $order->paid_amount, + 'paid_at' => $order->paid_at ? $order->paid_at->format('Y-m-d H:i:s') : $now->toDateTimeString(), + 'note' => '由【标记支付并生效】自动补记(可治理)', + 'created_at' => $now->toDateTimeString(), + 'admin_id' => $admin->id, + ]; + data_set($meta, 'payment_receipts', $receipts); + $order->meta = $meta; + } + $order->save(); // 立刻同步订阅 @@ -328,6 +346,40 @@ class PlatformOrderController extends Controller return redirect()->back()->with('success', '订单已标记支付并生效,订阅已同步:' . $subscription->subscription_no); } + public function addPaymentReceipt(Request $request, PlatformOrder $order): RedirectResponse + { + $admin = $this->ensurePlatformAdmin($request); + + $data = $request->validate([ + 'type' => ['required', 'string', 'max:30'], + 'channel' => ['nullable', 'string', 'max:30'], + 'amount' => ['required', 'numeric', 'min:0'], + 'paid_at' => ['nullable', 'date'], + 'note' => ['nullable', 'string', 'max:2000'], + ]); + + $now = now(); + + $meta = (array) ($order->meta ?? []); + $receipts = (array) (data_get($meta, 'payment_receipts', []) ?? []); + + $receipts[] = [ + 'type' => (string) $data['type'], + 'channel' => (string) ($data['channel'] ?? ''), + 'amount' => (float) $data['amount'], + 'paid_at' => $data['paid_at'] ? (string) $data['paid_at'] : null, + 'note' => (string) ($data['note'] ?? ''), + 'created_at' => $now->toDateTimeString(), + 'admin_id' => $admin->id, + ]; + + data_set($meta, 'payment_receipts', $receipts); + $order->meta = $meta; + $order->save(); + + return redirect()->back()->with('success', '已追加支付回执记录(仅用于对账留痕,不自动改状态)。'); + } + public function markActivated(Request $request, PlatformOrder $order): RedirectResponse { $admin = $this->ensurePlatformAdmin($request); diff --git a/resources/views/admin/platform_orders/show.blade.php b/resources/views/admin/platform_orders/show.blade.php index 7b5479d..4633055 100644 --- a/resources/views/admin/platform_orders/show.blade.php +++ b/resources/views/admin/platform_orders/show.blade.php @@ -86,6 +86,7 @@ $activation = data_get($order->meta, 'subscription_activation'); $activationError = data_get($order->meta, 'subscription_activation_error'); $audit = (array) (data_get($order->meta, 'audit', []) ?? []); + $paymentReceipts = (array) (data_get($order->meta, 'payment_receipts', []) ?? []); @endphp @php @@ -107,6 +108,64 @@ @endif +
用于“线下收款/转账/人工核对”的留痕记录(当前阶段先落 meta,不引入独立表)。
+ + @if(count($paymentReceipts) > 0) + @php $items = array_slice(array_reverse($paymentReceipts), 0, 20); @endphp +| 类型 | +渠道 | +金额 | +支付时间 | +记录时间 | +管理员 | +备注 | +
|---|---|---|---|---|---|---|
| {{ data_get($r, 'type') ?: '-' }} | +{{ data_get($r, 'channel') ?: '-' }} | +¥{{ number_format((float) (data_get($r, 'amount') ?? 0), 2) }} | +{{ data_get($r, 'paid_at') ?: '-' }} | +{{ data_get($r, 'created_at') ?: '-' }} | +{{ data_get($r, 'admin_id') ?: '-' }} | +{{ data_get($r, 'note') ?: '' }} | +
暂无支付回执记录。
+ @endif + +