diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 04e7c2a62..f2d88a91a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -703,9 +703,7 @@ public class OrderService { data.setTotalElectricity(chargingDegree); // 总用电量 data.setStopReasonMsg("人工结算订单,操作人:" + SecurityUtils.getUsername()); // 停止原因 - // 结算订单 - // orderBasicInfoService.settleOrder(data, orderBasicInfo); - // 新逻辑 + // 结算订单 新逻辑 String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderBasicInfo.getMerchantId()); AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); orderLogic.settleOrder(data, orderBasicInfo); 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..598ee8476 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 @@ -184,158 +182,6 @@ public class OrderDetail extends BaseEntity { */ private String delFlag; - public void setId(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setOrderCode(String orderCode) { - this.orderCode = orderCode; - } - - public String getOrderCode() { - return orderCode; - } - - public void setTotalUsedElectricity(BigDecimal totalUsedElectricity) { - this.totalUsedElectricity = totalUsedElectricity; - } - - public BigDecimal getTotalUsedElectricity() { - return totalUsedElectricity; - } - - public void setTotalOrderAmount(BigDecimal totalOrderAmount) { - this.totalOrderAmount = totalOrderAmount; - } - - public BigDecimal getTotalOrderAmount() { - return totalOrderAmount; - } - - public void setTotalElectricityAmount(BigDecimal totalElectricityAmount) { - this.totalElectricityAmount = totalElectricityAmount; - } - - public BigDecimal getTotalElectricityAmount() { - return totalElectricityAmount; - } - - public void setTotalServiceAmount(BigDecimal totalServiceAmount) { - this.totalServiceAmount = totalServiceAmount; - } - - public BigDecimal getTotalServiceAmount() { - return totalServiceAmount; - } - - public void setSharpUsedElectricity(BigDecimal sharpUsedElectricity) { - this.sharpUsedElectricity = sharpUsedElectricity; - } - - public BigDecimal getSharpUsedElectricity() { - return sharpUsedElectricity; - } - - public void setSharpElectricityPrice(BigDecimal sharpElectricityPrice) { - this.sharpElectricityPrice = sharpElectricityPrice; - } - - public BigDecimal getSharpElectricityPrice() { - return sharpElectricityPrice; - } - - public void setSharpServicePrice(BigDecimal sharpServicePrice) { - this.sharpServicePrice = sharpServicePrice; - } - - public BigDecimal getSharpServicePrice() { - return sharpServicePrice; - } - - public void setPeakUsedElectricity(BigDecimal peakUsedElectricity) { - this.peakUsedElectricity = peakUsedElectricity; - } - - public BigDecimal getPeakUsedElectricity() { - return peakUsedElectricity; - } - - public void setPeakElectricityPrice(BigDecimal peakElectricityPrice) { - this.peakElectricityPrice = peakElectricityPrice; - } - - public BigDecimal getPeakElectricityPrice() { - return peakElectricityPrice; - } - - public void setPeakServicePrice(BigDecimal peakServicePrice) { - this.peakServicePrice = peakServicePrice; - } - - public BigDecimal getPeakServicePrice() { - return peakServicePrice; - } - - public void setFlatUsedElectricity(BigDecimal flatUsedElectricity) { - this.flatUsedElectricity = flatUsedElectricity; - } - - public BigDecimal getFlatUsedElectricity() { - return flatUsedElectricity; - } - - public void setFlatElectricityPrice(BigDecimal flatElectricityPrice) { - this.flatElectricityPrice = flatElectricityPrice; - } - - public BigDecimal getFlatElectricityPrice() { - return flatElectricityPrice; - } - - public void setFlatServicePrice(BigDecimal flatServicePrice) { - this.flatServicePrice = flatServicePrice; - } - - public BigDecimal getFlatServicePrice() { - return flatServicePrice; - } - - public void setValleyUsedElectricity(BigDecimal valleyUsedElectricity) { - this.valleyUsedElectricity = valleyUsedElectricity; - } - - public BigDecimal getValleyUsedElectricity() { - return valleyUsedElectricity; - } - - public void setValleyElectricityPrice(BigDecimal valleyElectricityPrice) { - this.valleyElectricityPrice = valleyElectricityPrice; - } - - public BigDecimal getValleyElectricityPrice() { - return valleyElectricityPrice; - } - - public void setValleyServicePrice(BigDecimal valleyServicePrice) { - this.valleyServicePrice = valleyServicePrice; - } - - public BigDecimal getValleyServicePrice() { - return valleyServicePrice; - } - - public void setDelFlag(String delFlag) { - this.delFlag = delFlag; - } - - public String getDelFlag() { - return delFlag; - } - @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) @@ -344,7 +190,7 @@ public class OrderDetail extends BaseEntity { .append("totalUsedElectricity", getTotalUsedElectricity()) .append("totalOrderAmount", getTotalOrderAmount()) .append("totalElectricityAmount", getTotalElectricityAmount()) - .append("totalServiceAnount", getTotalServiceAmount()) + .append("totalServiceAmount", getTotalServiceAmount()) .append("sharpUsedElectricity", getSharpUsedElectricity()) .append("sharpElectricityPrice", getSharpElectricityPrice()) .append("sharpServicePrice", getSharpServicePrice()) 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) {