From 8e0042a7bb6902175ac63c8cad6cae7ca28d3caa Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 10 Apr 2025 16:32:04 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=AE=A1=E7=AE=97=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 62 ++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index e776545fb..4e7f31b9b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -960,11 +960,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 计算该时段电费单价 BigDecimal electricityPrice = billingTemplateVO.getSharpElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = BigDecimal.ZERO; + // 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额 + if (electricityPrice.compareTo(orderDetail.getSharpElectricityPrice()) < 0) { + // 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费 + electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + } + + // 计算该时段服务费单价 BigDecimal servicePrice = billingTemplateVO.getSharpServicePrice(); // 计算该时段服务费 - BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = BigDecimal.ZERO; + // 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额 + if (servicePrice.compareTo(orderDetail.getSharpServicePrice()) < 0) { + // 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费 + serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + } // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); @@ -978,11 +990,22 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 计算该时段电费单价 BigDecimal electricityPrice = billingTemplateVO.getPeakElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = BigDecimal.ZERO; + // 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额 + if (electricityPrice.compareTo(orderDetail.getPeakElectricityPrice()) < 0) { + // 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费 + electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + } + // 计算该时段服务费 BigDecimal servicePrice = billingTemplateVO.getPeakServicePrice(); // 计算该时段服务费 = 服务费单价 x 用电量 - BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = BigDecimal.ZERO; + // 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额 + if (servicePrice.compareTo(orderDetail.getPeakServicePrice()) < 0) { + // 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费 + serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + } // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); @@ -995,11 +1018,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 计算该时段电费单价 BigDecimal electricityPrice = billingTemplateVO.getFlatElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = BigDecimal.ZERO; + // 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额 + if (electricityPrice.compareTo(orderDetail.getFlatElectricityPrice()) < 0) { + // 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费 + electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + } + + // 计算该时段服务费单价 BigDecimal servicePrice = billingTemplateVO.getFlatServicePrice(); // 计算该时段服务费 - BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = BigDecimal.ZERO; + // 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额 + if (servicePrice.compareTo(orderDetail.getFlatServicePrice()) < 0) { + // 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费 + serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + } // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); @@ -1012,11 +1047,22 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 计算该时段电费单价 BigDecimal electricityPrice = billingTemplateVO.getValleyElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = BigDecimal.ZERO; + // 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额 + if (electricityPrice.compareTo(orderDetail.getValleyElectricityPrice()) < 0) { + // 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费 + electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + } + // 计算该时段服务费单价 BigDecimal servicePrice = billingTemplateVO.getValleyServicePrice(); // 计算该时段服务费 - BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = BigDecimal.ZERO; + // 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额 + if (servicePrice.compareTo(orderDetail.getValleyServicePrice()) < 0) { + // 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费 + serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + } // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);