贴标申请,仓储转运
This commit is contained in:
@@ -293,7 +293,7 @@ export async function verifyReturnOutbound(context, merchantToken, pdaToken, {
|
||||
const before = await snapshot()
|
||||
const carton = before.carton
|
||||
require('出库箱历史明细归属及SKU数量有效', carton?.cartonMark === cartonMark && carton.customerId === customerId
|
||||
&& carton.overseasWarehouseId === warehouseId && carton.sourceReturnNo === returnNo && carton.status === 'AVAILABLE'
|
||||
&& carton.overseasWarehouseId === warehouseId && carton.sourceReturnNo === returnNo && carton.status === 'OUTBOUND_PENDING'
|
||||
&& carton.items?.length > 0 && new Set(carton.items.map(row => row.skuCode)).size === carton.items.length
|
||||
&& Number(carton.skuTypes) === carton.items.length
|
||||
&& carton.items.every(row => nonBlank(row.skuCode) && Number.isSafeInteger(Number(row.quantity)) && Number(row.quantity) > 0)
|
||||
@@ -315,7 +315,7 @@ export async function verifyReturnOutbound(context, merchantToken, pdaToken, {
|
||||
const quantities = new Map(carton.items.map(row => [row.skuCode, Number(row.quantity)]))
|
||||
require('待出库SKU库存唯一且足够', new Set(before.balances.map(row => row.skuCode)).size === before.balances.length
|
||||
&& [...quantities].every(([sku, quantity]) => before.balances.some(row => row.skuCode === sku
|
||||
&& Number(row.totalQuantity) >= quantity && Number(row.availableQuantity) >= quantity && Number(row.cartonQuantity) >= 1)))
|
||||
&& Number(row.totalQuantity) >= quantity && Number(row.cartonQuantity) >= 1)))
|
||||
const pickBody = { outboundPalletItemId: item.outboundPalletItemId, inventoryPositionId: null,
|
||||
packages: 1, cartonMarks: [position.cartonMark], idempotencyKey: key(context, `${action}-PICK`) }
|
||||
await command(pdaToken, 'POST', 'PDA扫描真实退货箱', `${path}/pick`, pickBody)
|
||||
@@ -323,7 +323,7 @@ export async function verifyReturnOutbound(context, merchantToken, pdaToken, {
|
||||
const expectedBalances = before.balances.map(row => {
|
||||
const quantity = quantities.get(row.skuCode)
|
||||
return quantity === undefined ? row : { ...row, totalQuantity: Number(row.totalQuantity) - quantity,
|
||||
availableQuantity: Number(row.availableQuantity) - quantity, cartonQuantity: Number(row.cartonQuantity) - 1 }
|
||||
cartonQuantity: Number(row.cartonQuantity) - 1 }
|
||||
})
|
||||
const withoutTime = rows => rows.map(({ updatedAt, ...row }) => row)
|
||||
require('逐SKU扣减实际件数与一个可用箱且其他SKU不变', facts(withoutTime(picked.balances)) === facts(withoutTime(expectedBalances)),
|
||||
|
||||
@@ -37,7 +37,7 @@ test('relabelled outbound refuses another relabel application before creating an
|
||||
|
||||
function outboundHarness(fault = '', quantity = 5, multiSku = false, wire = true) {
|
||||
const calls = []
|
||||
let picked = false, completed = false, duplicate = false, drift = false
|
||||
let picked = false, completed = false, duplicate = false, drift = false, reserved = true
|
||||
const context = { marker: 'fixture', token: 'admin', context: { merchantQualificationFixture: { tenantId: '123' } },
|
||||
createdResources: { phase4OverseasReturnReceipt: {} }, addStep() {},
|
||||
assert(_m, name, _r, passed) { assert.ok(passed, name) },
|
||||
@@ -56,14 +56,14 @@ function outboundHarness(fault = '', quantity = 5, multiSku = false, wire = true
|
||||
} else if (fault === 'replay deducts') duplicate = true
|
||||
data = { status: 'IN_PROGRESS' }
|
||||
} else if (path.endsWith('/complete')) { completed = true; data = { status: 'COMPLETED' } }
|
||||
else if (path.endsWith('/candidates')) data = [{ returnNo: 'RT-1', cartonMark: 'BOX' }]
|
||||
else if (path.endsWith('/outbound-orders/return')) data = { taskNo: 'TASK', outboundNo: 'OUT' }
|
||||
else if (path.endsWith('/candidates')) { reserved = false; data = [{ returnNo: 'RT-1', cartonMark: 'BOX' }] }
|
||||
else if (path.endsWith('/outbound-orders/return')) { reserved = true; data = { taskNo: 'TASK', outboundNo: 'OUT' } }
|
||||
else if (path.endsWith('/return-inventory')) {
|
||||
assert.equal(url.searchParams.get('customerId'), '123'); assert.equal(url.searchParams.get('overseasWarehouseId'), '42')
|
||||
let deducted = picked ? (fault === 'package count deduction' ? 1 : quantity) : 0
|
||||
if (duplicate || (completed && fault === 'complete deducts')) deducted += quantity
|
||||
const stock = { customerId: fault === 'wrong scope' ? 'other' : '123', overseasWarehouseId: '42', skuCode: 'SKU',
|
||||
totalQuantity: quantity - deducted, availableQuantity: quantity - deducted,
|
||||
totalQuantity: quantity - deducted, availableQuantity: reserved ? 0 : quantity - deducted,
|
||||
cartonQuantity: picked && fault !== 'carton not deducted' ? 0 : 1, updatedAt: picked ? 'after' : 'before' }
|
||||
const unrelated = { ...stock, skuCode: 'OTHER', totalQuantity: drift ? 8 : 9, availableQuantity: 9, cartonQuantity: 1 }
|
||||
data = { total: fault === 'truncated page' ? 3 : 2, records: url.searchParams.get('page') === '1' ? [stock]
|
||||
@@ -77,7 +77,7 @@ function outboundHarness(fault = '', quantity = 5, multiSku = false, wire = true
|
||||
data = { records: rows.reverse(), total: rows.length }
|
||||
} else if (path.includes('/return-inventory/cartons/')) data = { cartonMark: 'BOX', customerId: '123',
|
||||
overseasWarehouseId: '42', sourceReturnNo: 'RT-1', relabelNo: 'RL-1', relabelStatus: 'COMPLETED',
|
||||
status: picked ? 'OUTBOUNDED' : 'AVAILABLE', skuTypes: 1, totalQuantity: quantity,
|
||||
status: picked ? 'OUTBOUNDED' : reserved ? 'OUTBOUND_PENDING' : 'AVAILABLE', skuTypes: 1, totalQuantity: quantity,
|
||||
receivedAt: picked && fault === 'history time drift' ? '2026-10-02T17:54:38.305' : '2026-10-02T17:52:56.794',
|
||||
items: [{ skuCode: 'SKU', quantity: picked && fault === 'history erased' ? 0 : quantity }] }
|
||||
else if (path.endsWith('/outbound-orders/OUT')) data = { outbound: { outboundNo: 'OUT', outboundType: 'RETURN_OUTBOUND', status: completed ? 'OUTBOUNDED' : 'WAIT_PICK' }, pallets: [{ id: '9', cartonMarks: 'BOX', pickedPackageCount: picked ? 1 : 0 }] }
|
||||
@@ -89,7 +89,7 @@ function outboundHarness(fault = '', quantity = 5, multiSku = false, wire = true
|
||||
if (multiSku && path.endsWith('/return-inventory')) {
|
||||
data.total += 1
|
||||
if (url.searchParams.get('page') === '2') data.records.push({ customerId: '123', overseasWarehouseId: '42',
|
||||
skuCode: 'SKU-B', totalQuantity: picked ? 0 : 2, availableQuantity: picked ? 0 : 2, cartonQuantity: picked ? 0 : 1 })
|
||||
skuCode: 'SKU-B', totalQuantity: picked ? 0 : 2, availableQuantity: reserved ? 0 : picked ? 0 : 2, cartonQuantity: picked ? 0 : 1 })
|
||||
}
|
||||
if (multiSku && path.includes('/return-inventory/cartons/')) {
|
||||
data.skuTypes = 2; data.totalQuantity += 2; data.items.push({ skuCode: 'SKU-B', quantity: 2 })
|
||||
|
||||
Reference in New Issue
Block a user