From d1496b0c11b71f6b5203585e33c07f1466faf4a7 Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Thu, 15 Oct 2026 09:17:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(product-archive):=20=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E4=BB=B7=E5=85=AC=E5=BC=8F=E4=BF=AE=E6=AD=A3=E4=B8=BA=E6=88=90?= =?UTF-8?q?=E6=9C=AC=E4=BB=B7=C3=B70.9=EF=BC=88=E6=A8=A1=E5=9D=97=E5=8C=96?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 模块化分支由 ×0.9 改为 ÷0.9:聚水潭里模块化成本价按 9 折记, 结算价需除以 0.9 还原(如成本 34.00 → 结算 37.78) - 非模块化仍为成本价原样展示;先取整到分再除、四舍五入保留两位 - 同步更新测试期望值(76.20→84.67、123.45→137.17、85→94.44、34.00→37.78) --- .../supply-chain-product-archive.service.test.ts | 9 +++++---- .../services/supply-chain-product-archive.mapper.ts | 13 +++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/furniture-3d-system/src/server/services/__tests__/supply-chain-product-archive.service.test.ts b/furniture-3d-system/src/server/services/__tests__/supply-chain-product-archive.service.test.ts index e2527f5d..58eedc2d 100644 --- a/furniture-3d-system/src/server/services/__tests__/supply-chain-product-archive.service.test.ts +++ b/furniture-3d-system/src/server/services/__tests__/supply-chain-product-archive.service.test.ts @@ -204,10 +204,11 @@ describe('supply-chain product archive field mapping', () => { }) it('derives the settlement price from the cost price and modular product tag', () => { - expect(settlementPriceText('76.20', '模块化成品,预估尺寸')).toBe('68.58') - expect(settlementPriceText('76.20', '模块化部件,简尚-崔桥工厂半成品包装项目仓')).toBe('68.58') - expect(settlementPriceText('123.45', '模块化成品')).toBe('111.11') - expect(settlementPriceText('85', '模块化部件')).toBe('76.50') + expect(settlementPriceText('76.20', '模块化成品,预估尺寸')).toBe('84.67') + expect(settlementPriceText('76.20', '模块化部件,简尚-崔桥工厂半成品包装项目仓')).toBe('84.67') + expect(settlementPriceText('123.45', '模块化成品')).toBe('137.17') + expect(settlementPriceText('85', '模块化部件')).toBe('94.44') + expect(settlementPriceText('34.00', '模块化成品')).toBe('37.78') expect(settlementPriceText('76.20', '1688一件代发,已匹配')).toBe('76.20') expect(settlementPriceText('76.20', '')).toBe('76.20') expect(settlementPriceText('', '模块化成品')).toBe('') diff --git a/furniture-3d-system/src/server/services/supply-chain-product-archive.mapper.ts b/furniture-3d-system/src/server/services/supply-chain-product-archive.mapper.ts index 6cb229bb..cc92b83a 100644 --- a/furniture-3d-system/src/server/services/supply-chain-product-archive.mapper.ts +++ b/furniture-3d-system/src/server/services/supply-chain-product-archive.mapper.ts @@ -37,11 +37,12 @@ function percentageText( return value ? `${value.mul(100).toFixed(2)}%` : '' } -// 结算价展示口径(2026-10-14 用户确认):结算价 = 成本价 × 系数,非模块化 ×1 -// 原样展示,模块化 ×0.9(四舍五入保留两位)。模块化以产品标签含「模块化」为 -// 准(聚水潭标签里的“模块化成品/模块化部件”)。查询映射层实时计算,不落库。 +// 结算价展示口径(2026-10-15 用户修正):结算价 = 成本价 ÷ 0.9(模块化), +// 非模块化原样展示(成本价即结算价)。模块化以产品标签含「模块化」为准 +// (聚水潭标签里的“模块化成品/模块化部件”,其成本价按 9 折记)。查询映射层 +// 实时计算,不落库。 const SETTLEMENT_MODULAR_TAG = '模块化' -const SETTLEMENT_MODULAR_FACTOR = 0.9 +const SETTLEMENT_MODULAR_DIVISOR = 0.9 export function settlementPriceText( costPrice: string | null | undefined, @@ -52,8 +53,8 @@ export function settlementPriceText( if (!(productTag ?? '').includes(SETTLEMENT_MODULAR_TAG)) return cost const value = Number(cost) if (!Number.isFinite(value)) return '' - // 先取整到分再打折,避免浮点误差让 123.45×0.9 这类半厘值四舍五入方向漂移。 - const settled = Math.round(Math.round(value * 100) * SETTLEMENT_MODULAR_FACTOR) / 100 + // 先取整到分再除,避免浮点误差让 123.45÷0.9 这类值四舍五入方向漂移。 + const settled = Math.round(Math.round(value * 100) / SETTLEMENT_MODULAR_DIVISOR) / 100 return settled.toFixed(2) }