mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-13 03:39:55 +08:00
update 计算订单优惠金额
This commit is contained in:
@@ -957,26 +957,17 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
// 尖时段用电量
|
// 尖时段用电量
|
||||||
BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity();
|
BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity();
|
||||||
if (sharpUsedElectricity != null) {
|
if (sharpUsedElectricity != null) {
|
||||||
// 计算该时段电费单价
|
// 该时段电费单价与orderDetail中的电价比较取最小值
|
||||||
BigDecimal electricityPrice = billingTemplateVO.getSharpElectricityPrice();
|
// BigDecimal electricityPrice = billingTemplateVO.getSharpElectricityPrice();
|
||||||
|
BigDecimal electricityPrice = getMinWithPositiveConstraint(billingTemplateVO.getSharpElectricityPrice(), orderDetail.getSharpElectricityPrice());
|
||||||
// 计算该时段电费 = 电费单价 x 用电量
|
// 计算该时段电费 = 电费单价 x 用电量
|
||||||
BigDecimal electricityAmount = BigDecimal.ZERO;
|
BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额
|
|
||||||
if (electricityPrice.compareTo(orderDetail.getSharpElectricityPrice()) < 0) {
|
|
||||||
// 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费
|
|
||||||
electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 该时段服务费单价与orderDetail中的服务费比较取最小值
|
||||||
// 计算该时段服务费单价
|
// BigDecimal servicePrice = billingTemplateVO.getSharpServicePrice();
|
||||||
BigDecimal servicePrice = billingTemplateVO.getSharpServicePrice();
|
BigDecimal servicePrice = getMinWithPositiveConstraint(billingTemplateVO.getSharpServicePrice(), orderDetail.getSharpServicePrice());
|
||||||
// 计算该时段服务费
|
// 计算该时段服务费
|
||||||
BigDecimal serviceAmount = BigDecimal.ZERO;
|
BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额
|
|
||||||
if (servicePrice.compareTo(orderDetail.getSharpServicePrice()) < 0) {
|
|
||||||
// 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费
|
|
||||||
serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 汇总
|
// 汇总
|
||||||
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
||||||
@@ -988,24 +979,14 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity();
|
BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity();
|
||||||
if (peakUsedElectricity != null) {
|
if (peakUsedElectricity != null) {
|
||||||
// 计算该时段电费单价
|
// 计算该时段电费单价
|
||||||
BigDecimal electricityPrice = billingTemplateVO.getPeakElectricityPrice();
|
BigDecimal electricityPrice = getMinWithPositiveConstraint(billingTemplateVO.getPeakElectricityPrice(), orderDetail.getPeakElectricityPrice());
|
||||||
// 计算该时段电费 = 电费单价 x 用电量
|
// 计算该时段电费 = 电费单价 x 用电量
|
||||||
BigDecimal electricityAmount = BigDecimal.ZERO;
|
BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额
|
|
||||||
if (electricityPrice.compareTo(orderDetail.getPeakElectricityPrice()) < 0) {
|
|
||||||
// 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费
|
|
||||||
electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算该时段服务费
|
// 计算该时段服务费
|
||||||
BigDecimal servicePrice = billingTemplateVO.getPeakServicePrice();
|
BigDecimal servicePrice = getMinWithPositiveConstraint(billingTemplateVO.getPeakServicePrice(), orderDetail.getPeakServicePrice());
|
||||||
// 计算该时段服务费 = 服务费单价 x 用电量
|
// 计算该时段服务费 = 服务费单价 x 用电量
|
||||||
BigDecimal serviceAmount = BigDecimal.ZERO;
|
BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额
|
|
||||||
if (servicePrice.compareTo(orderDetail.getPeakServicePrice()) < 0) {
|
|
||||||
// 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费
|
|
||||||
serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 汇总
|
// 汇总
|
||||||
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
||||||
@@ -1016,25 +997,14 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity();
|
BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity();
|
||||||
if (flatUsedElectricity != null) {
|
if (flatUsedElectricity != null) {
|
||||||
// 计算该时段电费单价
|
// 计算该时段电费单价
|
||||||
BigDecimal electricityPrice = billingTemplateVO.getFlatElectricityPrice();
|
BigDecimal electricityPrice = getMinWithPositiveConstraint(billingTemplateVO.getFlatElectricityPrice(), orderDetail.getFlatElectricityPrice());
|
||||||
// 计算该时段电费 = 电费单价 x 用电量
|
// 计算该时段电费 = 电费单价 x 用电量
|
||||||
BigDecimal electricityAmount = BigDecimal.ZERO;
|
BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额
|
|
||||||
if (electricityPrice.compareTo(orderDetail.getFlatElectricityPrice()) < 0) {
|
|
||||||
// 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费
|
|
||||||
electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 计算该时段服务费单价
|
// 计算该时段服务费单价
|
||||||
BigDecimal servicePrice = billingTemplateVO.getFlatServicePrice();
|
BigDecimal servicePrice = getMinWithPositiveConstraint(billingTemplateVO.getFlatServicePrice(), orderDetail.getFlatServicePrice());
|
||||||
// 计算该时段服务费
|
// 计算该时段服务费
|
||||||
BigDecimal serviceAmount = BigDecimal.ZERO;
|
BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额
|
|
||||||
if (servicePrice.compareTo(orderDetail.getFlatServicePrice()) < 0) {
|
|
||||||
// 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费
|
|
||||||
serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 汇总
|
// 汇总
|
||||||
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
||||||
@@ -1045,24 +1015,14 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity();
|
BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity();
|
||||||
if (valleyUsedElectricity != null) {
|
if (valleyUsedElectricity != null) {
|
||||||
// 计算该时段电费单价
|
// 计算该时段电费单价
|
||||||
BigDecimal electricityPrice = billingTemplateVO.getValleyElectricityPrice();
|
BigDecimal electricityPrice = getMinWithPositiveConstraint(billingTemplateVO.getValleyElectricityPrice(), orderDetail.getValleyElectricityPrice());
|
||||||
// 计算该时段电费 = 电费单价 x 用电量
|
// 计算该时段电费 = 电费单价 x 用电量
|
||||||
BigDecimal electricityAmount = BigDecimal.ZERO;
|
BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板电价低于orderDetail快照中的电价则计算优惠金额
|
|
||||||
if (electricityPrice.compareTo(orderDetail.getValleyElectricityPrice()) < 0) {
|
|
||||||
// 计算该时段电费优惠金额 = 优惠前电费 - 优惠后电费
|
|
||||||
electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算该时段服务费单价
|
// 计算该时段服务费单价
|
||||||
BigDecimal servicePrice = billingTemplateVO.getValleyServicePrice();
|
BigDecimal servicePrice = getMinWithPositiveConstraint(billingTemplateVO.getValleyServicePrice(), orderDetail.getValleyServicePrice());
|
||||||
// 计算该时段服务费
|
// 计算该时段服务费
|
||||||
BigDecimal serviceAmount = BigDecimal.ZERO;
|
BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
|
||||||
// 如果优惠模板中服务费低于orderDetail快照中的服务费价则计算优惠金额
|
|
||||||
if (servicePrice.compareTo(orderDetail.getValleyServicePrice()) < 0) {
|
|
||||||
// 计算该时段服务费优惠金额 = 优惠前服务费 - 优惠后服务费
|
|
||||||
serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 汇总
|
// 汇总
|
||||||
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount);
|
||||||
@@ -1108,6 +1068,26 @@ public abstract class AbstractProgramLogic implements InitializingBean {
|
|||||||
orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount);
|
orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取较小值,并且满足大于0的条件
|
||||||
|
* @param num1
|
||||||
|
* @param num2
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private BigDecimal getMinWithPositiveConstraint(BigDecimal num1, BigDecimal num2) {
|
||||||
|
BigDecimal valid1 = num1.compareTo(BigDecimal.ZERO) > 0 ? num1 : null;
|
||||||
|
BigDecimal valid2 = num2.compareTo(BigDecimal.ZERO) > 0 ? num2 : null;
|
||||||
|
|
||||||
|
if (valid1 == null && valid2 == null) {
|
||||||
|
throw new IllegalArgumentException("两个值均不满足大于0的条件");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (valid1 == null) return valid2;
|
||||||
|
if (valid2 == null) return valid1;
|
||||||
|
|
||||||
|
return valid1.compareTo(valid2) < 0 ? valid1 : valid2;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算余额支付下发金额
|
* 计算余额支付下发金额
|
||||||
* xixiao在用
|
* xixiao在用
|
||||||
|
|||||||
Reference in New Issue
Block a user