退款治理:支持标记部分退款/已支付以回退退款状态

This commit is contained in:
萝卜
2026-03-11 05:12:53 +00:00
parent 857ed4e424
commit fa085980b4
4 changed files with 167 additions and 0 deletions

View File

@@ -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);