From 1e171ec81c18bb7f276e9371c7c1f06a4fc9fdf7 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sun, 20 Sep 2026 16:10:48 +0800 Subject: [PATCH] fix: prefer pending pallet for carton scan --- tests/picking-state.test.mjs | 11 +++++++++++ utils/picking-state.js | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/picking-state.test.mjs b/tests/picking-state.test.mjs index 8d8347c..f8ca3b6 100644 --- a/tests/picking-state.test.mjs +++ b/tests/picking-state.test.mjs @@ -149,3 +149,14 @@ test('sealed pallet resolves either its DP code or any member carton as one whol status: state.ITEM_STATUS.PICKED, }) }) + +test('a carton duplicated by a stale task payload selects the remaining sealed pallet', () => { + const picked = { id: 1, unitType: 'SEALED_PALLET', palletNo: 'DP-260920-0001', boxCodes: ['EXXHWK2809191198#20-01'] } + const pending = { id: 2, unitType: 'SEALED_PALLET', palletNo: 'DP-260920-0002', boxCodes: ['EXXHWK2809191198#20-01', 'EXXHWK2809191198#20-19'] } + assert.deepEqual(state.classifyScan([picked, pending], { + 1: state.ITEM_STATUS.PICKED, + 2: state.ITEM_STATUS.PENDING, + }, 'EXXHWK2809191198#20-19'), { + type: 'pallet', item: pending, matchedBy: 'carton', + }) +}) diff --git a/utils/picking-state.js b/utils/picking-state.js index db267b6..a1e3566 100644 --- a/utils/picking-state.js +++ b/utils/picking-state.js @@ -92,7 +92,11 @@ export function classifyScan(items, states, scanCode, scannedBoxCodes = {}) { return { type: 'pallet', item: palletItem } } - const item = items.find((entry) => (entry.boxCodes || []).includes(scanCode)) || null + const matchingItems = items.filter((entry) => (entry.boxCodes || []).includes(scanCode)) + const item = matchingItems.find((entry) => { + const status = states[entry.id] || ITEM_STATUS.PENDING + return status !== ITEM_STATUS.PICKED && status !== ITEM_STATUS.SKIPPED + }) || matchingItems[0] || null if (!item) return { type: 'unknown', item: null } if (isSealedPalletItem(item)) { const status = states[item.id] || ITEM_STATUS.PENDING