Files
saasshop/app/Support/PlatformOrderToolsGuard.php

124 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Support;
/**
* 平台订单列表页工具区:前端治理阻断口径(减少误点)。
*
* 说明:后端各批量动作/清理动作本身仍有安全阀阻断;这里仅用于 UI 层“按钮禁用 + 提示原因”。
*/
class PlatformOrderToolsGuard
{
/**
* @param array<string, mixed> $filters
* @return array<string, array{blocked:bool, reason:string}>
*/
public static function forIndex(array $filters): array
{
$batchActivateReason = self::batchActivateSubscriptionsReason($filters);
$batchBmpaReason = self::batchBmpaReason($filters);
$batchMarkActivatedReason = self::batchMarkActivatedReason($filters);
$clearSyncReason = self::clearSyncErrorsReason($filters);
$clearBmpaReason = self::clearBmpaErrorsReason($filters);
return [
'batch_activate_subscriptions' => [
'blocked' => $batchActivateReason !== '',
'reason' => $batchActivateReason,
],
'batch_bmpa' => [
'blocked' => $batchBmpaReason !== '',
'reason' => $batchBmpaReason,
],
'batch_mark_activated' => [
'blocked' => $batchMarkActivatedReason !== '',
'reason' => $batchMarkActivatedReason,
],
'clear_sync_errors' => [
'blocked' => $clearSyncReason !== '',
'reason' => $clearSyncReason,
],
'clear_bmpa_errors' => [
'blocked' => $clearBmpaReason !== '',
'reason' => $clearBmpaReason,
],
];
}
/**
* @param array<string, mixed> $filters
*/
public static function batchActivateSubscriptionsReason(array $filters): string
{
if ((string) ($filters['syncable_only'] ?? '') !== '1') {
return '请先勾选「只看可同步」再执行批量同步。';
}
if ((string) ($filters['receipt_status'] ?? '') === 'none') {
return '当前集合为「无回执」:建议先补齐支付回执留痕后再批量同步。';
}
if (((string) ($filters['reconcile_mismatch'] ?? '') === '1') || ((string) ($filters['refund_inconsistent'] ?? '') === '1')) {
return '当前集合包含「对账不一致/退款不一致」:建议先完成金额/状态治理后再批量同步。';
}
return '';
}
/**
* @param array<string, mixed> $filters
*/
public static function batchBmpaReason(array $filters): string
{
if ((string) ($filters['status'] ?? '') !== 'pending' || (string) ($filters['payment_status'] ?? '') !== 'unpaid') {
return '请先筛选「订单状态=待处理」且「支付状态=未支付」再执行批量 BMPA。';
}
if (((string) ($filters['reconcile_mismatch'] ?? '') === '1') || ((string) ($filters['refund_inconsistent'] ?? '') === '1')) {
return '当前集合包含「对账不一致/退款不一致」治理集合:建议先完成回执/退款治理后再批量推进。';
}
return '';
}
/**
* @param array<string, mixed> $filters
*/
public static function batchMarkActivatedReason(array $filters): string
{
if ((string) ($filters['payment_status'] ?? '') !== 'paid' || (string) ($filters['status'] ?? '') !== 'pending') {
return '请先筛选「支付状态=已支付」且「订单状态=待处理」再执行批量生效。';
}
// 待生效口径一致paid + pending + unsynced排除同步失败等异常单避免误把失败单“批量生效”导致治理链路混乱。
if ((string) ($filters['sync_status'] ?? '') !== 'unsynced') {
return '为避免把同步失败等异常单混入,请先锁定「同步状态=未同步(sync_status=unsynced)」(建议用快捷筛选「待生效」)再执行批量生效。';
}
return '';
}
/**
* @param array<string, mixed> $filters
*/
public static function clearSyncErrorsReason(array $filters): string
{
if ((string) ($filters['sync_status'] ?? '') !== 'failed' && (string) ($filters['fail_only'] ?? '') === '') {
return '建议先筛选「同步失败」集合sync_status=failed后再执行清理避免误清理。';
}
return '';
}
/**
* @param array<string, mixed> $filters
*/
public static function clearBmpaErrorsReason(array $filters): string
{
if ((string) ($filters['bmpa_failed_only'] ?? '') === ''
&& (string) ($filters['bmpa_error_keyword'] ?? '') === ''
&& (string) ($filters['batch_mark_paid_and_activate_24h'] ?? '') === '') {
return '建议先筛选「BMPA失败」集合bmpa_failed_only=1 或失败原因关键词)后再执行清理,避免误清理。';
}
return '';
}
}