From 3dd90dc52caf9da9b9bae074c600bb8f42d1694e Mon Sep 17 00:00:00 2001 From: chenxi Date: Thu, 8 Oct 2026 14:33:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E7=BB=A9=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=95=86=E5=93=81=E9=87=91=E9=A2=9D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=EF=BC=88=E8=AE=A2=E5=8D=95=E4=BE=A7=E6=8C=89?= =?UTF-8?q?=E5=AD=90=E8=AE=A2=E5=8D=95=E5=8E=BB=E9=87=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 订单侧聚合改为先按「子订单号 + 条码」去重再求和,避免拆单/子单重复计入商品金额。 --- .../Commands/SyncStoreReceiptOrderMatches.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/Console/Commands/SyncStoreReceiptOrderMatches.php b/app/Console/Commands/SyncStoreReceiptOrderMatches.php index 1cc6c1ea..7d726878 100644 --- a/app/Console/Commands/SyncStoreReceiptOrderMatches.php +++ b/app/Console/Commands/SyncStoreReceiptOrderMatches.php @@ -460,12 +460,20 @@ class SyncStoreReceiptOrderMatches extends Command ['ops_jst_orders', 'ops_jst_order_item'], ] as [$ordersTable, $itemsTable]) { try { + // 同一线上订单号在聚水潭可能对应多个 o_id(拆单/子单),且子单会重复包含 + // 同一批子订单商品行;先按「子订单号 + 条码」去重再求和,避免重复计算。 $result = $mirror->select( - "SELECT o.so_id as so_id, o.shop_name as shop_name, SUM(i.amount) as amount - FROM tmp_receipt_order_nos t - STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no - STRAIGHT_JOIN {$itemsTable} i ON i.o_id = o.o_id - GROUP BY o.so_id, o.shop_name" + "SELECT so_id, shop_name, SUM(amount) as amount + FROM ( + SELECT o.so_id as so_id, o.shop_name as shop_name, + CONCAT(COALESCE(NULLIF(i.outer_oi_id, ''), CONCAT('o', o.o_id, '-', i.oi_id)), '|', i.sku_id) as dedup_key, + MAX(i.amount) as amount + FROM tmp_receipt_order_nos t + STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no + STRAIGHT_JOIN {$itemsTable} i ON i.o_id = o.o_id + GROUP BY o.so_id, o.shop_name, dedup_key + ) d + GROUP BY so_id, shop_name" ); } catch (Throwable $exception) { $this->error('订单侧查询失败(' . $ordersTable . '):' . $exception->getMessage());