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

View File

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