test: release split bookings before pda
This commit is contained in:
@@ -222,6 +222,35 @@ async function loadOneFragment(context, state) {
|
||||
`containerBookingId=${containerId}, containerNo=${transported?.containerNo || 'missing'}, cabinetNo=${transported?.cabinetNo || 'missing'}`, OPTIONS)
|
||||
if (!transportStable) return null
|
||||
|
||||
const bookingPath = `/api/platform/v1/ocean-bookings/${encodeURIComponent(oceanBookingId)}`
|
||||
let bookingDetailResponse = await context.request('GET', bookingPath)
|
||||
let bookingDetail = context.apiSuccess(MODULE, `回查 ${sourceOrderNo} 柜次所属真实订舱`, bookingDetailResponse, '', OPTIONS)
|
||||
const allocationMatches = bookingDetail?.containerAllocations?.some?.((item) =>
|
||||
id(item?.containerBookingId) === containerId)
|
||||
context.assert(MODULE, `${sourceOrderNo} 订舱分配保持稳定柜次`, bookingDetailResponse,
|
||||
id(bookingDetail?.oceanBooking?.id) === oceanBookingId && allocationMatches,
|
||||
`oceanBookingId=${id(bookingDetail?.oceanBooking?.id) || 'missing'}, containerBookingId=${containerId}, allocations=${bookingDetail?.containerAllocations?.length ?? 'n/a'}`, OPTIONS)
|
||||
if (!allocationMatches || id(bookingDetail?.oceanBooking?.id) !== oceanBookingId) return null
|
||||
|
||||
if (bookingDetail.oceanBooking.status === 'CONFIRMED') {
|
||||
const releaseResponse = await request(context, 'POST', `${bookingPath}/release`, {
|
||||
expectedVersion: Number(bookingDetail.oceanBooking.version),
|
||||
billOfLadingNo: `BL-${operationBase}`.slice(0, 128),
|
||||
vesselName: `SPLIT-VESSEL-${sequence}`.slice(0, 128), voyageNo: `SV-${sequence}`.slice(0, 64),
|
||||
estimatedSailingAt: '2026-09-16T08:00:00', estimatedArrivalAt: '2026-10-16T08:00:00',
|
||||
reason: context.marker,
|
||||
}, { 'Idempotency-Key': `${operationBase}-booking-release`.slice(0, 128) })
|
||||
context.apiSuccess(MODULE, `放舱 ${sourceOrderNo} 的真实订舱并满足 PDA 门禁`, releaseResponse, '', OPTIONS)
|
||||
bookingDetailResponse = await context.request('GET', bookingPath)
|
||||
bookingDetail = context.apiSuccess(MODULE, `回查 ${sourceOrderNo} 的 RELEASED 订舱`, bookingDetailResponse, '', OPTIONS)
|
||||
}
|
||||
const releasedAllocationMatches = bookingDetail?.containerAllocations?.some?.((item) =>
|
||||
id(item?.containerBookingId) === containerId)
|
||||
context.assert(MODULE, `${sourceOrderNo} 仅在 RELEASED 且柜次分配稳定后推送`, bookingDetailResponse,
|
||||
bookingDetail?.oceanBooking?.status === 'RELEASED' && releasedAllocationMatches,
|
||||
`status=${bookingDetail?.oceanBooking?.status || 'missing'}, containerBookingId=${containerId}`, OPTIONS)
|
||||
if (bookingDetail?.oceanBooking?.status !== 'RELEASED' || !releasedAllocationMatches) return null
|
||||
|
||||
const push = await request(context, 'POST', `${SMART}/plans/${planId}/push-preload`,
|
||||
{ expectedVersion: Number(assigned.version) }, { 'Idempotency-Key': `${operationBase}-push` })
|
||||
const pushed = context.apiSuccess(MODULE, `推送 ${sourceOrderNo} 的预装计划`, push, '', OPTIONS)
|
||||
|
||||
Reference in New Issue
Block a user