This commit is contained in:
Lemon
2024-01-06 15:10:37 +08:00
3 changed files with 51 additions and 179 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
@@ -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())

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) {