From 144bf0ca433c1e5bbaae3ef65b508e0a33dbaee6 Mon Sep 17 00:00:00 2001 From: seb Date: Fri, 16 Oct 2026 02:32:02 +0200 Subject: [PATCH] u --- src/services/companyImport/orderImporter.js | 40 +++++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/services/companyImport/orderImporter.js b/src/services/companyImport/orderImporter.js index 44d08b2..8fa8d60 100644 --- a/src/services/companyImport/orderImporter.js +++ b/src/services/companyImport/orderImporter.js @@ -137,13 +137,13 @@ export async function importOrders({ } }; - for (const m of manRecords) { + const processManifest = async (m) => { const orderNumber = cleanValue(m.nr ?? m.cAuftragsNr); if (!orderNumber || existingOrderNumbers.has(orderNumber)) { ordersSkipped++; progressTracker.counts.receiptsdone++; progressTracker.emitProgress(); - continue; + return; } const manifestKey = String(m.id ?? m.kAuftrag ?? '').trim(); @@ -152,7 +152,7 @@ export async function importOrders({ ordersSkipped++; progressTracker.counts.receiptsdone++; progressTracker.emitProgress(); - continue; + return; } rawItems.sort((a, b) => (Number(a.sort ?? a.nSort) || 0) - (Number(b.sort ?? b.nSort) || 0)); @@ -304,6 +304,40 @@ export async function importOrders({ progressTracker.counts.receiptsdone++; progressTracker.emitProgress(); + }; + + const runTx = async (fn) => { + if (typeof store.transaction === 'function') { + return store.transaction(fn); + } + if (typeof store.provider?.transaction === 'function') { + return store.provider.transaction(fn); + } + return fn(); + }; + + const BATCH_SIZE = 25; + for (let i = 0; i < manRecords.length; i += BATCH_SIZE) { + const batch = manRecords.slice(i, i + BATCH_SIZE); + try { + await runTx(async () => { + for (const m of batch) { + await processManifest(m); + } + }); + } catch (batchErr) { + log.warn(`Batch of ${batch.length} manifests failed in transaction, falling back to one-by-one:`, batchErr.message); + for (const m of batch) { + try { + await processManifest(m); + } catch (singleErr) { + log.warn(`Single manifest failed:`, singleErr.message); + progressTracker.counts.receiptsdone++; + progressTracker.emitProgress(); + } + } + } + await new Promise((resolve) => setImmediate(resolve)); } progressTracker.emitProgress(true);