isExcludeBalance($tradeNo, $source); break; } } } /** * 是否排除余额支付方式 * * @param string $tradeNo * @param int $source * * @return bool */ public function isExcludeBalance(string $tradeNo, int $source): bool { // 验证下单使用的优惠券是否允许余额支付 if ($tradeNo && MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_COUPON)) { $orderWhere = [ 'out_trade_no' => $tradeNo, 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED ]; if ($source == 6) { // 门店订单 if (!MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE)) { return false; } $orderFind = StoreOrder::find(); $isStore = true; } else { $orderFind = Order::find(); } $orderId = $orderFind ->where($orderWhere) ->select('id') ->scalar(); if (!$orderId) { return false; } if (!empty($isStore)) { $orderDetailFind = StoreOrderDetail::find(); $orderMarketingFind = StoreOrderMarketing::find(); } else { $orderDetailFind = OrderDetail::find(); $orderMarketingFind = OrderMarketing::find(); } $orderDetailIds = $orderDetailFind ->where([ 'order_id' => $orderId, 'status' => StatusEnum::ENABLED, 'mall_id' => $this->mall_id ]) ->select('id') ->column(); if (!$orderDetailIds) { return false; } $userCouponIdArr = $orderMarketingFind ->where([ 'order_detail_id' => $orderDetailIds, 'status' => StatusEnum::ENABLED ]) ->select('user_coupon_id') ->column(); array_walk($userCouponIdArr, function (&$item) { $item = json_decode($item, true); if (!$item) { $item = []; return; } $item = array_keys($item); }); if (!$userCouponIdArr) { return false; } $userCouponIdArr = array_filter($userCouponIdArr); if (!$userCouponIdArr) { return false; } $userCouponIdArr = array_merge(...$userCouponIdArr); if (!empty($isStore)) { $couponIds = StoreCouponUserRelate::find() ->where([ 'id' => $userCouponIdArr, 'from_type' => 1, // 只查询平台优惠券 ]) ->select('coupon_id') ->column(); } else { $couponIds = AddonsCouponUserRelate::find() ->where([ 'id' => $userCouponIdArr ]) ->select('coupon_id') ->column(); } if (!$couponIds) { return false; } return AddonsCoupon::find() ->where([ 'id' => $couponIds, 'is_not_allow_balance_pay' => StatusEnum::ENABLED, 'status' => StatusEnum::ENABLED, 'mall_id' => $this->mall_id ]) ->andWhere(['!=', 'type', AddonsCouponEnum::EXCHANGE]) // 兑换券类型没有这个开关 ->exists(); } return false; } }