From 968cba3c08be205e747a4e2bb659393dd32e4f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Mon, 16 Mar 2026 21:30:51 +0800 Subject: [PATCH] chore(governance): guard clear bmpa errors when filters not bmpa scope --- .../Admin/PlatformOrderController.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index 7339d78..3323a6f 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -2156,6 +2156,25 @@ class PlatformOrderController extends Controller 'refund_inconsistent' => (string) $request->input('refund_inconsistent', ''), ]; + // 防误操作(后端兜底):清理“BMPA 失败”标记时,建议先锁定 BMPA 失败集合,避免误清理。 + // 说明:列表页 UI 已做按钮禁用,但仍需后端兜底以防绕过 UI 直接 POST。 + if ($scope === 'filtered') { + if ((string) ($filters['syncable_only'] ?? '') === '1') { + return redirect()->back()->with('warning', '当前已勾选「只看可同步」:该集合与「BMPA失败」治理集合无关,请先取消只看可同步或切到 BMPA 失败集合后再清理。'); + } + if ((string) ($filters['fail_only'] ?? '') === '1' || trim((string) ($filters['sync_error_keyword'] ?? '')) !== '') { + return redirect()->back()->with('warning', '当前筛选包含「同步失败/失败原因」:该集合用于订阅同步治理,请切到 BMPA 失败集合后再清理 BMPA 失败标记。'); + } + + $hasBmpaScope = ((string) ($filters['bmpa_failed_only'] ?? '') === '1') + || (trim((string) ($filters['bmpa_error_keyword'] ?? '')) !== '') + || ((string) ($filters['batch_mark_paid_and_activate_24h'] ?? '') === '1'); + + if (! $hasBmpaScope) { + return redirect()->back()->with('warning', '为避免误操作,请先筛选「BMPA失败」集合(bmpa_failed_only=1 或失败原因关键词,或勾选 batch_mark_paid_and_activate_24h)后再执行清理。'); + } + } + $query = PlatformOrder::query() ->whereRaw("JSON_EXTRACT(meta, '$.batch_mark_paid_and_activate_error.message') IS NOT NULL");