补齐海外仓和私人地址正常及短少收货真实验收

This commit is contained in:
2026-11-04 14:23:41 +08:00
parent 40475388e1
commit fbdf58c23c
7 changed files with 341 additions and 27 deletions
@@ -203,7 +203,10 @@ export async function verifyMeasurementApprovalReplay(context, input, payload, i
}
const feeResponse = await context.request('GET',
`/api/platform/v1/inbounds/${input.inboundId}/fees/latest?${query(input.tenantId)}`)
const fee = context.apiSuccess(MODULE, `${name}原初算费用ID及版本`, feeResponse, '', OPTIONS)
const unpriced = feeResponse?.http === 200 && feeResponse.body?.code === 'A0404'
const fee = unpriced ? null : context.apiSuccess(MODULE, `${name}原初算费用ID及版本`, feeResponse, '', OPTIONS)
if (unpriced) context.assert(MODULE, `${name}初算费用快照待生成`, feeResponse, true,
'重放结果须明确保留UNPRICED状态', OPTIONS)
const detailsResponse = await context.request('GET',
`/api/platform/v1/inbounds/${input.inboundId}/fee-details?accountId=${encodeURIComponent(input.tenantId)}&includeHistory=true`)
const feeDetails = context.apiSuccess(MODULE, `${name}全部版本费用明细`, detailsResponse, '', OPTIONS)
@@ -213,14 +216,15 @@ export async function verifyMeasurementApprovalReplay(context, input, payload, i
&& snapshot.facts.measurement.measureReviewStatus === 'APPROVED'
&& reviews.length === total && new Set(reviews.map(item => asId(item.id))).size === total
&& approvedReviewCount === 1
&& Boolean(asId(fee?.feeId)) && Number.isInteger(Number(fee?.feeVersion)) && Number(fee.feeVersion) >= 1
&& Array.isArray(feeDetails) && new Set(feeDetails.map(item => asId(item.id))).size === feeDetails.length
context.assert(MODULE, `${name}唯一审核及已生成初算费用事实有效`, detailsResponse, valid,
&& (unpriced ? feeDetails.length === 0
: Boolean(asId(fee?.feeId)) && Number.isInteger(Number(fee?.feeVersion)) && Number(fee.feeVersion) >= 1)
context.assert(MODULE, `${name}唯一审核及初算状态事实有效`, detailsResponse, valid,
`reviews=${reviews.length}, feeId=${asId(fee?.feeId)}, feeVersion=${fee?.feeVersion ?? 'missing'}`
+ `, feeDetails=${feeDetails?.length ?? 'missing'}, approvedReviewCount=${approvedReviewCount}`
+ `, measurementStatus=${snapshot.facts.measurement.measurementStatus}`
+ `, measureReviewStatus=${snapshot.facts.measurement.measureReviewStatus}`, OPTIONS)
if (!valid) throw new Error('测量审核重放缺少唯一审核或已生成初算费用事实')
if (!valid) throw new Error('测量审核重放缺少唯一审核或有效初算状态事实')
return { response: snapshot.response, facts: { ...snapshot.facts, reviews, fee, feeDetails } }
}
const before = await read('审核同键重放前')
@@ -231,14 +235,17 @@ export async function verifyMeasurementApprovalReplay(context, input, payload, i
const after = await read('审核同键重放后')
const beforeDigest = measurementReplayDigest(before.facts)
const afterDigest = measurementReplayDigest(after.facts)
const unchanged = beforeDigest === afterDigest && replay?.initialPricingSucceeded === true
&& asId(replay?.initialFee?.feeId) === asId(before.facts.fee.feeId)
&& Number(replay?.initialFee?.feeVersion) === Number(before.facts.fee.feeVersion)
const pricingUnchanged = before.facts.fee
? replay?.initialPricingSucceeded === true
&& asId(replay?.initialFee?.feeId) === asId(before.facts.fee.feeId)
&& Number(replay?.initialFee?.feeVersion) === Number(before.facts.fee.feeVersion)
: replay?.initialPricingSucceeded === false && replay?.feeStatus === 'UNPRICED' && replay?.initialFee == null
const unchanged = beforeDigest === afterDigest && pricingUnchanged
context.assert(MODULE, '测量审核重放保持批次费用ID版本全部明细审核及入库历史零新增', after.response,
unchanged, `feeId=${asId(after.facts.fee.feeId)}, version=${after.facts.fee.feeVersion}`
unchanged, `feeId=${asId(after.facts.fee?.feeId)}, version=${after.facts.fee?.feeVersion ?? 'UNPRICED'}`
+ `, reviews=${after.facts.reviews.length}, details=${after.facts.feeDetails.length}`, OPTIONS)
return { measurementId: input.measurementId, unchanged, beforeDigest, afterDigest,
feeId: asId(after.facts.fee.feeId), feeVersion: after.facts.fee.feeVersion,
feeId: asId(after.facts.fee?.feeId), feeVersion: after.facts.fee?.feeVersion ?? null,
feeDetailIds: after.facts.feeDetails.map(item => asId(item.id)),
reviewIds: after.facts.reviews.map(item => asId(item.id)),
inboundHistoryCount: after.facts.inbound.statusHistory.length }