import { runDomesticLinkRegression } from './dropship-pallet-matrix.mjs' import { channelGroup } from './smart-loading-channel-group.mjs' export const run = runDomesticLinkRegression // All resources come from this run's HTTP producer. No direct database writes. export async function exerciseOldCabinets({ context, group, pallets, command, check, rounds, active = false }) { const summary = group[0].summary const evidence = context.createdResources.pdaLoadingLinkRegression ||= { cabinets: [], scenarios: [] } for (let round = 0; round < rounds; round++) { const cabinet = await command('创建回归旧柜', 'POST', '/api/platform/v1/containers', { channelGroupCode: channelGroup(summary.channelCode), warehouseId: String(summary.warehouseId), containerType: '40HQ', capacityCbm: 68, maxWeightKg: 19500, }) const smart = '/api/platform/v1/first-leg/smart-loading' let plan = await command('读取回归旧柜计划', 'GET', `${smart}/plans/by-booking/${cabinet.id}`) const path = `${smart}/plans/${plan.id}` const record = { cabinetNo: cabinet.cabinetNo, cabinetId: cabinet.id, planId: plan.id, active, rounds: round + 1 } evidence.cabinets.push(record) for (const pallet of pallets) { plan = await command('旧柜加入整托', 'POST', `${path}/pallet-assignments`, { palletId: String(pallet.palletId), expectedVersion: Number(plan.version), operationId: `${context.marker}-old-add-${plan.id}-${pallet.palletId}`, }) } check('旧柜真实加入箱数大于零', null, plan.items?.reduce((sum, i) => sum + Number(i.packageCount), 0) > 0) if (!active) { for (const pallet of pallets) { plan = await command('旧柜全部移除整托', 'DELETE', `${path}/pallet-assignments/${pallet.palletId}`, { expectedPlanVersion: Number(plan.version), operationId: `${context.marker}-old-del-${plan.id}-${pallet.palletId}`, }) } check('旧柜移除后没有有效明细', null, plan.items?.length === 0) } record.links = [] for (const item of group) { const links = await command('回查旧柜关联及有效箱数', 'GET', `/api/platform/v1/inbounds/${item.source.inboundId}/preload/loading-plans?tenantId=${item.order.tenantId}`) const current = links.filter(link => String(link.loadingPlanId) === String(plan.id)) record.links.push(...current) check('旧柜关联数量与真实分配一致', null, active ? current.some(link => Number(link.allocatedPackageCount) > 0) : current.every(link => Number(link.allocatedPackageCount) === 0)) } } }