test: align phase3 and overseas business acceptance
This commit is contained in:
@@ -339,9 +339,9 @@ export async function run(context) {
|
||||
&& closeTo(rescan?.lengthCm, replacement.length),
|
||||
`sameItem=${asId(rescan?.itemId) === asId(firstScan.itemId)}, confirmedPackageCount=${rescan?.confirmedPackageCount ?? 'missing'}`, OPTIONS)
|
||||
|
||||
const measuredResponse = await context.request('GET', measurementPath)
|
||||
const measured = context.apiSuccess(MODULE, '回查覆盖后的尺寸与体积结果', measuredResponse, '', OPTIONS)
|
||||
const measuredItem = measured?.items?.find((item) => asId(item.id) === asId(firstScan.itemId))
|
||||
let measuredResponse = await context.request('GET', measurementPath)
|
||||
let measured = context.apiSuccess(MODULE, '回查覆盖后的尺寸与体积结果', measuredResponse, '', OPTIONS)
|
||||
let measuredItem = measured?.items?.find((item) => asId(item.id) === asId(firstScan.itemId))
|
||||
// The verified customer rule maps this scan to EXTRA_LARGE 60x50x50cm and adds 2cm per edge.
|
||||
const weightedOuter = { length: 64, width: 54, height: 54 }
|
||||
const unitVolume = halfUp(
|
||||
@@ -362,6 +362,63 @@ export async function run(context) {
|
||||
&& closeTo(measured.actualVolumeCbm, totalVolume) && closeTo(measured.volumeWeightKg, volumeWeight),
|
||||
`weightedOuter=${weightedOuter.length}x${weightedOuter.width}x${weightedOuter.height}, unitVolume=${unitVolume}, totalVolume=${totalVolume}, volumeWeight=${volumeWeight}, girth=${girth}`, OPTIONS)
|
||||
|
||||
const incrementalDetailCount = Number(context.context?.phase3LoadingIncrementalDetailCount || 1)
|
||||
if (incrementalDetailCount > 1) {
|
||||
const packagesPerDetail = Number(context.context?.phase3LoadingIncrementalPackageCount || 1)
|
||||
const expectedPackages = incrementalDetailCount * packagesPerDetail
|
||||
context.assert(MODULE, '动态增量多明细箱数前置与冻结总数一致', measuredResponse,
|
||||
expectedPackages === originalPackageCount,
|
||||
`detailCount=${incrementalDetailCount}, packagesPerDetail=${packagesPerDetail}, frozen=${originalPackageCount}`, OPTIONS)
|
||||
if (expectedPackages === originalPackageCount) {
|
||||
const resetFirstCountResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/items/${firstScan.itemId}/confirmed-package-count?${query(tenantId)}`,
|
||||
{ measurementVersion: Number(measured?.version), confirmedPackageCount: packagesPerDetail })
|
||||
const resetFirstCount = context.apiSuccess(MODULE,
|
||||
'增量 fixture 将首条货物确认箱数恢复为自身两箱', resetFirstCountResponse,
|
||||
`itemId=${asId(firstScan.itemId)}, confirmedPackageCount=${packagesPerDetail}`, OPTIONS)
|
||||
context.assert(MODULE, '增量首条货物箱数和版本更新正确', resetFirstCountResponse,
|
||||
Number(resetFirstCount?.confirmedPackageCount) === packagesPerDetail
|
||||
&& Number(resetFirstCount?.measurementVersion) === Number(measured?.version) + 1,
|
||||
`version=${resetFirstCount?.measurementVersion ?? 'missing'}`, OPTIONS)
|
||||
|
||||
for (let detailIndex = 1; detailIndex < incrementalDetailCount; detailIndex += 1) {
|
||||
const cartonIndex = detailIndex * packagesPerDetail + 1
|
||||
const detailBoxCode = `${inboundCode}#${originalPackageCount}-${cartonIndex}`
|
||||
const scanResponse = await multipartRequest(context, scanPath, {
|
||||
boxCode: detailBoxCode, ...replacement,
|
||||
scannedShipmentId: `FBA-${context.marker.slice(-12)}-${String(detailIndex + 2).padStart(2, '0')}`,
|
||||
machineNo: `MJ-ADMIN-E2E-INC-${detailIndex + 1}`,
|
||||
measuredAt: new Date().toISOString().slice(0, 19),
|
||||
})
|
||||
const scanned = context.apiSuccess(MODULE,
|
||||
`增量 fixture 扫描第${detailIndex + 1}条独立货物箱码`, scanResponse,
|
||||
`boxCode=${detailBoxCode}`, OPTIONS)
|
||||
context.assert(MODULE, `增量第${detailIndex + 1}条扫描解析独立货物`, scanResponse,
|
||||
scanned?.created === true && asId(scanned?.itemId)
|
||||
&& asId(scanned?.itemId) !== asId(firstScan.itemId),
|
||||
`itemId=${asId(scanned?.itemId) || 'missing'}, inboundDetailId=${asId(scanned?.inboundDetailId) || 'pending-query'}`, OPTIONS)
|
||||
if (!scanned?.itemId) continue
|
||||
const countDetailResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/items/${scanned.itemId}/confirmed-package-count?${query(tenantId)}`,
|
||||
{ measurementVersion: Number(scanned.measurementVersion), confirmedPackageCount: packagesPerDetail })
|
||||
const countDetail = context.apiSuccess(MODULE,
|
||||
`增量第${detailIndex + 1}条货物确认自身箱数`, countDetailResponse,
|
||||
`confirmedPackageCount=${packagesPerDetail}`, OPTIONS)
|
||||
context.assert(MODULE, `增量第${detailIndex + 1}条货物箱数更新正确`, countDetailResponse,
|
||||
Number(countDetail?.confirmedPackageCount) === packagesPerDetail,
|
||||
`measurementVersion=${countDetail?.measurementVersion ?? 'missing'}`, OPTIONS)
|
||||
}
|
||||
measuredResponse = await context.request('GET', measurementPath)
|
||||
measured = context.apiSuccess(MODULE, '回查增量 fixture 四条测量明细', measuredResponse, '', OPTIONS)
|
||||
measuredItem = measured?.items?.find((item) => asId(item.id) === asId(firstScan.itemId))
|
||||
const detailIds = new Set((measured?.items || []).map((item) => asId(item?.inboundDetailId)).filter(Boolean))
|
||||
context.assert(MODULE, '增量 fixture 形成四条真实独立货物测量明细', measuredResponse,
|
||||
detailIds.size >= incrementalDetailCount
|
||||
&& measured.items.filter((item) => detailIds.has(asId(item?.inboundDetailId))).length >= incrementalDetailCount,
|
||||
`measurementItems=${measured?.items?.length ?? 'missing'}, distinctInboundDetails=${detailIds.size}`, OPTIONS)
|
||||
}
|
||||
}
|
||||
|
||||
let inboundDetailId = measuredItem?.inboundDetailId
|
||||
if (!inboundDetailId) {
|
||||
const orderId = asId(frozenSummary?.orderId || context.createdResources?.orders?.orderId)
|
||||
@@ -387,10 +444,18 @@ export async function run(context) {
|
||||
return
|
||||
}
|
||||
|
||||
const draftPayload = {
|
||||
measurementId: measured.measurementId, version: Number(measured.version),
|
||||
actualGoodsName: `墨家测量验收-${context.marker.slice(-12)}`,
|
||||
items: [{
|
||||
const draftItems = incrementalDetailCount > 1
|
||||
? (measured?.items || []).filter((item) => asId(item?.inboundDetailId) && asId(item?.intelligentImageFileId))
|
||||
.slice(0, incrementalDetailCount).map((item) => ({
|
||||
inboundDetailId: item.inboundDetailId, itemNo: item.itemNo,
|
||||
boxSpecification: item.boxSpecification, packageCount: Number(item.confirmedPackageCount),
|
||||
lengthCm: Number(item.lengthCm), widthCm: Number(item.widthCm), heightCm: Number(item.heightCm),
|
||||
intelligentImageFileId: item.intelligentImageFileId,
|
||||
overLimitWarning: item.overLimitWarning ?? null,
|
||||
outerLengthCm: item.outerLengthCm ?? null, outerWidthCm: item.outerWidthCm ?? null,
|
||||
outerHeightCm: item.outerHeightCm ?? null, remark: context.marker,
|
||||
}))
|
||||
: [{
|
||||
inboundDetailId, itemNo: measuredItem.itemNo,
|
||||
boxSpecification: measuredItem.boxSpecification, packageCount: originalPackageCount,
|
||||
lengthCm: replacement.length, widthCm: replacement.width, heightCm: replacement.height,
|
||||
@@ -398,12 +463,16 @@ export async function run(context) {
|
||||
overLimitWarning: measuredItem.overLimitWarning ?? null,
|
||||
outerLengthCm: measuredItem.outerLengthCm ?? null, outerWidthCm: measuredItem.outerWidthCm ?? null,
|
||||
outerHeightCm: measuredItem.outerHeightCm ?? null, remark: context.marker,
|
||||
}],
|
||||
}]
|
||||
const draftPayload = {
|
||||
measurementId: measured.measurementId, version: Number(measured.version),
|
||||
actualGoodsName: `墨家测量验收-${context.marker.slice(-12)}`,
|
||||
items: draftItems,
|
||||
}
|
||||
const draftResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/draft?${query(tenantId)}`, draftPayload)
|
||||
const draft = context.apiSuccess(MODULE, '保存同一测量批次草稿', draftResponse,
|
||||
`measurementId=${asId(measured.measurementId)}, items=1`, OPTIONS)
|
||||
`measurementId=${asId(measured.measurementId)}, items=${draftItems.length}`, OPTIONS)
|
||||
context.assert(MODULE, '草稿沿用批次并递增版本', draftResponse,
|
||||
asId(draft?.measurementId) === asId(measured.measurementId)
|
||||
&& Number(draft?.version) === Number(measured.version) + 1 && draft?.status === 'DRAFT',
|
||||
|
||||
Reference in New Issue
Block a user