test: confirm plans before PDA acceptance
This commit is contained in:
@@ -185,10 +185,57 @@ async function createPlanTask(context, label) {
|
||||
const pushResponse = await post(context, `${SMART}/plans/${plan.id}/push-preload`,
|
||||
{ expectedVersion: Number(plan.version) }, `${label}-push`)
|
||||
plan = context.apiSuccess(MODULE, `${label} 补真实柜号后推送预装`, pushResponse, '', OPTIONS)
|
||||
const planId = id(plan?.id)
|
||||
const unconfirmedTaskResponse = await context.request('GET',
|
||||
`${PDA}/tasks?loadingPlanId=${planId}&warehouseId=${source.warehouseId}`)
|
||||
context.addStep(MODULE, `${label} 计划确认前不生成 PDA 任务`, unconfirmedTaskResponse,
|
||||
unconfirmedTaskResponse.http === 200 && String(unconfirmedTaskResponse?.body?.code) === 'A0404',
|
||||
`HTTP=${unconfirmedTaskResponse.http}, code=${unconfirmedTaskResponse?.body?.code ?? 'missing'}, requestId=${unconfirmedTaskResponse.requestId || 'missing'}, traceId=${unconfirmedTaskResponse.traceId || 'missing'}`, OPTIONS)
|
||||
|
||||
const confirmableResponse = await context.request('GET',
|
||||
`${LOADING}/loading-plans/${planId}?warehouseId=${source.warehouseId}`)
|
||||
const confirmable = context.apiSuccess(MODULE, `${label} 读取计划级确认即时版本`, confirmableResponse, '', OPTIONS)
|
||||
const confirmableVersion = Number(confirmable?.summary?.version)
|
||||
context.assert(MODULE, `${label} 整计划允许确认且 PDA 尚未就绪`, confirmableResponse,
|
||||
Number.isInteger(confirmableVersion) && confirmable?.summary?.status === 'EDITING'
|
||||
&& confirmable?.summary?.readiness?.canConfirm === true
|
||||
&& confirmable?.summary?.readiness?.readyForPda === false
|
||||
&& confirmable?.summary?.readiness?.pdaTaskId == null,
|
||||
`version=${confirmable?.summary?.version ?? 'missing'}, canConfirm=${confirmable?.summary?.readiness?.canConfirm}, pdaTaskId=${id(confirmable?.summary?.readiness?.pdaTaskId) || 'none'}`, OPTIONS)
|
||||
if (!Number.isInteger(confirmableVersion) || confirmable?.summary?.readiness?.canConfirm !== true) {
|
||||
throw new Error(`${label} 计划尚未满足整计划确认门禁`)
|
||||
}
|
||||
|
||||
const confirmPath = `${LOADING}/loading-plans/${planId}/confirm`
|
||||
const confirmBody = Object.freeze({ expectedVersion: confirmableVersion })
|
||||
const confirmHeaders = Object.freeze({
|
||||
'Idempotency-Key': operationId(context, `${label}-plan-confirm`),
|
||||
})
|
||||
const confirmResponse = await context.request('POST', confirmPath, confirmBody, context.token, confirmHeaders)
|
||||
const confirmed = context.apiSuccess(MODULE, `${label} 计划级确认并生成唯一 PDA 任务`, confirmResponse, '', OPTIONS)
|
||||
const confirmedTaskId = id(confirmed?.readiness?.pdaTaskId)
|
||||
context.assert(MODULE, `${label} 计划确认返回 CONFIRMED 与 readyForPda`, confirmResponse,
|
||||
id(confirmed?.planId) === planId && id(confirmed?.containerBookingId) === containerId
|
||||
&& confirmed?.confirmationStatus === 'CONFIRMED'
|
||||
&& confirmed?.readiness?.confirmationStatus === 'CONFIRMED'
|
||||
&& confirmed?.readiness?.readyForPda === true && Boolean(confirmedTaskId)
|
||||
&& Number(confirmed?.version) > confirmableVersion,
|
||||
`confirmationStatus=${confirmed?.confirmationStatus || 'missing'}, readyForPda=${confirmed?.readiness?.readyForPda}, pdaTaskId=${confirmedTaskId || 'missing'}`, OPTIONS)
|
||||
if (!confirmedTaskId || confirmed?.confirmationStatus !== 'CONFIRMED') {
|
||||
throw new Error(`${label} 计划确认未生成唯一 PDA 任务`)
|
||||
}
|
||||
|
||||
const confirmReplay = await context.request('POST', confirmPath, confirmBody, context.token, confirmHeaders)
|
||||
context.assert(MODULE, `${label} 计划确认同键同参精确重放`, confirmReplay,
|
||||
confirmReplay.http === 200 && String(confirmReplay?.body?.code) === '200'
|
||||
&& id(confirmReplay?.body?.data?.readiness?.pdaTaskId) === confirmedTaskId
|
||||
&& Number(confirmReplay?.body?.data?.version) === Number(confirmed.version),
|
||||
`HTTP=${confirmReplay.http}, code=${confirmReplay?.body?.code ?? 'missing'}, requestId=${confirmReplay.requestId || 'missing'}, traceId=${confirmReplay.traceId || 'missing'}`, OPTIONS)
|
||||
|
||||
const taskResponse = await context.request('GET',
|
||||
`${PDA}/tasks?loadingPlanId=${plan.id}&warehouseId=${source.warehouseId}`)
|
||||
`${PDA}/tasks?loadingPlanId=${planId}&warehouseId=${source.warehouseId}`)
|
||||
const task = context.apiSuccess(MODULE, `${label} 读取 PDA 任务`, taskResponse, '', OPTIONS)
|
||||
if (!task?.id || !task?.items?.[0]?.id) throw new Error(`${label} PDA 任务未生成`)
|
||||
if (id(task?.id) !== confirmedTaskId || !task?.items?.[0]?.id) throw new Error(`${label} PDA 任务未生成或身份漂移`)
|
||||
return { source, containerId, containerNo, plan, task }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user