feat(pdd): 支持根据数据库已有订单自适应翻页拉取,防高峰漏单

1. 新增数据库批量排查已有订单接口 findExistingPlatformOrderIds,利用 B-Tree 索引毫秒级判定当前页订单是否存在;
2. 优化 syncStoreOrders 支持自适应翻页拉取:当第 1 页全部为新订单时,自适应向后递增翻页拉取(支持 maxPages 默认 5 页,平滑限速 300ms);
3. 翻页终止自适应判定:当拉取到包含数据库已有旧订单的页面时立即 break 停止翻页,兼顾高性能与不漏单;
4. 扩展全局配置支持 maxPages(自适应最大翻页页数),支持后台管理员在 UI 设置与立即拉单参数联动;
5. 新增单元测试 pdd-sync-service.test.ts,验证全部新订单自适应翻页与命中已有订单提前终止行为。
This commit is contained in:
yml2213
2026-09-12 16:25:37 +08:00
parent 1217da7393
commit ede9a87b97
9 changed files with 405 additions and 78 deletions
@@ -86,6 +86,29 @@ export async function findLatestOrderByAnyPlatformOrderId(
return result.rows[0] || null
}
export async function findExistingPlatformOrderIds({
provider = 'pdd',
platform = 'pdd',
platformOrderIds,
}: {
provider?: string
platform: string
platformOrderIds: string[]
}): Promise<Set<string>> {
if (!platformOrderIds || platformOrderIds.length === 0) {
return new Set<string>()
}
const result = await query<{ platform_order_id: string }>(
`
SELECT platform_order_id
FROM orders
WHERE provider = $1 AND platform = $2 AND platform_order_id = ANY($3::text[])
`,
[provider, platform, platformOrderIds],
)
return new Set(result.rows.map((r) => String(r.platform_order_id)))
}
export async function createOrder(input: OrderCreateInput): Promise<OrderRow | null> {
return createOrderWithExecutor(query, input)
}