From 21347ba3bb614e713d8f00f1e083cdb61e2b5d3d Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 15 七月 2026 11:18:40 +0800
Subject: [PATCH] 支付回调fix

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 4d6455b..27a9ac5 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1105,7 +1105,7 @@
 
 	@Override
 	public IcbcPaymentResp queryIcbcAdminPayment(String orderCode) {
-		TChargingOrder order = loadIcbcAdminOrder(orderCode);
+		TChargingOrder order = loadIcbcAdminOrder(orderCode, false);
 		return requireFeignData(icbcPaymentClient.query(order.getCode()), "工行支付查询失败");
 	}
 
@@ -1114,7 +1114,7 @@
 		if (request == null) {
 			throw new ServiceException("请求参数不能为空");
 		}
-		TChargingOrder order = loadIcbcAdminOrder(request.getOrderCode());
+		TChargingOrder order = loadIcbcAdminOrder(request.getOrderCode(), false);
 		BigDecimal amount;
 		try {
 			amount = IcbcAdminFundOperationSupport.requireAmount(request.getAmount());
@@ -1132,8 +1132,13 @@
 		}
 		try {
 			IcbcPaymentResp payment = requireFeignData(icbcPaymentClient.query(order.getCode()), "工行支付查询失败");
+			if (!IcbcAdminFundOperationSupport.isBankPaid(payment)) {
+				throw new ServiceException("工行查询未确认该订单支付成功,禁止退款");
+			}
 			String orderId = extractIcbcOrderId(payment);
 			order.setRechargeSerialNumber(orderId);
+			// 仅用于本次请求通过退款参数校验,不更新本地订单状态。
+			order.setRechargePaymentStatus(2);
 			RBucket<String> pendingRefund = redissonClient.getBucket("icbcAdminFund:pending:main:" + order.getCode());
 			String generatedRefundNo = "ICBCADMINREFUND" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
 			String pendingValue = pendingRefund.get();
@@ -1163,7 +1168,7 @@
 
 	@Override
 	public List<IcbcAdminSubOrderVO> queryIcbcAdminSubOrders(String orderCode) {
-		TChargingOrder order = loadIcbcAdminOrder(orderCode);
+		TChargingOrder order = loadIcbcAdminOrder(orderCode, true);
 		List<TChargingOrderShareRecord> records = chargingOrderShareRecordMapper.selectList(
 				new LambdaQueryWrapper<TChargingOrderShareRecord>()
 						.eq(TChargingOrderShareRecord::getChargingOrderId, order.getId())
@@ -1190,7 +1195,7 @@
 		if (request == null || request.getShareRecordId() == null) {
 			throw new ServiceException("请选择需要退款的分账子订单");
 		}
-		TChargingOrder order = loadIcbcAdminOrder(request.getOrderCode());
+		TChargingOrder order = loadIcbcAdminOrder(request.getOrderCode(), true);
 		TChargingOrderShareRecord shareRecord = chargingOrderShareRecordMapper.selectById(request.getShareRecordId());
 		if (shareRecord == null || !order.getId().equals(shareRecord.getChargingOrderId())) {
 			throw new ServiceException("分账记录不属于当前订单");
@@ -1248,7 +1253,7 @@
 		}
 	}
 
-	private TChargingOrder loadIcbcAdminOrder(String orderCode) {
+	private TChargingOrder loadIcbcAdminOrder(String orderCode, boolean requireLocalPaid) {
 		if (!StringUtils.hasLength(orderCode)) {
 			throw new ServiceException("订单号不能为空");
 		}
@@ -1257,7 +1262,11 @@
 				.eq(TChargingOrder::getDelFlag, 0)
 				.last("limit 1"));
 		try {
-			IcbcAdminFundOperationSupport.validateOrder(order);
+			if (requireLocalPaid) {
+				IcbcAdminFundOperationSupport.validateOrder(order);
+			} else {
+				IcbcAdminFundOperationSupport.validateIcbcOrder(order);
+			}
 		} catch (IllegalArgumentException e) {
 			throw new ServiceException(e.getMessage());
 		}

--
Gitblit v1.7.1