This commit is contained in:
2026-10-26 13:43:39 +08:00
parent 9c2f0a54ec
commit 034b41c39c
7 changed files with 155 additions and 9 deletions
+37 -5
View File
@@ -3,6 +3,7 @@ import { overseasRequest, overseasUpload, overseasDownload } from './overseas.js
const DISPATCH_BASE = '/pda/v1/last-leg/dispatches'
const OUTBOUND_BASE = '/pda/v1/last-leg/outbound-tasks'
const CARGO_DISCARD_BASE = '/pda/v1/last-leg/cargo-discards'
const STORAGE_PREPARATION_BASE = '/pda/v1/last-leg/storage-rent/preparations'
const encoded = (value) => encodeURIComponent(String(value || '').trim())
@@ -97,7 +98,30 @@ function dispatchWrite(path, request) {
requireDispatchVersion(request?.recordVersion)
return overseasRequest('POST', path, request)
}
export function pickDispatchItem(dispatchNo, dispatchItemId, request) {
async function prepareStorageRent(mode, businessNo, request, extra = {}) {
try {
if (!request?.idempotencyKey) throw new Error('出库请求标识缺失,请重新进入任务')
const result = await overseasRequest('POST', STORAGE_PREPARATION_BASE, {
mode, businessNo, idempotencyKey: request.idempotencyKey, ...extra
})
if (result?.ready !== true || !['NOT_REQUIRED', 'READY', 'CONSUMED'].includes(result?.status)) {
const error = new Error(result?.message || (result?.status === 'FREEZE_PENDING' ? '费用确认中,请稍后重试' : '费用尚未确认,请稍后重试'))
error.code = `STORAGE_RENT_${result?.status || 'INVALID_RESPONSE'}`
throw error
}
} catch (cause) {
// 预扣可能已受理,保留完整原请求及幂等键继续核对。
cause.storageRentPreparation = true
throw cause
}
}
export async function pickDispatchItem(dispatchNo, dispatchItemId, request) {
requireDispatchVersion(request?.recordVersion)
await prepareStorageRent('DISPATCH', dispatchNo, request, {
itemId: dispatchItemId, positionId: request.positionId, packages: request.packages,
cartonMark: request.cartonMark, productQuantity: request.productQuantity
})
return dispatchWrite(`${DISPATCH_BASE}/${encoded(dispatchNo)}/items/${encoded(dispatchItemId)}/pick`, request)
}
export function completeDispatchLoading(dispatchNo, request) {
@@ -120,11 +144,17 @@ export function resolveOutboundTask(businessNo) {
return overseasRequest('GET', `${OUTBOUND_BASE}/resolve/${encoded(businessNo)}`)
}
export function pickOutboundTask(taskNo, request) {
export async function pickOutboundTask(taskNo, request) {
await prepareStorageRent('OUTBOUND', taskNo, request, {
itemId: request.outboundPalletItemId, positionId: request.inventoryPositionId,
packages: request.packages, cartonMarks: request.cartonMarks,
skuCode: request.skuCode, productQuantity: request.productQuantity
})
return overseasRequest('POST', `${OUTBOUND_BASE}/${encoded(taskNo)}/pick`, request)
}
export function pickOutboundPallet(taskNo, palletNo, request) {
export async function pickOutboundPallet(taskNo, palletNo, request) {
await prepareStorageRent('OUTBOUND_PALLET', taskNo, request, { palletNo })
return overseasRequest('POST', `${OUTBOUND_BASE}/${encoded(taskNo)}/pallets/${encoded(palletNo)}/pick`, request)
}
@@ -176,8 +206,10 @@ export async function resolveCargoDiscardPallet(palletNo, discardNo) {
return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/resolve`, { palletNo, ...(discardNo ? { discardNo } : {}) }))
}
export async function confirmCargoDiscard(discardNo, palletNo, lines, photoFileIds, scannedCartonMarks = [], confirmAllCartons = false) {
return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/${encoded(discardNo)}/pallets/${encoded(palletNo)}/confirm`, { lines, photoFileIds, scannedCartonMarks, confirmAllCartons }))
export async function confirmCargoDiscard(discardNo, palletNo, lines, photoFileIds, scannedCartonMarks = [], confirmAllCartons = false, request = {}) {
const body = { lines, photoFileIds, scannedCartonMarks, confirmAllCartons, idempotencyKey: request.idempotencyKey }
await prepareStorageRent('DISCARD', discardNo, request, { palletNo, lines, photoFileIds, scannedCartonMarks, confirmAllCartons })
return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/${encoded(discardNo)}/pallets/${encoded(palletNo)}/confirm`, body))
}
const discardPhotoPath = (discardNo, palletNo) => `${CARGO_DISCARD_BASE}/${encoded(discardNo)}/pallets/${encoded(palletNo)}/photos/files`