优化提交

This commit is contained in:
2026-09-14 09:58:30 +08:00
parent 5ffd6c0118
commit 8cf7c4b9c9
93 changed files with 2945 additions and 188 deletions
@@ -39,6 +39,49 @@ function markerFixture(context) {
return { ...fixture, palletIds }
}
async function runRelabelDispatch(context, relabel) {
const candidateResult = await api(context, 'GET', '查询本轮换标托盘智能排车候选',
query(`${BASE}/candidates`, { orderNo: relabel.relabelNo, sourceStage: 'RECEIVED' }))
const candidates = (Array.isArray(candidateResult.data) ? candidateResult.data : [])
.filter((value) => value?.sourceStage === 'RELABEL'
&& relabel.targetPalletIds.includes(id(value?.warehousePalletId)))
const actualMarks = candidates.flatMap((value) => String(value?.relabelCartonMarks || '')
.split(',').map((mark) => mark.trim()).filter(Boolean))
context.assert(MODULE, '智能排车只带出本轮换标后的FBA箱唛', candidateResult.response,
candidates.length === relabel.targetPalletIds.length
&& relabel.relabelCartonMarks.every((mark) => actualMarks.includes(mark))
&& candidates.every((value) => !String(value?.cartonMarks || '').trim()),
`pallets=${candidates.length}, relabelMarks=${actualMarks.join(',')}, normalMarks=${candidates.map((value) => value?.cartonMarks).filter(Boolean).join(',')}; ${trace(candidateResult.response)}`,
OPTIONS)
if (candidates.length !== relabel.targetPalletIds.length) return
const arranged = await api(context, 'POST', '将本轮换标托盘创建待出库排车', `${BASE}/pre-arrange`, {
planPalletIds: candidates.map((value) => id(value.warehousePalletId)),
route: `${context.marker}-RELABEL-ROUTE`, fbaAppointmentNo: null,
fbaAppointmentStatus: null, vehicleAppointmentStatus: null, relabelNo: relabel.relabelNo,
})
const dispatchNo = id(arranged.data?.dispatchNo)
context.assert(MODULE, '换标多托盘原子预排并冻结换标箱唛', arranged.response,
Boolean(dispatchNo) && arranged.data?.status === 'PENDING_DEPARTURE'
&& Number(arranged.data?.palletCount) === candidates.length
&& Array.isArray(arranged.data?.items)
&& arranged.data.items.every((item) => item?.sourceStage === 'RELABEL'),
`dispatchNo=${dispatchNo || 'missing'}, pallets=${arranged.data?.palletCount ?? 'missing'}; ${trace(arranged.response)}`,
OPTIONS)
if (!dispatchNo) return
Object.assign(context.createdResources.phase4OverseasDispatch, {
dispatchNo, dispatchId: id(arranged.data?.id), finalStatus: arranged.data?.status || null,
relabelNo: relabel.relabelNo, planPalletId: null,
})
const detail = await api(context, 'GET', '回查本轮换标排车详情', `${BASE}/${encodeURIComponent(dispatchNo)}`)
const detailMarks = (detail.data?.items || []).flatMap((item) => String(item?.cartonMarks || '')
.split(',').map((mark) => mark.trim()).filter(Boolean))
context.assert(MODULE, '排车详情冻结全部换标后箱唛且不混入原箱唛', detail.response,
relabel.relabelCartonMarks.every((mark) => detailMarks.includes(mark))
&& relabel.sourceCartonMarks.every((mark) => !detailMarks.includes(mark)),
`frozenMarks=${detailMarks.join(',')}; ${trace(detail.response)}`, OPTIONS)
}
export async function run(context) {
context.createdResources.phase4OverseasDispatch = {
marker: context.marker, dispatchNo: null, dispatchId: null, draftToken: null,
@@ -53,6 +96,12 @@ export async function run(context) {
`records=${records(initialPage.data).length}; ${trace(initialPage.response)}`, OPTIONS)
if (!success(initialPage.response)) return
const relabel = context.createdResources?.phase4OverseasRelabel
if (relabel?.marker === context.marker && relabel?.status === 'READY_FOR_OUTBOUND') {
await runRelabelDispatch(context, relabel)
return
}
const fixture = markerFixture(context)
if (!fixture) {
blocker(context, '取得本轮海外PDA已收货托盘前置',