From f9ae632f331fe692a7c022981e203cb86c8f1486 Mon Sep 17 00:00:00 2001 From: apple Date: Tue, 24 Mar 2026 13:20:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(fsgx):=20=E4=BF=AE=E5=A4=8D=20type=3D8=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=B8=8D=E8=AE=A1=E7=AE=97/=E4=B8=8D?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E4=BD=A3=E9=87=91=E7=9A=84=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug1: Pay.php::compute() 将 type=8 订单排除在佣金计算之外,导致 is_queue_goods=1 的报单订单 one_brokerage 始终为 0。 修复:is_queue_goods=1 时跳过 type 限制。 Bug2: backOrderBrokerage() 同样对 type=8 提前 return,即使 one_brokerage 有值也不发放。修复同 Bug1。 Bug3: Pay::handle() 在 compute() 更新 DB 后,用陈旧的 $orderInfo (one_brokerage=0) 调用 backOrderBrokerage,导致发放金额为 0。 修复:调用 backOrderBrokerage 前重新从 DB 读取最新订单数据。 Made-with: Cursor --- pro_v3.5.1/app/listener/order/Pay.php | 11 ++++++++++- .../app/services/order/StoreOrderTakeServices.php | 5 +++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pro_v3.5.1/app/listener/order/Pay.php b/pro_v3.5.1/app/listener/order/Pay.php index 9f658bb4..3b865b78 100644 --- a/pro_v3.5.1/app/listener/order/Pay.php +++ b/pro_v3.5.1/app/listener/order/Pay.php @@ -58,6 +58,13 @@ class Pay implements ListenerInterface $brokerageTiming = sys_config('brokerage_timing', 'on_confirm'); if ($brokerageTiming === 'on_pay' && !empty($orderInfo['uid'])) { try { + // compute() 已将 one_brokerage 写入 DB,重新从 DB 读取最新订单数据再传给 backOrderBrokerage + /** @var \app\services\order\StoreOrderCreateServices $createSvc */ + $createSvc = app()->make(StoreOrderCreateServices::class); + $freshOrder = $createSvc->get($orderInfo['id']); + if ($freshOrder) { + $orderInfo = $freshOrder->toArray(); + } /** @var \app\services\order\StoreOrderTakeServices $takeServices */ $takeServices = app()->make(StoreOrderTakeServices::class); $takeServices->backOrderBrokerage($orderInfo, $userInfo); @@ -231,7 +238,9 @@ class Pay implements ListenerInterface if ($spread_two_uid > 0) { $orderData['spread_two_uid'] = $spread_two_uid; } - if ($cartInfo && (isset($orderInfo['type']) && !in_array($orderInfo['type'], [4, 5, 7, 8]))) { + // fsgx: 报单商品(is_queue_goods=1)需要参与周期佣金计算,不受 type=8 限制 + $isQueueOrder = !empty($orderInfo['is_queue_goods']); + if ($cartInfo && (isset($orderInfo['type']) && (!in_array($orderInfo['type'], [4, 5, 7, 8]) || $isQueueOrder))) { /** @var StoreOrderComputedServices $orderComputed */ $orderComputed = app()->make(StoreOrderComputedServices::class); if ($userServices->checkUserPromoter($spread_uid)) $orderData['one_brokerage'] = $orderComputed->getOrderSumPrice($cartInfo, 'one_brokerage', false); diff --git a/pro_v3.5.1/app/services/order/StoreOrderTakeServices.php b/pro_v3.5.1/app/services/order/StoreOrderTakeServices.php index e04fa957..d7884fcf 100644 --- a/pro_v3.5.1/app/services/order/StoreOrderTakeServices.php +++ b/pro_v3.5.1/app/services/order/StoreOrderTakeServices.php @@ -240,8 +240,9 @@ class StoreOrderTakeServices extends BaseServices //商城分销功能是否开启 0关闭1开启 if (!sys_config('brokerage_func_status')) return true; - // 营销产品不返佣金 - if (!isset($orderInfo['type']) || in_array($orderInfo['type'], [4, 5, 7, 8])) { + // 营销产品不返佣金;但报单商品(is_queue_goods=1)无论 type 均需参与返佣 + $isQueueOrder = !empty($orderInfo['is_queue_goods']); + if (!$isQueueOrder && (!isset($orderInfo['type']) || in_array($orderInfo['type'], [4, 5, 7, 8]))) { return true; } //绑定失效