结算订单时计算金额, 最后保留2位小数

This commit is contained in:
Guoqs
2025-06-23 11:38:45 +08:00
parent b0cdb5ada1
commit 1eab1ac647
2 changed files with 30 additions and 14 deletions

View File

@@ -495,11 +495,13 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 该时段电费单价
BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity);
// 该时段服务费单价
BigDecimal servicePrice = orderDetail.getSharpServicePrice();
// 计算该时段服务费 = 服务费单价 x 用电量
BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity);
// 汇总
totalElectricityAmount = totalElectricityAmount.add(electricityAmount);
totalServiceAmount = totalServiceAmount.add(serviceAmount);
@@ -519,11 +521,13 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 该时段电费单价
BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity);
// 该时段服务费单价
BigDecimal servicePrice = orderDetail.getPeakServicePrice();
// 计算该时段服务费 = 服务费单价 x 用电量
BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity);
// 汇总
totalElectricityAmount = totalElectricityAmount.add(electricityAmount);
totalServiceAmount = totalServiceAmount.add(serviceAmount);
@@ -543,11 +547,13 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 该时段电费单价
BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity);
// 该时段服务费单价
BigDecimal servicePrice = orderDetail.getFlatServicePrice();
// 计算该时段服务费 = 服务费单价 x 用电量
BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity);
// 汇总
totalElectricityAmount = totalElectricityAmount.add(electricityAmount);
totalServiceAmount = totalServiceAmount.add(serviceAmount);
@@ -567,11 +573,13 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 该时段电费单价
BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice();
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity);
// 该时段服务费单价
BigDecimal servicePrice = orderDetail.getValleyServicePrice();
// 计算该时段服务费 = 服务费单价 x 用电量
BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
// BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity);
// 汇总
totalElectricityAmount = totalElectricityAmount.add(electricityAmount);
totalServiceAmount = totalServiceAmount.add(serviceAmount);
@@ -588,8 +596,8 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 尖峰平谷用电量汇总
BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity);
// 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额
BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount);
// 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额, 保留2位小数
BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount).setScale(2, RoundingMode.DOWN);
/*
如果算出来的 电费金额 + 服务费金额 != 总消费金额并且尖峰平谷总用电量大于0, 则使用平台计算金额
@@ -623,6 +631,8 @@ public abstract class AbstractProgramLogic implements InitializingBean {
// 如果totalElectricityAmount + totalServiceAmount != dataOrderAmount则totalElectricityAmount = dataOrderAmount - totalServiceAmount
if (totalElectricityAmount.add(totalServiceAmount).compareTo(dataOrderAmount) != 0) {
logger.info("updateOrderBasicInfoAndOrderDetail结算订单:【{}】, 电费金额({}) + 服务费金额({}) != 订单金额({}), 电费金额设置为订单金额- 服务费金额", orderCode, totalElectricityAmount, totalServiceAmount, dataOrderAmount);
// 订单总服务费金额保留2位小数
totalServiceAmount = totalServiceAmount.setScale(2, RoundingMode.DOWN);
totalElectricityAmount = dataOrderAmount.subtract(totalServiceAmount);
}