From 43b36159b4b029d04cf60a44558cc0baac7ec89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Mon, 5 Oct 2026 14:08:11 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(split):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=88=86=E4=BD=A3=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E7=A7=8D=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构SplitCalculator类中的佣金计算方法,添加对数组和对象结果集的统一处理, 提高代码的健壮性和可维护性。 - 使用isEmptyResult方法替代直接调用isEmpty判断 - 使用toResultList方法统一处理不同类型的查询结果 - 支持数组、集合对象等多种数据结构的遍历操作 ``` --- .../shopro/library/split/SplitCalculator.php | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/addons/shopro/library/split/SplitCalculator.php b/addons/shopro/library/split/SplitCalculator.php index ec71564..9bc0120 100644 --- a/addons/shopro/library/split/SplitCalculator.php +++ b/addons/shopro/library/split/SplitCalculator.php @@ -81,11 +81,11 @@ class SplitCalculator $payFee = floatval($order['pay_fee']); $commissionRewards = CommissionReward::where('order_id', $orderId)->where('status', '>=', 0)->select(); - if ($commissionRewards->isEmpty()) { + if ($this->isEmptyResult($commissionRewards)) { $issues[] = '该订单无分销佣金记录(未产生推广关系或未参与分销)'; } - foreach ($commissionRewards as $reward) { + foreach ($this->toResultList($commissionRewards) as $reward) { $userId = intval($reward['agent_id']); $amount = floatval($reward['commission']); if ($userId <= 0) { @@ -108,7 +108,7 @@ class SplitCalculator } $regionalRewards = $this->getRegionalRewardsByOrderId($orderId); - foreach ($regionalRewards as $reward) { + foreach ($this->toResultList($regionalRewards) as $reward) { $uid = intval($reward['agent_user_id']); $amount = floatval($reward['commission']); if ($uid <= 0 || $amount <= 0) { @@ -144,6 +144,28 @@ class SplitCalculator ]; } + protected function isEmptyResult($result) + { + if (is_array($result)) { + return count($result) === 0; + } + if (is_object($result) && method_exists($result, 'isEmpty')) { + return $result->isEmpty(); + } + return empty($result); + } + + protected function toResultList($result) + { + if (is_array($result)) { + return $result; + } + if (is_object($result) && method_exists($result, 'all')) { + return $result->all(); + } + return $result ? (array) $result : []; + } + protected function getRegionalRewardsByOrderId($orderId) { try {