From 830f219e5272cade8196b7138ba9db1efec485c3 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Sat, 10 Oct 2026 15:51:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BA=94=E4=BB=98=E6=80=BB?= =?UTF-8?q?=E9=A2=9D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PrcOrderBillServiceImpl.java | 20 ++++-------- .../impl/TmsPriceQuoteServiceImpl.java | 32 ++++++++----------- bms-front/src/views/price/billing/quote.vue | 12 +++---- 3 files changed, 27 insertions(+), 37 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java index e9bbc805..7247c782 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java @@ -1086,12 +1086,8 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService bill.setFreightAmount(result.getFreightAmount()); bill.setSurchargeAmount(result.getSurchargeAmount()); bill.setIncomeTotal(result.getPayableTotal()); - BigDecimal payTotal = result.getPayTotal(); - if (payTotal == null) - { - payTotal = result.getProductAmount(); - } - bill.setPayTotal(payTotal == null ? BigDecimal.ZERO : payTotal); + // 应付总额与产品目录价解耦:试算未产出 pay_total 时留空,不再用 product_amount 兜底 + bill.setPayTotal(result.getPayTotal()); bill.setCurrency(result.getCurrency()); bill.setRoundMode(result.getRoundMode()); // Credit soft-fail before persist so insert/update stores arrears flag in one write. @@ -1481,14 +1477,13 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService return fees; } - /** 应付主表与订单计费一对一落库;成本价/应付=产品目录价,同步写入 product_amount;红线价同步写入 redline_amount。 */ + /** 应付主表与订单计费一对一落库;product_amount 取产品目录价、redline_amount 取红线价;应付/成本价留空待接入真实成本源。 */ private PrcPayBill persistPayBill(PrcOrderBill bill, TmsPriceQuoteResult result) { if (bill == null || StringUtils.isEmpty(bill.getBillId())) { return null; } - BigDecimal pay = nz(bill.getPayTotal()); PrcPayBill existed = payBillMapper.selectByBillId(bill.getBillId()); PrcPayBill row = existed == null ? new PrcPayBill() : existed; if (existed == null) @@ -1498,12 +1493,11 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService row.setCreateBy(bill.getCreateBy()); } row.setCurrency(StringUtils.isEmpty(bill.getCurrency()) ? "CNY" : bill.getCurrency()); - // product/cost = catalog; redline from quote - BigDecimal product = result == null ? null : result.getProductAmount(); - row.setProductAmount(product); + // product = catalog; redline from quote; cost/pay 不再等于产品目录价 + row.setProductAmount(result == null ? null : result.getProductAmount()); row.setRedlineAmount(result == null ? null : result.getRedlineAmount()); - row.setCostAmount(pay); - row.setPayTotal(pay); + row.setCostAmount(result == null ? null : result.getCostAmount()); + row.setPayTotal(result == null ? null : result.getPayTotal()); row.setBelongSaler(bill.getBelongSaler()); row.setBelongSalerCode(bill.getBelongSalerCode()); row.setSettlementMan(bill.getSettlementMan()); diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java index 38ca7a1a..cf137a33 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java @@ -940,9 +940,9 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService } /** - * Product catalog amount (product_amount) and payable cost (pay_total / payFeeDetails). + * Product catalog amount (product_amount) and its fee lines. * Formula: product_country.freight_price * weight + registration_fee. - * Cost currently equals product catalog amount (no separate cost table yet). + * 应付(cost_amount / pay_total)与产品目录价解耦,此处不再赋值,留空待接入真实成本数据源。 */ private void fillProductAmountAndPay(TmsPriceQuoteResult r, BmsProductCountry base, BigDecimal weight, RoundingMode rm, String roundMode) @@ -955,8 +955,9 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService BigDecimal productFreight = base.getFreightPrice().multiply(weight).setScale(2, rm); BigDecimal productAmount = productFreight.add(baseReg).setScale(2, rm); r.setProductAmount(productAmount); - r.setCostAmount(productAmount); - r.setPayTotal(productAmount); + // 应付(cost_amount / pay_total)不再用产品目录价兜底,留待后续接入真实成本数据源 + r.setCostAmount(null); + r.setPayTotal(null); String currency = normalizeCurrency(r.getCurrency()); List payLines = new ArrayList(); TmsPriceQuoteFeeLine payFreight = feeLine(FEE_BASIC, feeNameOf(FEE_BASIC), 0L, productFreight, currency, roundMode, null); @@ -1077,14 +1078,7 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService { result.setProductAmount(nvl(result.getProductAmount()).add(productExtra).setScale(2, rm)); } - if (result.getCostAmount() != null || productExtra.compareTo(BigDecimal.ZERO) > 0) - { - result.setCostAmount(nvl(result.getCostAmount()).add(productExtra).setScale(2, rm)); - } - if (result.getPayTotal() != null || productExtra.compareTo(BigDecimal.ZERO) > 0) - { - result.setPayTotal(nvl(result.getPayTotal()).add(productExtra).setScale(2, rm)); - } + // cost_amount / pay_total 不再随产品目录价变化(含附加费),保持留空 if (result.getRedlineAmount() != null || redlineExtra.compareTo(BigDecimal.ZERO) > 0) { result.setRedlineAmount(nvl(result.getRedlineAmount()).add(redlineExtra).setScale(2, rm)); @@ -1265,8 +1259,8 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService quote.setPayableTotal(result.getPayableTotal()); quote.setProductAmount(result.getProductAmount()); quote.setRedlineAmount(result.getRedlineAmount()); - quote.setCostAmount(result.getCostAmount() != null ? result.getCostAmount() : result.getProductAmount()); - quote.setPayTotal(result.getPayTotal() != null ? result.getPayTotal() : result.getProductAmount()); + quote.setCostAmount(result.getCostAmount()); + quote.setPayTotal(result.getPayTotal()); quote.setCurrency(result.getCurrency()); quote.setRoundMode(result.getRoundMode()); try @@ -1329,8 +1323,8 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService { quoteFeeMapper.insertBatch(fees); } - BigDecimal cost = result.getCostAmount() != null ? result.getCostAmount() : result.getProductAmount(); - BigDecimal pay = result.getPayTotal() != null ? result.getPayTotal() : cost; + BigDecimal cost = result.getCostAmount(); + BigDecimal pay = result.getPayTotal(); quoteMapper.updateQuoteAmounts(quoteId, result.getSurchargeAmount(), result.getPayableTotal(), result.getProductAmount(), cost, pay); } @@ -1395,8 +1389,10 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService r.setPayableTotal(quote.getPayableTotal()); r.setProductAmount(quote.getProductAmount()); r.setRedlineAmount(quote.getRedlineAmount()); - r.setCostAmount(quote.getCostAmount()); - r.setPayTotal(quote.getPayTotal()); + // 历史缓存里的 cost_amount / pay_total 可能是早期按产品目录价写入的值,直接丢弃不回填。 + // TODO 接入真实成本数据源后,改回回填 quote.getCostAmount() / quote.getPayTotal()。 + r.setCostAmount(null); + r.setPayTotal(null); r.setIncomeTotal(quote.getPayableTotal()); r.setCurrency(normalizeCurrency(quote.getCurrency())); r.setRoundMode(quote.getRoundMode()); diff --git a/bms-front/src/views/price/billing/quote.vue b/bms-front/src/views/price/billing/quote.vue index 45c75b9d..c83b45b7 100644 --- a/bms-front/src/views/price/billing/quote.vue +++ b/bms-front/src/views/price/billing/quote.vue @@ -117,13 +117,13 @@ {{ formatMoney(result.surchargeAmount) }} {{ formatMoney(result.productAmount) }} - {{ formatMoney(result.costAmount != null ? result.costAmount : result.payTotal) }} + {{ formatMoney(result.costAmount) }} {{ formatMoney(result.payableTotal) }} - {{ formatMoney(result.payTotal != null ? result.payTotal : result.costAmount) }} + {{ formatMoney(result.payTotal) }} 命中历史试算 @@ -161,7 +161,7 @@ -
销售试算:运费金额 = 套餐运费单价 × 计费重量;应收总额 = 运费金额 + 挂号费 + 附加费。产品价/成本价 = 目录运费单价 × 计费重量 + 目录挂号费。相同试算参数直接返回已落库明细。
+
销售试算:运费金额 = 套餐运费单价 × 计费重量;应收总额 = 运费金额 + 挂号费 + 附加费。产品价 = 目录运费单价 × 计费重量 + 目录挂号费 + 目录附加费。成本价/应付总额待接入真实成本数据源,暂不计算。相同试算参数直接返回已落库明细。
@@ -189,7 +189,7 @@ {{ sourceLabel(row.matchSource) }}