手动结束订单时,如果未取车则更新逻辑退押金和租金

This commit is contained in:
19173159168
2025-09-07 20:17:59 +08:00
parent 183fbcfe3d
commit 688d8d236b

View File

@ -205,6 +205,9 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService
ZcOrderSub querySub = zcOrderSubService.selectZcOrderSub(depositSub);
if (querySub != null) {
ZcOrderMain queryMain = selectZcOrderMainByOrderId(orderId);
// 创建退款子订单
String suborderNo = OrderUtil.generateSubOrderNo(OrderUtil.FD_PREFIX);
@ -212,17 +215,22 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService
refundSub.setOrderId(orderId);
refundSub.setSuborderNo(suborderNo);
refundSub.setSuborderType(OrderUtil.FD_DEPOSIT);
// 计算实际退款金额(押金减去逾期费用
BigDecimal overdueAmount = BigDecimal.ZERO;
long overdueDays = DateUtils.daysBetween(queryOrder.getEndRentTime(), DateUtils.getNowDate());
if (overdueDays > 0) {
overdueAmount = queryOrder.getOverdueFee().multiply(new BigDecimal(overdueDays));
// 如果租车订单未取车,退租车费用和押金费用
if(queryMain.getOrderStatus().equals(OrderStatusEnum.WAIT_PICK.getCode())){
refundSub.setAmount(queryOrder.getDepositPrice().add(queryOrder.getRentalPrice()));
}else {
// 计算实际退款金额(押金减去逾期费用)
BigDecimal overdueAmount = BigDecimal.ZERO;
long overdueDays = DateUtils.daysBetween(queryOrder.getEndRentTime(), DateUtils.getNowDate());
if (overdueDays > 0) {
overdueAmount = queryOrder.getOverdueFee().multiply(new BigDecimal(overdueDays));
}
BigDecimal refundAmount = querySub.getAmount().subtract(overdueAmount);
if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
refundAmount = BigDecimal.ZERO;
}
refundSub.setAmount(refundAmount);
}
BigDecimal refundAmount = querySub.getAmount().subtract(overdueAmount);
if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
refundAmount = BigDecimal.ZERO;
}
refundSub.setAmount(refundAmount);
refundSub.setPaymentMethod(querySub.getPaymentMethod());
refundSub.setCreatedAt(DateUtils.getNowDate());
refundSub.setPaymentId(querySub.getPaymentId());