From 6771fff413935485b5dce61769f133a44533d15c Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期六, 30 五月 2026 14:35:14 +0800
Subject: [PATCH] fix

---
 UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |   72 +++++++++++++++++++++++++++++++-----
 1 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 25fc948..aca4f4d 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1,6 +1,5 @@
 package com.stylefeng.guns.modular.specialTrain.server.impl;
 
-import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -1965,6 +1964,7 @@
 	
 	@Override
 	public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception {
+		System.out.println("!!!" + payType + "!!!!" + orderId + "!!!" + couponId);
 		OrderPrivateCar orderPrivateCar = this.selectById(orderId);
 		if (orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9) {
 			return ResultUtil.error("订单已完成支付,不允许重复支付", "");
@@ -1975,6 +1975,8 @@
 		if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
 			return ResultUtil.error("订单退款处理中,请等待退款完成", "");
 		}
+		normalizePrivateCarPrepayFirstStageBeforePay(orderPrivateCar);
+		System.out.println("!!!" + orderPrivateCar + "!!!!");
 		Integer uid = orderPrivateCar.getUserId();
 		Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
 		UserInfo userInfo = userInfoService.selectById(uid);
@@ -2028,11 +2030,19 @@
 			}
 		}
 		orderMoney = orderMoney < 0 ? 0 : orderMoney;
-		ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
-		if (prepaySettleResult != null) {
-			return prepaySettleResult;
+		orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue();
+		boolean isPrepayFirstPayBeforeCreate = isPrivateCarPrepayFirstStage(orderPrivateCar);
+		if (!isPrepayFirstPayBeforeCreate) {
+			ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
+			if (prepaySettleResult != null) {
+				return prepaySettleResult;
+			}
+			if (orderPrivateCar.getPrepayStage() == 3){
+				orderMoney = orderMoney - orderPrivateCar.getEstimateAmount();
+			}
 		}
-		orderMoney = getPrivateCarPrepayFinalPayAmount(orderPrivateCar, orderMoney);
+		orderMoney = orderMoney < 0 ? 0 : orderMoney;
+		orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue();
 		if (payType == 1) {//微信支付
 			String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
 			JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, orderMoney);
@@ -2057,9 +2067,13 @@
 			
 			boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
 			boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+			System.out.println("!!!" + isPrepayFirstStage + "!!!!" + isPrepaySpreadStage + "!!!" + orderPrivateCar);
 			if (isPrepayFirstStage) {
 				handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
 				return resultUtil;
+			}
+			if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && !isPrepaySpreadStage) {
+				return ResultUtil.error("预付阶段异常,请刷新后重试", "");
 			}
 
 			OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
@@ -2128,6 +2142,7 @@
 		if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
 			return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>());
 		}
+		normalizePrivateCarPrepayFirstStageBeforePay(orderPrivateCar);
 
 		Integer uid = orderPrivateCar.getUserId();
 		Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
@@ -2290,15 +2305,21 @@
 				orderMoney = v;
 			}
 		}
+		if (orderPrivateCar.getPrepayStage() == 3){
+			orderMoney = orderMoney - orderPrivateCar.getEstimateAmount();
+		}
 		orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue();
 		System.out.println("!!!" + orderMoney + "!!!!");
 		orderMoney = orderMoney < 0 ? 0 : orderMoney;
-		ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
-		if (prepaySettleResult != null) {
-			return prepaySettleResult;
+		boolean isPrepayFirstPayBeforeCreate = isPrivateCarPrepayFirstStage(orderPrivateCar);
+		if (!isPrepayFirstPayBeforeCreate) {
+			ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
+			if (prepaySettleResult != null) {
+				return prepaySettleResult;
+			}
+			orderMoney = getPrivateCarPrepayFinalPayAmount(orderPrivateCar, orderMoney);
 		}
-		orderMoney = getPrivateCarPrepayFinalPayAmount(orderPrivateCar, orderMoney);
-		if (!isPrivateCarPrepaySpreadStage(orderPrivateCar)) {
+		if (!isPrepayFirstPayBeforeCreate && !isPrivateCarPrepaySpreadStage(orderPrivateCar)) {
 			orderPrivateCar.setPayMoney(orderMoney);
 		}
 		if (payType == 1) {//微信支付
@@ -2356,9 +2377,13 @@
 
 			boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
 			boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+			System.out.println("!!!" + isPrepayFirstStage + "!!!!" + isPrepaySpreadStage + "!!!" + orderPrivateCar);
 			if (isPrepayFirstStage) {
 				handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
 				return resultUtil;
+			}
+			if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && !isPrepaySpreadStage) {
+				return ResultUtil.error("预付阶段异常,请刷新后重试");
 			}
 
 			OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
@@ -2579,6 +2604,28 @@
 				&& Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage());
 	}
 
+	private void normalizePrivateCarPrepayFirstStageBeforePay(OrderPrivateCar orderPrivateCar) throws Exception {
+		if (orderPrivateCar == null || !Integer.valueOf(7).equals(orderPrivateCar.getState())) {
+			return;
+		}
+		if (Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage())
+				|| Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage())
+				|| Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())
+				|| Integer.valueOf(5).equals(orderPrivateCar.getPrepayStage())) {
+			return;
+		}
+		if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())) {
+			orderPrivateCar.setPrepayStage(1);
+			return;
+		}
+		PaymentRecord unpaidRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1,
+				orderPrivateCar.getId(), 1, null, 1);
+		if (unpaidRecord != null && orderPrivateCar.getEstimateAmount() != null && orderPrivateCar.getEstimateAmount() > 0) {
+			orderPrivateCar.setPaymentMode(1);
+			orderPrivateCar.setPrepayStage(1);
+		}
+	}
+
 	private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) {
 		return orderPrivateCar != null
 				&& Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
@@ -2672,6 +2719,11 @@
 		Double displayAmount = getPrivateCarPrepayDisplayPayAmount(orderPrivateCar, finalAmount);
 		map.put("orderMoney", finalAmount);
 		map.put("payMoney", displayAmount);
+		if (orderPrivateCar.getPrepayStage() == 3) {
+			map.put("payMoney", new BigDecimal(finalAmount)
+					.subtract(new BigDecimal(orderPrivateCar.getEstimateAmount() != null ? orderPrivateCar.getEstimateAmount() : 0))
+					.setScale(2, RoundingMode.HALF_UP));
+		}
 	}
 
 	private ResultUtil settlePrivateCarPrepayIfNoSecondPay(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double finalAmount) throws Exception {

--
Gitblit v1.7.1