适配PDA稳定柜次身份契约
This commit is contained in:
+45
-22
@@ -79,15 +79,26 @@ export function isRemoteReady(inboundId) {
|
||||
return Boolean(session.token && (session.tenantId || inboundId))
|
||||
}
|
||||
|
||||
export function getContainerPickingTask(containerNo, warehouseId) {
|
||||
if (!containerNo) throw new Error('缺少柜次号,无法请求现场任务')
|
||||
const query = [`containerNo=${encodeURIComponent(containerNo)}`]
|
||||
if (warehouseId) query.push(`warehouseId=${encodeURIComponent(warehouseId)}`)
|
||||
export function getContainerPickingTask(identity, warehouseId) {
|
||||
const selector = typeof identity === 'object' && identity !== null ? identity : { containerNo: identity }
|
||||
const taskId = selector.taskId ?? selector.id
|
||||
if (taskId) {
|
||||
if (!warehouseId) throw new Error('缺少作业仓库标识,无法请求现场任务')
|
||||
return request({
|
||||
url: `/first-leg/pda-loading/tasks/${encodeURIComponent(taskId)}?warehouseId=${encodeURIComponent(warehouseId)}`,
|
||||
method: 'GET'
|
||||
}).then(normalizePickingTask)
|
||||
}
|
||||
const query = []
|
||||
if (selector.cabinetNo) query.push(`cabinetNo=${encodeURIComponent(selector.cabinetNo)}`)
|
||||
else if (selector.loadingPlanId) query.push(`loadingPlanId=${encodeURIComponent(selector.loadingPlanId)}`)
|
||||
else if (selector.containerNo) query.push(`containerNo=${encodeURIComponent(selector.containerNo)}`)
|
||||
else throw new Error('缺少稳定柜次标识,无法请求现场任务')
|
||||
if (warehouseId) query.push(`warehouseId=${encodeURIComponent(warehouseId)}`)
|
||||
if (session.tenantId) query.push(`tenantId=${encodeURIComponent(session.tenantId)}`)
|
||||
return request({ url: `/first-leg/pda-loading/tasks?${query.join('&')}`, method: 'GET' }).then((data) => {
|
||||
if (Array.isArray(data)) return data[0] || null
|
||||
if (data?.records) return data.records[0] || null
|
||||
return data
|
||||
const task = Array.isArray(data) ? data[0] : (data?.records ? data.records[0] : data)
|
||||
return task ? normalizePickingTask(task) : null
|
||||
})
|
||||
}
|
||||
|
||||
@@ -104,10 +115,10 @@ export function claimContainerPickingTask(taskId, expectedAssignmentVersion, ope
|
||||
export function getPickingInventorySnapshot(taskId, warehouseId) {
|
||||
if (!taskId) throw new Error('缺少拣货任务标识,无法查询实时库存')
|
||||
if (!warehouseId) throw new Error('缺少作业仓库标识,无法查询实时库存')
|
||||
return request({
|
||||
url: `/first-leg/pda-loading/tasks/${encodeURIComponent(taskId)}/inventory-snapshot?warehouseId=${encodeURIComponent(warehouseId)}`,
|
||||
method: 'GET'
|
||||
})
|
||||
return request({
|
||||
url: `/first-leg/pda-loading/tasks/${encodeURIComponent(taskId)}/inventory-snapshot?warehouseId=${encodeURIComponent(warehouseId)}`,
|
||||
method: 'GET'
|
||||
}).then(normalizeInventorySnapshot)
|
||||
}
|
||||
|
||||
function itemAction(taskId, itemId, path, payload, operationId) {
|
||||
@@ -134,13 +145,13 @@ export function skipContainerItem(taskId, itemId, payload = {}) {
|
||||
}
|
||||
|
||||
export async function submitContainerPickingBatch(task, actions, { warehouseId, operationId, inventorySnapshotToken } = {}) {
|
||||
if (!task?.taskId) throw new Error('缺少拣货任务标识,无法提交')
|
||||
const submitOperationId = operationId || `submit-${task.taskId}-${task.containerNo || ''}-${task.version ?? task.pickingVersion ?? ''}`
|
||||
if (!task?.taskId) throw new Error('缺少拣货任务标识,无法提交')
|
||||
if (!task.loadingPlanId || !task.containerBookingId) throw new Error('缺少稳定柜次标识,无法整批提交')
|
||||
const submitOperationId = operationId || `submit-${task.taskId}-${task.loadingPlanId}-${task.containerBookingId}-${task.version ?? task.pickingVersion ?? ''}`
|
||||
const expectedVersion = task.version ?? task.pickingVersion
|
||||
if (expectedVersion == null) throw new Error('缺少拣货任务版本,无法整批提交')
|
||||
if (!warehouseId) throw new Error('缺少作业仓库标识,无法整批提交')
|
||||
if (!inventorySnapshotToken) throw new Error('缺少实时库存快照,请刷新后重试')
|
||||
if (!task.containerNo) throw new Error('缺少柜号,无法整批提交')
|
||||
const items = (actions || []).map((action) => ({
|
||||
itemId: action.itemId,
|
||||
action: action.type,
|
||||
@@ -155,7 +166,7 @@ export async function submitContainerPickingBatch(task, actions, { warehouseId,
|
||||
url: `/first-leg/pda-loading/tasks/${encodeURIComponent(task.taskId)}/batch`,
|
||||
method: 'POST',
|
||||
header: { 'Idempotency-Key': stableIdempotencyKey(submitOperationId) },
|
||||
data: { warehouseId, containerNo: task.containerNo, expectedVersion, inventorySnapshotToken, items }
|
||||
data: { warehouseId, loadingPlanId: task.loadingPlanId, containerBookingId: task.containerBookingId, expectedVersion, inventorySnapshotToken, items }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -175,23 +186,35 @@ export function normalizePdaOrder(row = {}) {
|
||||
inboundId: row.inboundId ?? row.inbound?.id ?? null,
|
||||
inboundVersion: row.inboundVersion ?? row.inbound?.version ?? null,
|
||||
tenantId: row.tenantId ?? row.accountId ?? row.inbound?.tenantId ?? null,
|
||||
pickingVersion: row.pickingVersion ?? row.loading?.pickingVersion ?? null,
|
||||
taskId: row.taskId ?? row.pdaTaskId ?? row.loadingTaskId ?? row.loading?.taskId ?? null,
|
||||
containerNo: row.containerNo ?? row.container?.containerNo ?? row.loadingPlan?.containerNo ?? row.loading?.containerNo ?? '',
|
||||
pickingVersion: row.pickingVersion ?? row.loading?.pickingVersion ?? null,
|
||||
taskId: row.taskId ?? row.pdaTaskId ?? row.loadingTaskId ?? row.loading?.taskId ?? null,
|
||||
loadingPlanId: row.loadingPlanId ?? row.loading?.loadingPlanId ?? row.loadingPlan?.id ?? null,
|
||||
containerBookingId: row.containerBookingId ?? row.loading?.containerBookingId ?? row.container?.id ?? null,
|
||||
cabinetNo: row.cabinetNo ?? row.loading?.cabinetNo ?? row.container?.cabinetNo ?? row.containerNo ?? '',
|
||||
currentContainerNo: row.currentContainerNo ?? row.containerNo ?? row.container?.containerNo ?? row.loadingPlan?.containerNo ?? row.loading?.containerNo ?? null,
|
||||
warehouseId: row.warehouseId ?? row.warehouse?.id ?? row.loadingPlan?.warehouseId ?? null,
|
||||
displayNo: row.orderNo ?? row.inboundCode ?? row.order?.orderNo ?? `任务 ${row.taskId ?? row.id}`
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizePickingTask(task = {}) {
|
||||
task = task || {}
|
||||
return {
|
||||
...task,
|
||||
pickingVersion: task.pickingVersion ?? task.version ?? null,
|
||||
task = task || {}
|
||||
return {
|
||||
...task,
|
||||
taskId: task.taskId ?? task.id ?? null,
|
||||
loadingPlanId: task.loadingPlanId ?? task.loading?.loadingPlanId ?? null,
|
||||
containerBookingId: task.containerBookingId ?? task.loading?.containerBookingId ?? null,
|
||||
cabinetNo: task.cabinetNo ?? task.loading?.cabinetNo ?? task.containerNo ?? '',
|
||||
currentContainerNo: task.currentContainerNo ?? task.containerNo ?? null,
|
||||
pickingVersion: task.pickingVersion ?? task.version ?? null,
|
||||
inboundVersion: task.inboundVersion ?? null
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeInventorySnapshot(snapshot = {}) {
|
||||
return normalizePickingTask({ ...snapshot, version: snapshot.taskVersion ?? snapshot.version })
|
||||
}
|
||||
|
||||
export function getPickingTask(inboundId, tenantId) {
|
||||
return request({
|
||||
url: `/inbounds/${encodeURIComponent(inboundId)}/loading/picking?tenantId=${encodeURIComponent(tenantQuery(tenantId))}`,
|
||||
|
||||
Reference in New Issue
Block a user