test: confirm plans before PDA acceptance
This commit is contained in:
@@ -276,13 +276,53 @@ async function loadOneFragment(context, state) {
|
||||
pushed?.status === 'EDITING', `status=${pushed?.status || 'missing'}`, OPTIONS)
|
||||
if (pushed?.status !== 'EDITING') return null
|
||||
|
||||
const unconfirmedTaskResponse = await context.request('GET',
|
||||
`${PDA}/tasks?loadingPlanId=${encodeURIComponent(planId)}&warehouseId=${encodeURIComponent(warehouseId)}`)
|
||||
context.addStep(MODULE, `${sourceOrderNo} 计划确认前不生成 PDA 任务`, unconfirmedTaskResponse,
|
||||
unconfirmedTaskResponse.http === 200 && codeOf(unconfirmedTaskResponse) === 'A0404',
|
||||
`HTTP=${unconfirmedTaskResponse.http}, code=${codeOf(unconfirmedTaskResponse)}, requestId=${unconfirmedTaskResponse.requestId || 'missing'}, traceId=${unconfirmedTaskResponse.traceId || 'missing'}`, OPTIONS)
|
||||
|
||||
const confirmableResponse = await context.request('GET',
|
||||
`/api/platform/v1/first-leg/loading-plans/${encodeURIComponent(planId)}?warehouseId=${encodeURIComponent(warehouseId)}`)
|
||||
const confirmable = context.apiSuccess(MODULE, `读取 ${sourceOrderNo} 计划级确认即时版本`, confirmableResponse, '', OPTIONS)
|
||||
const confirmableVersion = Number(confirmable?.summary?.version)
|
||||
context.assert(MODULE, `${sourceOrderNo} 放舱后整计划允许确认且尚未就绪 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) return null
|
||||
|
||||
const confirmPath = `/api/platform/v1/first-leg/loading-plans/${encodeURIComponent(planId)}/confirm`
|
||||
const confirmBody = Object.freeze({ expectedVersion: confirmableVersion })
|
||||
const confirmHeaders = Object.freeze({ 'Idempotency-Key': `${operationBase}-plan-confirm`.slice(0, 128) })
|
||||
const confirmResponse = await request(context, 'POST', confirmPath, confirmBody, confirmHeaders)
|
||||
const confirmed = context.apiSuccess(MODULE, `计划级确认 ${sourceOrderNo} 并生成唯一 PDA 任务`, confirmResponse, '', OPTIONS)
|
||||
const confirmedTaskId = id(confirmed?.readiness?.pdaTaskId)
|
||||
context.assert(MODULE, `${sourceOrderNo} 计划确认返回 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') return null
|
||||
|
||||
const confirmReplay = await request(context, 'POST', confirmPath, confirmBody, confirmHeaders)
|
||||
context.assert(MODULE, `${sourceOrderNo} 计划确认同键同参精确重放`, confirmReplay,
|
||||
confirmReplay.http === 200 && codeOf(confirmReplay) === '200'
|
||||
&& id(confirmReplay.body?.data?.readiness?.pdaTaskId) === confirmedTaskId
|
||||
&& Number(confirmReplay.body?.data?.version) === Number(confirmed.version),
|
||||
`HTTP=${confirmReplay.http}, code=${codeOf(confirmReplay)}, requestId=${confirmReplay.requestId || 'missing'}, traceId=${confirmReplay.traceId || 'missing'}`, OPTIONS)
|
||||
|
||||
const taskResponse = await context.request('GET',
|
||||
`${PDA}/tasks?loadingPlanId=${encodeURIComponent(planId)}&warehouseId=${encodeURIComponent(warehouseId)}`)
|
||||
const task = context.apiSuccess(MODULE, `读取 ${sourceOrderNo} 的 PDA 任务`, taskResponse, '', OPTIONS)
|
||||
const taskId = id(task?.id)
|
||||
const pickItem = task?.items?.find?.((row) => id(row.loadingPlanItemId) === id(planItem.id))
|
||||
context.assert(MODULE, `余量 ${sourceOrderNo} 不继承已拣数量`, taskResponse,
|
||||
Boolean(taskId) && id(task?.loadingPlanId) === planId && id(task?.containerBookingId) === containerId
|
||||
taskId === confirmedTaskId && id(task?.loadingPlanId) === planId && id(task?.containerBookingId) === containerId
|
||||
&& task?.currentContainerNo === realContainerNo && Boolean(pickItem?.id) && Number(pickItem?.plannedPackageCount) === 1
|
||||
&& Number(pickItem?.pickedPackageCount) === 0,
|
||||
`taskId=${taskId || 'missing'}, picked=${pickItem?.pickedPackageCount ?? 'missing'}, planned=${pickItem?.plannedPackageCount ?? 'missing'}`, OPTIONS)
|
||||
|
||||
Reference in New Issue
Block a user