This commit is contained in:
2026-11-02 17:16:15 +08:00
parent 63407d176f
commit 436393d4ea
5 changed files with 76 additions and 14 deletions
+15 -4
View File
@@ -97,7 +97,7 @@ function dispatchWrite(path, request) {
requireDispatchVersion(request?.recordVersion)
return overseasRequest('POST', path, request)
}
// 生产仓租接口尚未配套发布,直接提交既有库存命令,仍保留原请求的防重标识。
// 库存命令与仓租预校验共用本次请求的防重标识。
function requireStockCommandIdentity(request) {
if (!request?.idempotencyKey) throw new Error('出库请求标识缺失,请重新进入任务')
}
@@ -105,8 +105,19 @@ function requireStockCommandIdentity(request) {
export async function pickDispatchItem(dispatchNo, dispatchItemId, request) {
requireDispatchVersion(request?.recordVersion)
requireStockCommandIdentity(request)
await prepareStockRent({
mode: 'DISPATCH',
businessNo: dispatchNo,
itemId: dispatchItemId,
positionId: request.positionId,
packages: request.packages,
cartonMark: request.cartonMark || null,
idempotencyKey: request.idempotencyKey,
productQuantity: request.productQuantity || 0
})
return dispatchWrite(`${DISPATCH_BASE}/${encoded(dispatchNo)}/items/${encoded(dispatchItemId)}/pick`, request)
}
export function completeDispatchLoading(dispatchNo, request) {
return dispatchWrite(`${DISPATCH_BASE}/${encoded(dispatchNo)}/loading-complete`, request)
}
@@ -192,12 +203,12 @@ export async function confirmCargoDiscard(discardNo, palletNo, lines, photoFileI
const body = { lines, photoFileIds, scannedCartonMarks, confirmAllCartons, idempotencyKey: request.idempotencyKey }
requireStockCommandIdentity(request)
// 出库前按同一份货物、照片和幂等键校验仓租,资金就绪后才提交库存扣减。
await prepareDiscardRent({ mode: 'DISCARD', businessNo: discardNo, palletNo, ...body })
await prepareStockRent({ mode: 'DISCARD', businessNo: discardNo, palletNo, ...body })
return normalizeCargoDiscardTask(await overseasRequest('POST', `${CARGO_DISCARD_BASE}/${encoded(discardNo)}/pallets/${encoded(palletNo)}/confirm`, body))
}
/** 本次点击内只查询资金回执,不缓存或自动重放失败的出库命令。 */
async function prepareDiscardRent(body) {
async function prepareStockRent(body) {
const base = '/pda/v1/last-leg/storage-rent/preparations'
let preparationId
try {
@@ -215,7 +226,7 @@ async function prepareDiscardRent(body) {
// 尚未发送出库命令时释放已知的未使用预占,释放失败保留原错误诊断。
if (preparationId) {
try { await overseasRequest('DELETE', `${base}/${encoded(preparationId)}`) }
catch (releaseError) { console.error('[Overseas PDA discard] rent preparation release failed', { code: releaseError?.code, requestId: releaseError?.requestId, traceId: releaseError?.traceId }) }
catch (releaseError) { console.error('[Overseas PDA stock] rent preparation release failed', { code: releaseError?.code, requestId: releaseError?.requestId, traceId: releaseError?.traceId }) }
}
throw error
}