From dd45d210e2cbc60321fd3ed0c2ef5a0ba533faf5 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期日, 12 四月 2026 15:13:59 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/YueKeDuo

---
 UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  252 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 184 insertions(+), 68 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 5aa5a63..8bd328f 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
@@ -431,6 +431,7 @@
 					orderPrivateCar.setTotalPeopleNum(peopleNum);
 					orderPrivateCar.setIsReassign(1);
 					orderPrivateCar.setIsDelete(1);
+					orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
 					this.insert(orderPrivateCar);
 					
 					if (orderSource == 2) {//扫码下单
@@ -506,6 +507,7 @@
 						orderPrivateCar.setTotalPeopleNum(peopleNum);
 						orderPrivateCar.setIsReassign(1);
 						orderPrivateCar.setIsDelete(1);
+						orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
 						this.insert(orderPrivateCar);
 						this.pushOrder(orderPrivateCar);
 					} else {
@@ -523,6 +525,7 @@
 						orderPrivateCar.setIsReassign(1);
 						orderPrivateCar.setIsDelete(1);
 						orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
+						orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
 						this.insert(orderPrivateCar);
 						//修改总订单人数
 						OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
@@ -743,6 +746,7 @@
 				orderPrivateCar.setTotalPeopleNum(peopleNum);
 				orderPrivateCar.setIsReassign(1);
 				orderPrivateCar.setIsDelete(1);
+				orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
 
 				//判断独享,一口价,拼车
 				JSONArray jsonArray = JSON.parseArray(serverCarModel);
@@ -1952,6 +1956,9 @@
 		if (orderPrivateCar.getState() != 7) {
 			return ResultUtil.error("订单不在待支付状态,不允许支付", "");
 		}
+		if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
+			return ResultUtil.error("订单退款处理中,请等待退款完成", "");
+		}
 		Integer uid = orderPrivateCar.getUserId();
 		Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
 		UserInfo userInfo = userInfoService.selectById(uid);
@@ -2007,12 +2014,14 @@
 		orderMoney = orderMoney < 0 ? 0 : orderMoney;
 		if (payType == 1) {//微信支付
 			String app = type == 1 ? "APP" : "JSAPI";
-			resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
-			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
+			String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+			resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
+			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据
 		}
 		if (payType == 2) {//支付宝支付
-			resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
-			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
+			String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+			resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
+			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
 		}
 		if (payType == 3) {//余额支付
 			if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -2021,29 +2030,32 @@
 			
 			userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
 			
+			boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
+			boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+			if (isPrepayFirstStage) {
+				handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
+				return resultUtil;
+			}
+
 			OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
 			SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
 			userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
-			
+
 			//添加交易明细
 			transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId);
 			userInfoService.updateById(userInfo);
-			
+
 			orderPrivateCar.setState(8);
 			orderPrivateCar.setPayType(3);
-			orderPrivateCar.setPayMoney(orderMoney);
+			orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
 			orderPrivateCar.setPayTime(new Date());
-			
-			//处理优惠券和红包
-			if (null != userCouponRecord) {
-				userCouponRecord.setState(2);
-				userCouponRecord.setEndTime(new Date());
-				userCouponRecordService.updateById(userCouponRecord);
+			if (isPrepaySpreadStage) {
+				orderPrivateCar.setPrepayStage(5);
+				orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
 			}
-			if (null != query) {
-				query.setState(2);
-				query.setEndTime(new Date());
-				userRedPacketRecordService.updateById(query);
+
+			if (!isPrepaySpreadStage) {
+				consumePrivateCarBenefits(orderPrivateCar);
 			}
 			//非追缴单才需要添加收入
 			if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2087,6 +2099,9 @@
 		}
 		if (orderPrivateCar.getState() != 7) {
 			return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>());
+		}
+		if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
+			return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>());
 		}
 
 		Integer uid = orderPrivateCar.getUserId();
@@ -2259,8 +2274,9 @@
 				return ResultUtil.error("请使用余额支付");
 			}
 			String app = type == 1 ? "APP" : "JSAPI";
-			resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
-			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
+			String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+			resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
+			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据
 
 			//创建定时任务查询订单支付状态
 			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
@@ -2291,8 +2307,9 @@
 			if (orderMoney == 0) {
 				return ResultUtil.error("请使用余额支付");
 			}
-			resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
-			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
+			String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+			resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
+			paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
 		}
 		if (payType == 3) {//余额支付
 			if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -2300,7 +2317,14 @@
 			}
 
 			userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-			
+
+			boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
+			boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+			if (isPrepayFirstStage) {
+				handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
+				return resultUtil;
+			}
+
 			OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
 			SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
 			if (null != query1) {
@@ -2313,22 +2337,15 @@
 			
 			orderPrivateCar.setState(8);
 			orderPrivateCar.setPayType(3);
+			orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
 			orderPrivateCar.setPayTime(new Date());
-			
-			//处理优惠券和红包
-			if (null != userCouponRecord) {
-				userCouponRecord.setState(2);
-				userCouponRecord.setEndTime(new Date());
-				userCouponRecordService.updateById(userCouponRecord);
+			if (isPrepaySpreadStage) {
+				orderPrivateCar.setPrepayStage(5);
+				orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
 			}
-			//处理打车卡
-			if (null != userTaxiCard) {
-				userTaxiCardService.updateById(userTaxiCard);
-			}
-			if (null != query) {
-				query.setState(2);
-				query.setEndTime(new Date());
-				userRedPacketRecordService.updateById(query);
+
+			if (!isPrepaySpreadStage) {
+				consumePrivateCarBenefits(orderPrivateCar);
 			}
 			//非追缴单才添加收入记录
 			if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2519,54 +2536,153 @@
 			System.err.println("预支付数据异常(orderId = " + id + ")");
 		}
 	}
+
+	private boolean isPrivateCarPrepayFirstStage(OrderPrivateCar orderPrivateCar) {
+		return orderPrivateCar != null
+				&& Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
+				&& Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage());
+	}
+
+	private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) {
+		return orderPrivateCar != null
+				&& Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
+				&& Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage());
+	}
+
+	private String buildBalancePayNo(Integer orderType, Integer orderId) {
+		return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis();
+	}
+
+	private Double appendPayMoney(Double source, Double amount) {
+		return new BigDecimal(source == null ? 0D : source)
+				.add(new BigDecimal(amount == null ? 0D : amount))
+				.setScale(2, BigDecimal.ROUND_HALF_EVEN)
+				.doubleValue();
+	}
+
+	private void consumePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception {
+		if (null != orderPrivateCar.getCouponId()) {
+			UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
+			if (userCouponRecord != null) {
+				userCouponRecord.setState(2);
+				userCouponRecord.setEndTime(new Date());
+				userCouponRecordService.updateById(userCouponRecord);
+			}
+		}
+		if (null != orderPrivateCar.getUserTaxiCardId()) {
+			UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
+			if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) {
+				JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
+				jsonObject.put("time", jsonObject.getInteger("time") - 1);
+				userTaxiCard.setContent(jsonObject.toJSONString());
+				userTaxiCardService.updateById(userTaxiCard);
+			}
+		}
+		if (null != orderPrivateCar.getRedPacketId()) {
+			UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
+			if (userRedPacketRecord != null) {
+				userRedPacketRecord.setState(2);
+				userRedPacketRecord.setEndTime(new Date());
+				userRedPacketRecordService.updateById(userRedPacketRecord);
+			}
+		}
+	}
+
+	private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception {
+		if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) {
+			JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel());
+			for (int i = 0; i < jsonArray.size(); i++) {
+				JSONObject jsonObject = jsonArray.getJSONObject(i);
+				Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
+				Integer rideType = jsonObject.getInteger("rideType");
+				if (serverCarModelId != null && serverCarModelId == 0) {
+					OrderTaxi orderTaxi = new OrderTaxi();
+					orderTaxi.setId(orderPrivateCar.getId());
+					orderTaxi.setState(1);
+					orderTaxi.setUserId(orderPrivateCar.getUserId());
+					orderTaxi.setStartLon(orderPrivateCar.getStartLon());
+					orderTaxi.setStartLat(orderPrivateCar.getStartLat());
+					orderTaxiService.pushOrder(orderTaxi, 3);
+					continue;
+				}
+				OrderPrivateCar pushOrder = new OrderPrivateCar();
+				BeanUtils.copyProperties(orderPrivateCar, pushOrder);
+				pushOrder.setRideType(rideType);
+				pushOrder.setServerCarModelId(serverCarModelId);
+				this.pushOrder(pushOrder);
+			}
+			return;
+		}
+		if (Integer.valueOf(3).equals(orderPrivateCar.getRideType())) {
+			this.pushOrderPrivateCar(orderPrivateCar.getId());
+			return;
+		}
+		this.pushOrder(orderPrivateCar);
+	}
+
+	private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception {
+		OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+		SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
+		if (null != query1) {
+			userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral()));
+		}
+		userInfoService.updateById(userInfo);
+
+		consumePrivateCarBenefits(orderPrivateCar);
+		transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", payAmount, 2, 1, 1, 1, orderPrivateCar.getId());
+
+		orderPrivateCar.setState(1);
+		orderPrivateCar.setPayType(payType);
+		orderPrivateCar.setPayMoney(payAmount);
+		orderPrivateCar.setPayTime(new Date());
+		orderPrivateCar.setPrepayStage(2);
+		this.updateAllColumnById(orderPrivateCar);
+
+		pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+		systemNoticeService.addSystemNotice(1, "您的快车订单已支付成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
+		dispatchPrepayPrivateCarOrder(orderPrivateCar);
+	}
 	
 	@Override
-	public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception {
+	public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception {
 		OrderPrivateCar orderPrivateCar = this.selectById(id);
-		PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
+		PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null;
+		if (query == null) {
+			query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
+		}
 		if (null != query && query.getState() == 1) {
+			UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+			query.setState(2);
+			query.setCode(order_id);
+			paymentRecordService.updateById(query);
+
+			if (isPrivateCarPrepayFirstStage(orderPrivateCar)) {
+				handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type);
+				return;
+			}
+
 			//添加交易明细
 			transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
 			orderPrivateCar.setState(8);
 			orderPrivateCar.setPayType(type);
-			orderPrivateCar.setPayMoney(query.getAmount());
+			boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+			orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), query.getAmount()) : query.getAmount());
 			orderPrivateCar.setPayTime(new Date());
-			
-			UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+			if (isPrepaySpreadStage) {
+				orderPrivateCar.setPrepayStage(5);
+				orderPrivateCar.setPrepaySecondPayNo(order_id);
+			}
+
 			OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
 			SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
 			if(null != query1){
 				userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
 				userInfoService.updateById(userInfo);
 			}
-			
-			//处理优惠券和红包
-			if (null != orderPrivateCar.getCouponId()) {
-				UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
-				userCouponRecord.setState(2);
-				userCouponRecord.setEndTime(new Date());
-				userCouponRecordService.updateById(userCouponRecord);
+
+			if (!isPrepaySpreadStage) {
+				consumePrivateCarBenefits(orderPrivateCar);
 			}
-			if (null != orderPrivateCar.getUserTaxiCardId()) {
-				UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
-				if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) {
-					JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
-					jsonObject.put("time", jsonObject.getInteger("time") - 1);
-					userTaxiCard.setContent(jsonObject.toJSONString());
-					userTaxiCardService.updateById(userTaxiCard);
-				}
-			}
-			if (null != orderPrivateCar.getRedPacketId()) {
-				UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
-				userRedPacketRecord.setState(2);
-				userRedPacketRecord.setEndTime(new Date());
-				userRedPacketRecordService.updateById(userRedPacketRecord);
-			}
-			
-			
-			query.setState(2);
-			query.setCode(order_id);
-			paymentRecordService.updateById(query);
 
 			//非追缴单才需要记录收入
 			if(null != orderPrivateCar.getRecoveryOrder() && 0 == orderPrivateCar.getRecoveryOrder()){

--
Gitblit v1.7.1