整批提交原子性的方案
This commit is contained in:
@@ -5,6 +5,12 @@ export const ITEM_STATUS = Object.freeze({
|
||||
SKIPPED: 'skipped'
|
||||
})
|
||||
|
||||
export function isSealedPalletItem(item) {
|
||||
return item?.unitType === 'SEALED_PALLET'
|
||||
|| item?.palletId !== null && item?.palletId !== undefined
|
||||
|| item?.indivisible === true
|
||||
}
|
||||
|
||||
export function createItemStates(items) {
|
||||
return items.reduce((states, item) => {
|
||||
states[item.id] = ITEM_STATUS.PENDING
|
||||
@@ -61,8 +67,24 @@ export function submitStates(items, states) {
|
||||
}
|
||||
|
||||
export function classifyScan(items, states, scanCode, scannedBoxCodes = {}) {
|
||||
const palletItem = items.find((entry) => isSealedPalletItem(entry) && entry.palletNo === scanCode) || null
|
||||
if (palletItem) {
|
||||
const status = states[palletItem.id] || ITEM_STATUS.PENDING
|
||||
if (scannedBoxCodes[scanCode] || status === ITEM_STATUS.PICKED) {
|
||||
return { type: 'processed', item: palletItem, status }
|
||||
}
|
||||
return { type: 'pallet', item: palletItem }
|
||||
}
|
||||
|
||||
const item = items.find((entry) => (entry.boxCodes || []).includes(scanCode)) || null
|
||||
if (!item) return { type: 'unknown', item: null }
|
||||
if (isSealedPalletItem(item)) {
|
||||
const status = states[item.id] || ITEM_STATUS.PENDING
|
||||
if (scannedBoxCodes[scanCode] || status === ITEM_STATUS.PICKED) {
|
||||
return { type: 'processed', item, status }
|
||||
}
|
||||
return { type: 'pallet', item, matchedBy: 'carton' }
|
||||
}
|
||||
if (scannedBoxCodes[scanCode]) return { type: 'processed', item, status: states[item.id] || ITEM_STATUS.PARTIAL }
|
||||
|
||||
const status = states[item.id] || ITEM_STATUS.PENDING
|
||||
|
||||
Reference in New Issue
Block a user