From 2d56c1d1ca0f7cbc05150b8cd48e63372f1a7f32 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 29 四月 2026 23:18:12 +0800
Subject: [PATCH] update

---
 UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java |   41 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 1756dd8..9f0cb85 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -2112,20 +2112,44 @@
 	private boolean isTaxiPrepayFinalStage(OrderTaxi orderTaxi) {
 		return orderTaxi != null
 				&& Integer.valueOf(1).equals(orderTaxi.getPaymentMode())
-				&& !Integer.valueOf(5).equals(orderTaxi.getPrepayStage())
-				&& orderTaxi.getPayMoney() != null
-				&& orderTaxi.getPayMoney() > 0;
+				&& !Integer.valueOf(5).equals(orderTaxi.getPrepayStage());
 	}
 
 	private BigDecimal toMoney(Double amount) {
 		return new BigDecimal(String.valueOf(amount == null ? 0D : amount)).setScale(2, RoundingMode.HALF_UP);
 	}
 
-	private Double getTaxiPrepayFinalPayAmount(OrderTaxi orderTaxi, Double finalAmount) {
+	private PaymentRecord getTaxiPrepayPaidRecord(OrderTaxi orderTaxi) throws Exception {
+		PaymentRecord paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, orderTaxi.getPayType(), 2);
+		if (paymentRecord == null) {
+			paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, null, 2);
+		}
+		if (paymentRecord != null && orderTaxi.getPayType() == null) {
+			orderTaxi.setPayType(paymentRecord.getPayType());
+		}
+		return paymentRecord;
+	}
+
+	private BigDecimal getTaxiPrepayPaidAmount(OrderTaxi orderTaxi) throws Exception {
+		PaymentRecord paymentRecord = getTaxiPrepayPaidRecord(orderTaxi);
+		if (paymentRecord != null && paymentRecord.getAmount() != null && paymentRecord.getAmount() > 0) {
+			return toMoney(paymentRecord.getAmount());
+		}
+		if (orderTaxi.getPayMoney() != null && orderTaxi.getPayMoney() > 0) {
+			return toMoney(orderTaxi.getPayMoney());
+		}
+		return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+	}
+
+	private Double getTaxiPrepayFinalPayAmount(OrderTaxi orderTaxi, Double finalAmount) throws Exception {
 		if (!isTaxiPrepayFinalStage(orderTaxi)) {
 			return toMoney(finalAmount).doubleValue();
 		}
-		BigDecimal spreadAmount = toMoney(finalAmount).subtract(toMoney(orderTaxi.getPayMoney())).setScale(2, RoundingMode.HALF_UP);
+		BigDecimal paidAmount = getTaxiPrepayPaidAmount(orderTaxi);
+		if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+			return toMoney(finalAmount).doubleValue();
+		}
+		BigDecimal spreadAmount = toMoney(finalAmount).subtract(paidAmount).setScale(2, RoundingMode.HALF_UP);
 		if (spreadAmount.compareTo(BigDecimal.ZERO) > 0) {
 			orderTaxi.setPrepayStage(3);
 			return spreadAmount.doubleValue();
@@ -2137,7 +2161,10 @@
 		if (!isTaxiPrepayFinalStage(orderTaxi)) {
 			return null;
 		}
-		BigDecimal paidAmount = toMoney(orderTaxi.getPayMoney());
+		BigDecimal paidAmount = getTaxiPrepayPaidAmount(orderTaxi);
+		if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+			return null;
+		}
 		BigDecimal settleAmount = toMoney(finalAmount);
 		BigDecimal refundAmount = paidAmount.subtract(settleAmount).setScale(2, RoundingMode.HALF_UP);
 		if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
@@ -2165,7 +2192,7 @@
 			return ResultUtil.success();
 		}
 
-		PaymentRecord paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, orderTaxi.getPayType(), 2);
+		PaymentRecord paymentRecord = getTaxiPrepayPaidRecord(orderTaxi);
 		if (paymentRecord == null) {
 			return ResultUtil.error("先付订单缺少已支付流水,无法退款");
 		}

--
Gitblit v1.7.1