getCommissionEvent(); return $commissionEvent === $event; } public static function shouldDeferRegionalWallet($order, $event) { if (!self::shouldDeferForGatewaySplit($order, $event)) { return false; } $regionalEvent = (new RegionalConfig())->getCommissionEvent(); return $regionalEvent === $event; } /** * 当前订单是否应等分账结果再决定钱包入账 */ public static function shouldDeferForGatewaySplit($order, $event) { if (is_numeric($order)) { $order = Order::get($order); } if (!$order) { return false; } $config = new Config(); if (!$config->isEnable() || !$config->shouldSkipWallet()) { return false; } if ($config->getTiming() !== $event) { return false; } if (class_exists('\\addons\\shopro_huifu\\library\\Bridge') && \addons\shopro_huifu\library\Bridge::shouldHandleSplit($order)) { return true; } if (in_array($config->getMode(), ['wechat', 'both'], true) && $order['pay_type'] === 'wechat') { return true; } return false; } public static function isSplitSuccessful($orderId) { return SplitOrder::where('order_id', $orderId) ->where('status', 'in', [2, 3]) ->count() > 0; } /** * 分账尝试结束后结算佣金(成功=仅记账不入钱包,失败=入钱包) */ public static function finalizeAfterSplitAttempt($orderId, $event, $splitExecutedOk = false) { if (!self::shouldDeferForGatewaySplit($orderId, $event)) { return; } if (self::isSplitSuccessful($orderId)) { self::settleOrderWithoutWallet($orderId, $event); } else { self::settleOrderToWallet($orderId, $event); } } public static function settleOrderWithoutWallet($orderId, $event) { $commissionLib = new CommissionRewardLibrary(); $commissionOrders = CommissionOrderModel::where('order_id', $orderId) ->where('commission_reward_status', CommissionRewardLibrary::COMMISSION_REWARD_STATUS_WAITING) ->select(); foreach ($commissionOrders as $commissionOrder) { if ($commissionOrder['commission_event'] === $event || $event === 'admin') { $commissionLib->runCommissionRewardByOrderWithoutWallet($event, $commissionOrder); } } $regionalLib = new RegionalRewardLibrary(); $regionalOrders = RegionalOrderModel::where('order_id', $orderId) ->where('commission_reward_status', RegionalRewardLibrary::STATUS_WAITING) ->select(); foreach ($regionalOrders as $regionalOrder) { if ($regionalOrder['commission_event'] === $event) { $regionalLib->settleByRegionalOrderWithoutWallet($regionalOrder->id, $event); } } } public static function settleOrderToWallet($orderId, $event) { $commissionLib = new CommissionRewardLibrary(); $commissionOrders = CommissionOrderModel::where('order_id', $orderId) ->where('commission_reward_status', CommissionRewardLibrary::COMMISSION_REWARD_STATUS_WAITING) ->select(); foreach ($commissionOrders as $commissionOrder) { if ($commissionOrder['commission_event'] === $event || $event === 'admin') { $commissionLib->runCommissionRewardByOrder($event, $commissionOrder); } } $regionalLib = new RegionalRewardLibrary(); $regionalOrders = RegionalOrderModel::where('order_id', $orderId) ->where('commission_reward_status', RegionalRewardLibrary::STATUS_WAITING) ->select(); foreach ($regionalOrders as $regionalOrder) { if ($regionalOrder['commission_event'] === $event) { $regionalLib->settleByRegionalOrder($regionalOrder->id, $event); } } } }