业绩明细取数:合并发货行不再当作单笔金额(实付与商品优先取本单非合并行)
This commit is contained in:
parent
f6497f5afc
commit
e26c1e467e
@ -547,6 +547,8 @@ class SyncStoreReceiptOrderMatches extends Command
|
||||
// 子单的平台子订单号与主单不同时,按「子订单号 + 条码」的去重键拦不住,会把同一批
|
||||
// 商品重复累加。整单没有任何主单行时退化为取全部行,避免把真实金额抹掉——与实付
|
||||
// 「主单优先,无主单退化」保持同一套规则。
|
||||
// 合并发货行(merge_so_id 非空)会把组内其它订单的金额一起挂在本单号上:
|
||||
// 当单号下存在「非合并行」时,商品与实付都只认非合并行,避免把合并组合计当成单笔金额。
|
||||
$mirror->statement('DROP TEMPORARY TABLE IF EXISTS tmp_receipt_main_nos');
|
||||
$mirror->statement('CREATE TEMPORARY TABLE tmp_receipt_main_nos (no varchar(64) NOT NULL, PRIMARY KEY(no)) ENGINE=InnoDB');
|
||||
$mirror->statement(
|
||||
@ -556,6 +558,15 @@ class SyncStoreReceiptOrderMatches extends Command
|
||||
STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no
|
||||
WHERE o.link_o_id IS NULL OR o.link_o_id = 0"
|
||||
);
|
||||
$mirror->statement('DROP TEMPORARY TABLE IF EXISTS tmp_receipt_plain_nos');
|
||||
$mirror->statement('CREATE TEMPORARY TABLE tmp_receipt_plain_nos (no varchar(64) NOT NULL, PRIMARY KEY(no)) ENGINE=InnoDB');
|
||||
$mirror->statement(
|
||||
"INSERT IGNORE INTO tmp_receipt_plain_nos (no)
|
||||
SELECT DISTINCT o.so_id as no
|
||||
FROM tmp_receipt_order_nos t
|
||||
STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no
|
||||
WHERE COALESCE(o.merge_so_id, '') = ''"
|
||||
);
|
||||
|
||||
// 同一线上订单号在聚水潭可能对应多个 o_id(拆单/子单),且子单会重复包含
|
||||
// 同一批子订单商品行;先按「子订单号 + 条码」去重再求和,避免重复计算。
|
||||
@ -572,22 +583,26 @@ class SyncStoreReceiptOrderMatches extends Command
|
||||
STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no
|
||||
STRAIGHT_JOIN {$itemsTable} i ON i.o_id = o.o_id
|
||||
LEFT JOIN tmp_receipt_main_nos m ON m.no = o.so_id
|
||||
LEFT JOIN tmp_receipt_plain_nos p ON p.no = o.so_id
|
||||
WHERE (o.link_o_id IS NULL OR o.link_o_id = 0)
|
||||
OR m.no IS NULL
|
||||
OR (m.no IS NULL AND (COALESCE(o.merge_so_id, '') = '' OR p.no IS NULL))
|
||||
GROUP BY o.so_id, o.shop_name, dedup_key
|
||||
) d
|
||||
GROUP BY so_id, shop_name"
|
||||
);
|
||||
// 订单实付:取订单级字段(明细行上的实付会重复);拆单取主单(link_o_id 为空),
|
||||
// 没有主单时退化为取该单号下的最大值。
|
||||
// 其次取「非合并行」(merge_so_id 为空——合并发货行带的是组内合计金额,不能算单笔),
|
||||
// 都没有时退化为取该单号下的最大值。
|
||||
$paid = $mirror->select(
|
||||
"SELECT so_id, shop_name,
|
||||
COALESCE(
|
||||
MAX(CASE WHEN link_o_id IS NULL OR link_o_id = 0 THEN paid END),
|
||||
MAX(CASE WHEN COALESCE(merge_so_id, '') = '' THEN paid END),
|
||||
MAX(paid)
|
||||
) as paid
|
||||
FROM (
|
||||
SELECT o.so_id as so_id, o.shop_name as shop_name, o.link_o_id as link_o_id, o.{$paidColumn} as paid
|
||||
SELECT o.so_id as so_id, o.shop_name as shop_name, o.link_o_id as link_o_id,
|
||||
COALESCE(o.merge_so_id, '') as merge_so_id, o.{$paidColumn} as paid
|
||||
FROM tmp_receipt_order_nos t
|
||||
STRAIGHT_JOIN {$ordersTable} o ON o.so_id = t.no
|
||||
) x
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user