diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/OrderDetail.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/OrderDetail.java index 94f1c5d1e..a4134402c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/OrderDetail.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/OrderDetail.java @@ -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 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 42664371e..b926a06cf 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 @@ -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) {