diff --git a/scripts/admin-test-env-modules/inbound-measurement.mjs b/scripts/admin-test-env-modules/inbound-measurement.mjs index 795daae46..f11d6e88f 100644 --- a/scripts/admin-test-env-modules/inbound-measurement.mjs +++ b/scripts/admin-test-env-modules/inbound-measurement.mjs @@ -13,6 +13,10 @@ function ceiling(value, scale) { const factor = 10 ** scale return Math.ceil((value - Number.EPSILON) * factor) / factor } +function halfUp(value, scale) { + const factor = 10 ** scale + return Math.round((value + Number.EPSILON) * factor) / factor +} function query(tenantId) { return `tenantId=${encodeURIComponent(tenantId)}` } function validPdf(response) { return response.http === 200 && response.contentType.toLowerCase().includes('pdf') @@ -230,18 +234,24 @@ export async function run(context) { 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)) - const unitVolume = ceiling(replacement.length * replacement.width * replacement.height / 1_000_000, 4) - const totalVolume = ceiling(unitVolume * originalPackageCount, 4) + // 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( + weightedOuter.length * weightedOuter.width * weightedOuter.height / 1_000_000, 3) + const totalVolume = unitVolume * originalPackageCount const volumeWeight = ceiling(totalVolume * 167, 3) const girth = ceiling(replacement.length + 2 * (replacement.width + replacement.height), 3) context.assert(MODULE, '覆盖尺寸、箱数和服务端体积公式正确', measuredResponse, measuredItem && closeTo(measuredItem.lengthCm, replacement.length) && closeTo(measuredItem.widthCm, replacement.width) && closeTo(measuredItem.heightCm, replacement.height) && Number(measuredItem.confirmedPackageCount) === originalPackageCount + && closeTo(measuredItem.outerLengthCm, weightedOuter.length) + && closeTo(measuredItem.outerWidthCm, weightedOuter.width) + && closeTo(measuredItem.outerHeightCm, weightedOuter.height) && closeTo(measuredItem.unitVolumeCbm, unitVolume) && closeTo(measuredItem.totalVolumeCbm, totalVolume) && closeTo(measuredItem.volumeWeightKg, volumeWeight) && closeTo(measuredItem.girthCm, girth) && closeTo(measured.actualVolumeCbm, totalVolume) && closeTo(measured.volumeWeightKg, volumeWeight), - `unitVolume=${unitVolume}, totalVolume=${totalVolume}, volumeWeight=${volumeWeight}, girth=${girth}`, OPTIONS) + `weightedOuter=${weightedOuter.length}x${weightedOuter.width}x${weightedOuter.height}, unitVolume=${unitVolume}, totalVolume=${totalVolume}, volumeWeight=${volumeWeight}, girth=${girth}`, OPTIONS) let inboundDetailId = measuredItem?.inboundDetailId if (!inboundDetailId) {