diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index afaf38495..71ae21f4b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -517,18 +517,15 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { orderDetail.setFlatUsedElectricity(message.getConsumedEnergy()); } - // 充满自停需要退款 - BigDecimal bigDecimal = new BigDecimal("5"); - if (bigDecimal.compareTo(orderBasicInfo.getPayAmount()) == 0) { - // 计算电单车退款金额 - calculateEBikeRefund(orderBasicInfo, orderDetail, message); - - // 订单退款 - refundOrder(orderBasicInfo); - } + // 计算电单车退款金额 + calculateEBikeRefund(orderBasicInfo, orderDetail, message); // 退款金额 BigDecimal refundAmount = orderBasicInfo.getRefundAmount() == null ? BigDecimal.ZERO : orderBasicInfo.getRefundAmount(); + if (refundAmount.compareTo(BigDecimal.ZERO) > 0) { + // 订单退款, 退款金额大于0才退款 + refundOrder(orderBasicInfo); + } // 结算金额 = 支付金额 - 退款金额 BigDecimal settleAmount = orderBasicInfo.getPayAmount().subtract(refundAmount).setScale(2, RoundingMode.DOWN); @@ -547,25 +544,36 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { * @param orderBasicInfo */ private void calculateEBikeRefund(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail, EBikeMessageCmd03 message) { - // 耗电量 - BigDecimal consumedEnergy = message.getConsumedEnergy(); + // 充满自停需要退款 + BigDecimal fullOfSelfStopping = new BigDecimal("5"); // 充满自停金额5元 - // 计费模板 - BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice(); // x元/每度 - BigDecimal flatServicePrice = orderDetail.getFlatServicePrice(); // x元/每度 + // 退款金额 + BigDecimal refundAmount = BigDecimal.ZERO; + if (fullOfSelfStopping.compareTo(orderBasicInfo.getPayAmount()) == 0) { + // 耗电量 + BigDecimal consumedEnergy = message.getConsumedEnergy(); - if (consumedEnergy == null || flatElectricityPrice == null) { - logger.info("计算电单车退款逻辑,耗电量或计费模板为空,不执行退款逻辑, orderCode:{}, 耗电量:{}, 每度电费:{}", orderBasicInfo.getOrderCode(), consumedEnergy, flatElectricityPrice); - return; + // 计费模板 + BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice(); // x元/每度 + BigDecimal flatServicePrice = orderDetail.getFlatServicePrice(); // x元/每度 + + if (consumedEnergy == null || flatElectricityPrice == null) { + logger.info("计算电单车退款逻辑,耗电量或计费模板为空,不执行退款逻辑, orderCode:{}, 耗电量:{}, 每度电费:{}", orderBasicInfo.getOrderCode(), consumedEnergy, flatElectricityPrice); + return; + } + + // 消费金额 + BigDecimal consumeAmount = consumedEnergy.multiply(flatElectricityPrice); + + // 更新退款金额 = 支付金额 - 优惠后总消费金额 + refundAmount = orderBasicInfo.getPayAmount().subtract(consumeAmount).setScale(2, RoundingMode.DOWN); } - // 消费金额 - BigDecimal consumeAmount = consumedEnergy.multiply(flatElectricityPrice); + // 结算金额 = 支付金额 - 退款金额 + BigDecimal settleAmount = orderBasicInfo.getPayAmount().subtract(refundAmount).setScale(2, RoundingMode.DOWN); - // 更新退款金额 = 支付金额 - 优惠后总消费金额 - BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(consumeAmount).setScale(2, RoundingMode.DOWN); orderBasicInfo.setRefundAmount(refundAmount); - + orderBasicInfo.setSettleAmount(settleAmount); } /**