fix(pdd): 停止旧单刷匹配日志,并修复订单列表商品显示为 0

同步时已有工单/匹配结果未变不再写日志;列表按 Number(order_id) 挂 items,并补齐 PDD goods_name 回退与嵌套商品解析。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-09-15 12:05:02 +08:00
co-authored by Cursor
parent 2e197f93e0
commit 8e996e01fb
7 changed files with 222 additions and 43 deletions
@@ -9,6 +9,7 @@ import {
createWorkProductMatchLog,
createWorkOrder,
createWorkOrderEvent,
getLatestWorkProductMatchLogByOrderItemId,
getWorkOrderByOrderItemId,
listWorkOrdersByPlatformOrderId,
listWorkProductRuleMappings,
@@ -68,8 +69,30 @@ export async function syncWorkerOrdersForSourceOrder(
const skuNick =
matchContext.skuNick || String(outSkuSn || snapshot.spec || item.sku_name || '').trim()
// Record product match diagnostics for all platform orders (including PDD)
if (sellerId || relItemId || itemTitle) {
// 已有工单:跳过匹配日志,避免 PDD 定时同步对旧单反复刷「命中」日志。
const existingWorkOrder = await getWorkOrderByOrderItemId(item.id)
if (existingWorkOrder) {
skipped.push({ orderItemId: Number(item.id), reason: 'already_exists' })
decisions.push(
buildWorkerConsumerDecision(item, {
result: 'existing',
reason: 'already_exists',
ruleId: match.rule?.id,
ruleKey: match.rule?.rule_key,
}),
)
continue
}
const latestLog = await getLatestWorkProductMatchLogByOrderItemId(item.id)
const sameMatchOutcome =
latestLog &&
String(latestLog.match_status || '') === match.reason &&
Number(latestLog.rule_id || 0) === Number(match.rule?.id || 0) &&
Number(latestLog.mapping_id || 0) === Number(match.mappingId || 0)
// 匹配结果未变时不重复写诊断日志(旧单未建工单也会被定时同步反复扫到)。
if (!sameMatchOutcome && (sellerId || relItemId || itemTitle)) {
await createWorkProductMatchLog({
orderId: Number(order.id),
orderItemId: Number(item.id),
@@ -122,18 +145,6 @@ export async function syncWorkerOrdersForSourceOrder(
)
continue
}
if (await getWorkOrderByOrderItemId(item.id)) {
skipped.push({ orderItemId: Number(item.id), reason: 'already_exists' })
decisions.push(
buildWorkerConsumerDecision(item, {
result: 'existing',
reason: 'already_exists',
ruleId: rule.id,
ruleKey: rule.rule_key,
}),
)
continue
}
// 订单号跨订单唯一:同一订单的多个 SKU 件允许共享订单号(按件建单是既有设计),
// 但订单号已挂在其他订单下时跳过,避免自动同步产生撞号工单。
const samePlatformOrders = await listWorkOrdersByPlatformOrderId(order.platform_order_id)