修复业绩明细商品金额重复计算(订单侧按子订单去重)

订单侧聚合改为先按「子订单号 + 条码」去重再求和,避免拆单/子单重复计入商品金额。
This commit is contained in:
chenxi 2026-10-08 14:33:48 +08:00
parent 12eb5d03d9
commit 3dd90dc52c

View File

@ -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());