mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 03:25:12 +08:00
update 电单车
This commit is contained in:
@@ -64,6 +64,9 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
ProgramLogicFactory.register(MerchantDelayModeEnum.DELAY.getValue(), this);
|
||||
}
|
||||
|
||||
// 充满自停需要退款
|
||||
private final BigDecimal fullOfSelfStopping = new BigDecimal("5"); // 充满自停金额5元
|
||||
|
||||
/**
|
||||
* 生成订单
|
||||
*
|
||||
@@ -504,34 +507,64 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
logger.info("结算订单:{}, 是订单完成状态", orderBasicInfo.getOrderCode());
|
||||
return;
|
||||
}
|
||||
// 查询订单信息
|
||||
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode());
|
||||
// 订单消费金额, 除了充满自停是需要计算实际消费, 其他金额都是按次收费
|
||||
BigDecimal orderAmount;
|
||||
if (fullOfSelfStopping.compareTo(orderBasicInfo.getPayAmount()) == 0) {
|
||||
// 耗电量
|
||||
BigDecimal consumedEnergy = message.getConsumedEnergy();
|
||||
// 计费模板
|
||||
BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice(); // x元/每度
|
||||
BigDecimal flatServicePrice = orderDetail.getFlatServicePrice(); // x元/每度
|
||||
if (consumedEnergy == null || flatElectricityPrice == null) {
|
||||
logger.info("计算电单车退款逻辑,耗电量或计费模板为空,不执行退款逻辑, orderCode:{}, 耗电量:{}, 每度电费:{}", orderBasicInfo.getOrderCode(), consumedEnergy, flatElectricityPrice);
|
||||
return;
|
||||
}
|
||||
// 计算实际消费
|
||||
orderAmount = consumedEnergy.multiply(flatElectricityPrice);
|
||||
} else {
|
||||
// 其他金额都是按次收费, 不退款
|
||||
orderAmount = orderBasicInfo.getPayAmount();
|
||||
}
|
||||
|
||||
// 退款金额 = 支付金额 - 优惠后总消费金额
|
||||
BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(orderAmount).setScale(2, RoundingMode.DOWN);
|
||||
|
||||
// 虚拟金额 指订单消费中不参与结算的部分
|
||||
BigDecimal virtualAmount = BigDecimal.ZERO;
|
||||
if (OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue().equals(orderBasicInfo.getPayMode())
|
||||
|| OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 白名单支付所消费的金额,都属于虚拟金额,不参与结算对账
|
||||
virtualAmount = new BigDecimal(orderAmount.toString());
|
||||
}
|
||||
|
||||
// 结算金额 = 消费金额 - 虚拟金额 - 优惠金额
|
||||
BigDecimal settleAmount = orderAmount.subtract(virtualAmount);
|
||||
|
||||
// 订单状态
|
||||
orderBasicInfo.setOrderStatus(OrderStatusEnum.ORDER_COMPLETE.getValue());
|
||||
// 停止原因
|
||||
orderBasicInfo.setReason(EBikeStopReasonEnum.getDescriptionByCode(message.getStopReason()));
|
||||
orderBasicInfo.setRefundAmount(refundAmount);
|
||||
orderBasicInfo.setOrderAmount(orderAmount);
|
||||
orderBasicInfo.setVirtualAmount(virtualAmount);
|
||||
orderBasicInfo.setSettleAmount(settleAmount);
|
||||
orderBasicInfo.setDiscountAmount(BigDecimal.ZERO);
|
||||
orderBasicInfo.setSettlementTime(DateUtils.getNowDate());
|
||||
|
||||
// 更新订单详情
|
||||
OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode());
|
||||
if (orderDetail != null) {
|
||||
orderDetail.setTotalUsedElectricity(message.getConsumedEnergy());
|
||||
orderDetail.setFlatUsedElectricity(message.getConsumedEnergy());
|
||||
}
|
||||
|
||||
// 计算电单车退款金额
|
||||
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);
|
||||
orderBasicInfo.setSettleAmount(settleAmount);
|
||||
orderBasicInfo.setSettlementTime(DateUtils.getNowDate());
|
||||
|
||||
// 更新数据库
|
||||
OrderTransactionDTO dto = new OrderTransactionDTO();
|
||||
dto.setOrderBasicInfo(orderBasicInfo);
|
||||
@@ -544,9 +577,6 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
* @param orderBasicInfo
|
||||
*/
|
||||
private void calculateEBikeRefund(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail, EBikeMessageCmd03 message) {
|
||||
// 充满自停需要退款
|
||||
BigDecimal fullOfSelfStopping = new BigDecimal("5"); // 充满自停金额5元
|
||||
|
||||
// 退款金额
|
||||
BigDecimal refundAmount = BigDecimal.ZERO;
|
||||
if (fullOfSelfStopping.compareTo(orderBasicInfo.getPayAmount()) == 0) {
|
||||
|
||||
Reference in New Issue
Block a user