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 140fd9e17..173a60054 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 @@ -44,6 +44,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.ParseException; import java.time.LocalDateTime; import java.util.List; @@ -522,13 +523,37 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { dto.setOrderDetail(orderDetail); transactionService.doUpdateOrder(dto); - // 充电时间大于30秒不退费 - int chargingTime = message.getChargingTime(); - if (chargingTime < 30) { - // 退款 + // 充满自停需要退款 + BigDecimal bigDecimal = new BigDecimal("5"); + if (bigDecimal.compareTo(orderBasicInfo.getPayAmount()) == 0) { + // 计算电单车退款金额 + calculateEBikeRefund(orderBasicInfo, orderDetail, message); + + // 订单退款 + refundOrder(orderBasicInfo); } } + /** + * 计算电单车退款逻辑 + * @param orderBasicInfo + */ + private void calculateEBikeRefund(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail, EBikeMessageCmd03 message) { + // 耗电量 + BigDecimal consumedEnergy = message.getConsumedEnergy(); + + // 计费模板 + BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice(); // x元/每度 + BigDecimal flatServicePrice = orderDetail.getFlatServicePrice(); // x元/每度 + + // 消费金额 + BigDecimal consumeAmount = consumedEnergy.multiply(flatElectricityPrice); + + // 更新退款金额 = 支付金额 - 优惠后总消费金额 + BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(consumeAmount).setScale(2, RoundingMode.DOWN); + orderBasicInfo.setRefundAmount(refundAmount); + } + /** * 第三方平台结算订单(目前给华为用) * @param data