update 计算订单详情中的总服务费金额

This commit is contained in:
2024-01-06 14:32:23 +08:00
parent 838c38adeb
commit f6d127aff4
2 changed files with 49 additions and 23 deletions

View File

@@ -2,10 +2,7 @@ package com.jsowell.pile.domain;
import com.jsowell.common.annotation.Excel;
import com.jsowell.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.*;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -17,7 +14,8 @@ import java.math.BigDecimal;
* @author jsowell
* @date 2022-09-30
*/
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder

View File

@@ -275,12 +275,15 @@ public abstract class AbstractProgramLogic implements InitializingBean {
virtualAmount = new BigDecimal(orderAmount.toString());
}
// 剩余需要退回的金额 residue
// 退款金额 = 支付金额 - 订单消费金额 剩余需要退回的金额 residue
BigDecimal residue = payAmount.subtract(orderAmount);
// 结算金额 = 消费金额 - 虚拟金额 - 优惠金额
BigDecimal settleAmount = orderAmount.subtract(virtualAmount);
// 把交易记录中的用电量,金额等信息 更新到orderBasicInfo和orderDetail
orderBasicInfo.setVirtualAmount(virtualAmount); // 虚拟金额
orderBasicInfo.setSettleAmount(orderAmount.subtract(virtualAmount)); // 结算金额
orderBasicInfo.setSettleAmount(settleAmount); // 结算金额
orderBasicInfo.setOrderStatus(OrderStatusEnum.ORDER_COMPLETE.getValue());
orderBasicInfo.setReason(data.getStopReasonMsg()); // 充电停止原因
orderBasicInfo.setSettlementTime(DateUtils.getNowDate()); // 结算时间
@@ -301,6 +304,8 @@ public abstract class AbstractProgramLogic implements InitializingBean {
try {
// 总电费金额
BigDecimal totalElectricityAmount = BigDecimal.ZERO;
// 总服务费金额
BigDecimal totalServiceAmount = BigDecimal.ZERO;
// 尖时段用电量
String sharpUsedElectricity = data.getSharpUsedElectricity();
@@ -312,11 +317,16 @@ public abstract class AbstractProgramLogic implements InitializingBean {
if (data.getSharpAmount() != null) {
orderDetail.setSharpAmount(new BigDecimal(data.getSharpAmount()));
}
// 计算该时段电费
BigDecimal multiply = orderDetail.getSharpElectricityPrice()
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal sharpElectricityAmount = orderDetail.getSharpElectricityPrice()
.multiply(new BigDecimal(sharpUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalElectricityAmount = totalElectricityAmount.add(multiply);
totalElectricityAmount = totalElectricityAmount.add(sharpElectricityAmount);
// 计算该时段服务费
BigDecimal sharpServiceAmount = orderDetail.getSharpServicePrice()
.multiply(new BigDecimal(sharpUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalServiceAmount = totalServiceAmount.add(sharpServiceAmount);
}
// 峰时段用电量
@@ -329,11 +339,16 @@ public abstract class AbstractProgramLogic implements InitializingBean {
if (data.getPeakAmount() != null) {
orderDetail.setPeakAmount(new BigDecimal(data.getPeakAmount()));
}
// 计算该时段电费
BigDecimal multiply = orderDetail.getPeakElectricityPrice()
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal peakElectricityAmount = orderDetail.getPeakElectricityPrice()
.multiply(new BigDecimal(peakUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalElectricityAmount = totalElectricityAmount.add(multiply);
totalElectricityAmount = totalElectricityAmount.add(peakElectricityAmount);
// 计算该时段服务费
BigDecimal peakServiceAmount = orderDetail.getPeakServicePrice()
.multiply(new BigDecimal(peakUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalServiceAmount = totalServiceAmount.add(peakServiceAmount);
}
// 平时段用电量
@@ -346,11 +361,16 @@ public abstract class AbstractProgramLogic implements InitializingBean {
if (data.getFlatAmount() != null) {
orderDetail.setFlatAmount(new BigDecimal(data.getFlatAmount()));
}
// 计算该时段电费
BigDecimal multiply = orderDetail.getFlatElectricityPrice()
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal flatElectricityAmount = orderDetail.getFlatElectricityPrice()
.multiply(new BigDecimal(flatUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalElectricityAmount = totalElectricityAmount.add(multiply);
totalElectricityAmount = totalElectricityAmount.add(flatElectricityAmount);
// 计算该时段服务费
BigDecimal flatServiceAmount = orderDetail.getFlatServicePrice()
.multiply(new BigDecimal(flatUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalServiceAmount = totalServiceAmount.add(flatServiceAmount);
}
// 谷时段用电量
@@ -363,19 +383,27 @@ public abstract class AbstractProgramLogic implements InitializingBean {
if (data.getValleyAmount() != null) {
orderDetail.setValleyAmount(new BigDecimal(data.getValleyAmount()));
}
// 计算该时段电费
BigDecimal multiply = orderDetail.getValleyElectricityPrice()
// 计算该时段电费 = 电费单价 x 用电量
BigDecimal valleyElectricityAmount = orderDetail.getValleyElectricityPrice()
.multiply(new BigDecimal(valleyUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalElectricityAmount = totalElectricityAmount.add(multiply);
totalElectricityAmount = totalElectricityAmount.add(valleyElectricityAmount);
// 计算该时段服务费
BigDecimal valleyServiceAmount = orderDetail.getValleyServicePrice()
.multiply(new BigDecimal(valleyUsedElectricity))
.setScale(2, RoundingMode.DOWN);
totalServiceAmount = totalServiceAmount.add(valleyServiceAmount);
}
// 如果算出来的电费金额大于总消费金额,则电费金额等于总消费金额
if (totalElectricityAmount.compareTo(orderAmount) > 0) {
totalElectricityAmount = orderAmount;
// 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额
if (totalElectricityAmount.add(totalServiceAmount).compareTo(orderAmount) != 0) {
totalElectricityAmount = orderAmount.subtract(totalServiceAmount);
}
// 电费总金额
orderDetail.setTotalElectricityAmount(totalElectricityAmount);
orderDetail.setTotalServiceAmount(orderAmount.subtract(totalElectricityAmount));
// 服务费总金额
orderDetail.setTotalServiceAmount(totalServiceAmount);
orderDetail.setTotalUsedElectricity(new BigDecimal(data.getTotalElectricity())); // 总用电量
orderDetail.setTotalOrderAmount(orderAmount); // 订单总金额
} catch (Exception e) {