|
|
@@ -743,6 +743,9 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
return errorData;
|
|
|
}
|
|
|
|
|
|
+ // 清理用户旧的进行中支付分订单,避免微信返回"进行中订单过多"
|
|
|
+ cancelUserInProgressPayScoreOrders(userId);
|
|
|
+
|
|
|
// 如果没有传 openId,从用户表中获取
|
|
|
if (openId == null || openId.isEmpty()) {
|
|
|
User user = userService.getById(userId);
|
|
|
@@ -839,4 +842,49 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
log.error("[支付分服务] 关联预授权信息失败 - orderId: {}", order.getId(), e);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消用户所有进行中的支付分订单
|
|
|
+ * 在创建新支付分订单前调用,避免微信返回"同一实名身份下进行中的订单过多"
|
|
|
+ */
|
|
|
+ private void cancelUserInProgressPayScoreOrders(Long userId) {
|
|
|
+ try {
|
|
|
+ List<Order> inProgressOrders = orderService.lambdaQuery()
|
|
|
+ .eq(Order::getUserId, userId)
|
|
|
+ .eq(Order::getPayChannel, PaymentChannel.WECHAT_PAYSCORE.getCode())
|
|
|
+ .notIn(Order::getPayScoreState, PayScoreState.DONE.getCode(),
|
|
|
+ PayScoreState.REVOKED.getCode(), PayScoreState.EXPIRED.getCode())
|
|
|
+ .isNotNull(Order::getPayScoreOrderId)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ if (inProgressOrders == null || inProgressOrders.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("[支付分服务] 发现用户 {} 有 {} 笔进行中的支付分订单,开始清理",
|
|
|
+ userId, inProgressOrders.size());
|
|
|
+
|
|
|
+ int cancelledCount = 0;
|
|
|
+ for (Order order : inProgressOrders) {
|
|
|
+ try {
|
|
|
+ PayScoreResult cancelResult = cancelPayScoreOrder(order.getId(),
|
|
|
+ "自动取消:创建新订单前清理旧订单");
|
|
|
+ if (cancelResult.isSuccess()) {
|
|
|
+ cancelledCount++;
|
|
|
+ } else {
|
|
|
+ log.warn("[支付分服务] 取消旧订单失败 - orderId: {}, payScoreOrderId: {}, error: {}",
|
|
|
+ order.getId(), order.getPayScoreOrderId(), cancelResult.getErrorMsg());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("[支付分服务] 取消旧订单异常 - orderId: {}, payScoreOrderId: {}",
|
|
|
+ order.getId(), order.getPayScoreOrderId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("[支付分服务] 用户 {} 旧订单清理完成 - 成功: {}/{}", userId, cancelledCount, inProgressOrders.size());
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("[支付分服务] 清理用户 {} 进行中订单失败", userId, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|