订单详情效率优化

This commit is contained in:
ray
2026-05-08 13:26:44 +08:00
parent f4854a2630
commit 87f629ac29

View File

@@ -719,6 +719,7 @@ async function syncCustomerDetails(page, options = {}) {
console.log(`[客户详情] 共 ${customerTargets.length} 个客户需要获取详情`); console.log(`[客户详情] 共 ${customerTargets.length} 个客户需要获取详情`);
const allDetails = Array.isArray(resumeCheckpoint?.records) ? resumeCheckpoint.records : []; const allDetails = Array.isArray(resumeCheckpoint?.records) ? resumeCheckpoint.records : [];
let currentListPage = 0; let currentListPage = 0;
let currentGroupKey = '';
let startIndex = Number.parseInt(String(resumeCheckpoint?.currentIndex || 0), 10) || 0; let startIndex = Number.parseInt(String(resumeCheckpoint?.currentIndex || 0), 10) || 0;
if (startIndex > 0) { if (startIndex > 0) {
console.log(`[客户详情续爬] 从 checkpoint 恢复: index=${startIndex}, records=${allDetails.length}`); console.log(`[客户详情续爬] 从 checkpoint 恢复: index=${startIndex}, records=${allDetails.length}`);
@@ -745,6 +746,11 @@ async function syncCustomerDetails(page, options = {}) {
currentListPage = target.pageNum; currentListPage = target.pageNum;
} }
const nextGroupKey = `${target.pageNum}`;
if (currentGroupKey !== nextGroupKey) {
currentGroupKey = nextGroupKey;
}
const clicked = await clickCustomerDetailFromListWithRetry(page, target); const clicked = await clickCustomerDetailFromListWithRetry(page, target);
if (!clicked) { if (!clicked) {
console.warn(`[客户详情] 列表中未找到 accountId=${target.accountId},跳过`); console.warn(`[客户详情] 列表中未找到 accountId=${target.accountId},跳过`);
@@ -761,7 +767,7 @@ async function syncCustomerDetails(page, options = {}) {
} catch { } catch {
console.warn(`[客户详情] ${target.accountId} 详情页加载超时,跳过`); console.warn(`[客户详情] ${target.accountId} 详情页加载超时,跳过`);
await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null); await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null);
await recoverCustomerListState(page, currentListPage).catch(() => null); await waitForStableCustomerList(page).catch(() => null);
continue; continue;
} }
@@ -774,7 +780,7 @@ async function syncCustomerDetails(page, options = {}) {
} }
await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null); await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null);
await recoverCustomerListState(page, currentListPage).catch(() => null); await waitForStableCustomerList(page).catch(() => null);
currentListPage = target.pageNum; currentListPage = target.pageNum;
} }
@@ -1353,6 +1359,7 @@ async function syncOrderDetails(page, cachedOrderIds, options = {}) {
} }
let currentListPage = 0; let currentListPage = 0;
let currentWindowKey = ''; let currentWindowKey = '';
let currentGroupKey = '';
await page.goto(datasets.orders.url, { waitUntil: 'domcontentloaded' }); await page.goto(datasets.orders.url, { waitUntil: 'domcontentloaded' });
await waitUntilReady(page, datasets.orders.heading); await waitUntilReady(page, datasets.orders.heading);
@@ -1370,7 +1377,8 @@ async function syncOrderDetails(page, cachedOrderIds, options = {}) {
currentListPage = 1; currentListPage = 1;
} }
if (target.pageNum > 0 && currentListPage !== target.pageNum) { const nextGroupKey = `${nextWindowKey}|${target.pageNum}`;
if (target.pageNum > 0 && (currentListPage !== target.pageNum || currentGroupKey !== nextGroupKey)) {
const reached = await jumpToOrderPage(page, target.pageNum); const reached = await jumpToOrderPage(page, target.pageNum);
if (!reached) { if (!reached) {
console.warn(`[订单详情] 无法跳到第 ${target.pageNum} 页,跳过 ${target.orderId}`); console.warn(`[订单详情] 无法跳到第 ${target.pageNum} 页,跳过 ${target.orderId}`);
@@ -1378,6 +1386,7 @@ async function syncOrderDetails(page, cachedOrderIds, options = {}) {
} }
currentListPage = target.pageNum; currentListPage = target.pageNum;
} }
currentGroupKey = nextGroupKey;
const clicked = await clickOrderDetailFromListWithRetry(page, target); const clicked = await clickOrderDetailFromListWithRetry(page, target);
if (!clicked) { if (!clicked) {
@@ -1395,7 +1404,7 @@ async function syncOrderDetails(page, cachedOrderIds, options = {}) {
} catch { } catch {
console.warn(`[订单详情] ${target.orderId} 详情页加载超时,跳过`); console.warn(`[订单详情] ${target.orderId} 详情页加载超时,跳过`);
await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null); await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null);
await recoverOrderListState(page, currentListPage).catch(() => null); await waitForStableOrderList(page).catch(() => null);
continue; continue;
} }
@@ -1411,7 +1420,7 @@ async function syncOrderDetails(page, cachedOrderIds, options = {}) {
} }
await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null); await page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => null);
await recoverOrderListState(page, currentListPage, target.windowStart, target.windowEnd).catch(() => null); await waitForStableOrderList(page).catch(() => null);
currentListPage = target.pageNum; currentListPage = target.pageNum;
} }