退款治理:支持标记部分退款/已支付以回退退款状态
This commit is contained in:
@@ -613,6 +613,72 @@ class PlatformOrderController extends Controller
|
||||
return redirect()->back()->with('success', '已将订单支付状态标记为已退款(未自动写入退款回执)。');
|
||||
}
|
||||
|
||||
public function markPartiallyRefunded(Request $request, PlatformOrder $order): RedirectResponse
|
||||
{
|
||||
$admin = $this->ensurePlatformAdmin($request);
|
||||
|
||||
if ((float) ($order->paid_amount ?? 0) <= 0) {
|
||||
return redirect()->back()->with('warning', '当前订单已付金额为 0,无法标记为部分退款。');
|
||||
}
|
||||
|
||||
if ((string) $order->payment_status === 'partially_refunded') {
|
||||
return redirect()->back()->with('warning', '当前订单已是部分退款状态,无需重复操作。');
|
||||
}
|
||||
|
||||
$now = now();
|
||||
$order->payment_status = 'partially_refunded';
|
||||
$order->refunded_at = $order->refunded_at ?: $now;
|
||||
|
||||
$meta = (array) ($order->meta ?? []);
|
||||
$audit = (array) (data_get($meta, 'audit', []) ?? []);
|
||||
$audit[] = [
|
||||
'action' => 'mark_partially_refunded',
|
||||
'scope' => 'single',
|
||||
'at' => $now->toDateTimeString(),
|
||||
'admin_id' => $admin->id,
|
||||
'note' => '手动标记为部分退款(仅修正支付状态,不自动写退款回执)',
|
||||
];
|
||||
data_set($meta, 'audit', $audit);
|
||||
|
||||
$order->meta = $meta;
|
||||
$order->save();
|
||||
|
||||
return redirect()->back()->with('success', '已将订单支付状态标记为部分退款(未自动写入退款回执)。');
|
||||
}
|
||||
|
||||
public function markPaidStatus(Request $request, PlatformOrder $order): RedirectResponse
|
||||
{
|
||||
$admin = $this->ensurePlatformAdmin($request);
|
||||
|
||||
if ((float) ($order->paid_amount ?? 0) <= 0) {
|
||||
return redirect()->back()->with('warning', '当前订单已付金额为 0,无法标记为已支付。');
|
||||
}
|
||||
|
||||
if ((string) $order->payment_status === 'paid') {
|
||||
return redirect()->back()->with('warning', '当前订单已是已支付状态,无需重复操作。');
|
||||
}
|
||||
|
||||
$now = now();
|
||||
$order->payment_status = 'paid';
|
||||
// paid 状态不强依赖 refunded_at,这里不做清空,避免丢历史痕迹
|
||||
|
||||
$meta = (array) ($order->meta ?? []);
|
||||
$audit = (array) (data_get($meta, 'audit', []) ?? []);
|
||||
$audit[] = [
|
||||
'action' => 'mark_paid_status',
|
||||
'scope' => 'single',
|
||||
'at' => $now->toDateTimeString(),
|
||||
'admin_id' => $admin->id,
|
||||
'note' => '手动标记为已支付(仅修正支付状态,不自动写回执/退款回执)',
|
||||
];
|
||||
data_set($meta, 'audit', $audit);
|
||||
|
||||
$order->meta = $meta;
|
||||
$order->save();
|
||||
|
||||
return redirect()->back()->with('success', '已将订单支付状态标记为已支付(未自动写入回执/退款回执)。');
|
||||
}
|
||||
|
||||
public function markActivated(Request $request, PlatformOrder $order): RedirectResponse
|
||||
{
|
||||
$admin = $this->ensurePlatformAdmin($request);
|
||||
|
||||
Reference in New Issue
Block a user