未取车手动结束订单退押金和租金bug

This commit is contained in:
majian314
2025-09-09 17:24:12 +08:00
parent b8e62f94cd
commit 7c9cd21294

View File

@ -199,17 +199,24 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService
*/
private boolean processDepositRefund(Long orderId, ZcOrderMain queryOrder) {
// 查询押金子订单
ZcOrderSub sub = new ZcOrderSub();
sub.setOrderId(orderId);
List<ZcOrderSub> subList = zcOrderSubService.selectZcOrderSubList(sub);
ZcOrderSub depositSub = new ZcOrderSub();
depositSub.setOrderId(orderId);
depositSub.setSuborderType(OrderUtil.DEPOSIT);
ZcOrderSub querySub = zcOrderSubService.selectZcOrderSub(depositSub);
BigDecimal batteryAmount = BigDecimal.ZERO;
BigDecimal carAmount = BigDecimal.ZERO;
for (ZcOrderSub os : subList) {
if(os.getSuborderType().equals(OrderUtil.DEPOSIT)){
depositSub = os;
}else if(os.getSuborderType().equals(OrderUtil.RENTBATTEY)){
batteryAmount = os.getAmount();
}else if(os.getSuborderType().equals(OrderUtil.RENTCAR)){
carAmount = os.getAmount();
}
}
ZcOrderSub battreySub = new ZcOrderSub();
battreySub.setOrderId(orderId);
battreySub.setSuborderType(OrderUtil.RENTBATTEY);
ZcOrderSub queryBattreySub = zcOrderSubService.selectZcOrderSub(depositSub);
if (querySub != null) {
if (depositSub != null) {
ZcOrderMain queryMain = selectZcOrderMainByOrderId(orderId);
@ -223,7 +230,7 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService
// 如果租车订单未取车,退租车费用和押金费用
if(queryMain.getOrderStatus().equals(OrderStatusEnum.WAIT_PICK.getCode())){
// 退押金和租车费用和租电费用
refundSub.setAmount(queryOrder.getDepositPrice().add(queryBattreySub.getAmount()));
refundSub.setAmount(depositSub.getAmount().add(batteryAmount).add(carAmount));
}else {
// 计算实际退款金额(押金减去逾期费用)
BigDecimal overdueAmount = BigDecimal.ZERO;
@ -231,15 +238,15 @@ public class ZcOrderMainServiceImpl implements IZcOrderMainService
if (overdueDays > 0) {
overdueAmount = queryOrder.getOverdueFee().multiply(new BigDecimal(overdueDays));
}
BigDecimal refundAmount = querySub.getAmount().subtract(overdueAmount);
BigDecimal refundAmount = depositSub.getAmount().subtract(overdueAmount);
if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
refundAmount = BigDecimal.ZERO;
}
refundSub.setAmount(refundAmount);
}
refundSub.setPaymentMethod(querySub.getPaymentMethod());
refundSub.setPaymentMethod(depositSub.getPaymentMethod());
refundSub.setCreatedAt(DateUtils.getNowDate());
refundSub.setPaymentId(querySub.getPaymentId());
refundSub.setPaymentId(depositSub.getPaymentId());
refundSub.setRefundId(suborderNo);
refundSub.setCreateTime(DateUtils.getNowDate());