This commit is contained in:
2026-08-27 09:21:01 +08:00
parent 817e356c21
commit 554b6c93b7
8 changed files with 419 additions and 27 deletions
@@ -14,7 +14,8 @@ function closeTo(actual, expected, tolerance = 0.000001) {
}
function ceiling(value, scale) {
const factor = 10 ** scale
return Math.ceil((value - Number.EPSILON) * factor) / factor
const floatingPointNoise = Number.EPSILON * Math.max(1, Math.abs(value)) * 4
return Math.ceil((value - floatingPointNoise) * factor) / factor
}
function halfUp(value, scale) {
const factor = 10 ** scale
@@ -375,24 +376,31 @@ export async function run(context) {
const incrementalDetailCount = Number(context.context?.phase3LoadingIncrementalDetailCount || 1)
if (incrementalDetailCount > 1) {
const packagesPerDetail = Number(context.context?.phase3LoadingIncrementalPackageCount || 1)
const expectedPackages = incrementalDetailCount * packagesPerDetail
const configuredPackageCounts = context.context?.waitSplitVariant?.packageCounts
const detailPackageCounts = Array.isArray(configuredPackageCounts)
&& configuredPackageCounts.length === incrementalDetailCount
? configuredPackageCounts.map(Number)
: Array.from({ length: incrementalDetailCount }, () => packagesPerDetail)
const expectedPackages = detailPackageCounts.reduce((sum, count) => sum + count, 0)
context.assert(MODULE, '动态增量多明细箱数前置与冻结总数一致', measuredResponse,
expectedPackages === originalPackageCount,
`detailCount=${incrementalDetailCount}, packagesPerDetail=${packagesPerDetail}, frozen=${originalPackageCount}`, OPTIONS)
`detailCount=${incrementalDetailCount}, packageCounts=${detailPackageCounts.join('+')}, frozen=${originalPackageCount}`, OPTIONS)
if (expectedPackages === originalPackageCount) {
const firstDetailPackageCount = detailPackageCounts[0]
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 })
{ measurementVersion: Number(measured?.version), confirmedPackageCount: firstDetailPackageCount })
const resetFirstCount = context.apiSuccess(MODULE,
'增量 fixture 将首条货物确认箱数恢复为自身箱数', resetFirstCountResponse,
`itemId=${asId(firstScan.itemId)}, confirmedPackageCount=${packagesPerDetail}`, OPTIONS)
`itemId=${asId(firstScan.itemId)}, confirmedPackageCount=${firstDetailPackageCount}`, OPTIONS)
context.assert(MODULE, '增量首条货物箱数和版本更新正确', resetFirstCountResponse,
Number(resetFirstCount?.confirmedPackageCount) === packagesPerDetail
Number(resetFirstCount?.confirmedPackageCount) === firstDetailPackageCount
&& 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 detailPackageCount = detailPackageCounts[detailIndex]
const cartonIndex = detailPackageCounts.slice(0, detailIndex).reduce((sum, count) => sum + count, 0) + 1
const detailBoxCode = `${inboundCode}#${originalPackageCount}-${cartonIndex}`
const scanResponse = await multipartRequest(context, scanPath, {
boxCode: detailBoxCode, ...replacement,
@@ -410,12 +418,12 @@ export async function run(context) {
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 })
{ measurementVersion: Number(scanned.measurementVersion), confirmedPackageCount: detailPackageCount })
const countDetail = context.apiSuccess(MODULE,
`增量第${detailIndex + 1}条货物确认自身箱数`, countDetailResponse,
`confirmedPackageCount=${packagesPerDetail}`, OPTIONS)
`confirmedPackageCount=${detailPackageCount}`, OPTIONS)
context.assert(MODULE, `增量第${detailIndex + 1}条货物箱数更新正确`, countDetailResponse,
Number(countDetail?.confirmedPackageCount) === packagesPerDetail,
Number(countDetail?.confirmedPackageCount) === detailPackageCount,
`measurementVersion=${countDetail?.measurementVersion ?? 'missing'}`, OPTIONS)
}
measuredResponse = await context.request('GET', measurementPath)