Ver código fonte

fix: 支付分信息关联遗漏 — 三个关键路径全部补齐

- 提取 tryApplyPreAuthPayScore 方法,幂等、可复用
- getOrCreateOrder: 已有订单也尝试补齐支付分(不再只对新订单处理)
- fetchRecognitionAndCreateOrder: 兜底创建订单后补齐支付分(之前完全没调)
- 新增 payScoreService 为 null 的 WARN 日志

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 17 horas atrás
pai
commit
cf1983a02c

+ 27 - 8
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -473,6 +473,8 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         Order existingOrder = orderService.getOrderByActivityId(activityId);
         if (existingOrder != null) {
             log.info("找到已有订单 - activityId: {}, orderId: {}", activityId, existingOrder.getId());
+            // 订单已存在但可能缺少支付分信息(如 fetchRecognitionAndCreateOrder 创建的),尝试补齐
+            tryApplyPreAuthPayScore(existingOrder);
             return existingOrder;
         }
 
@@ -501,14 +503,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
             log.info("订单创建成功并已关联开门记录 - orderId: {}", newOrder.getId());
 
             // 从 Redis 获取预创建的支付分信息并关联到订单(需确认模式)
-            if (payScoreService != null) {
-                try {
-                    ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
-                            .applyPreAuthPayScore(newOrder);
-                } catch (Exception e) {
-                    log.warn("关联支付分预授权信息失败 - orderId: {}, error: {}", newOrder.getId(), e.getMessage());
-                }
-            }
+            tryApplyPreAuthPayScore(newOrder);
         } else {
             log.error("订单创建失败 - activityId: {}", activityId);
         }
@@ -516,6 +511,29 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
         return newOrder;
     }
 
+    /**
+     * 尝试关联支付分预授权信息到订单(幂等,仅当订单缺少支付分信息时执行)
+     */
+    private void tryApplyPreAuthPayScore(Order order) {
+        if (order == null) {
+            return;
+        }
+        // 已有支付分信息,无需重复关联
+        if (order.getPayScoreOrderId() != null) {
+            return;
+        }
+        if (payScoreService == null) {
+            log.warn("[支付分配置] payScoreService 未注入,跳过关联 - orderId: {}", order.getId());
+            return;
+        }
+        try {
+            ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
+                    .applyPreAuthPayScore(order);
+        } catch (Exception e) {
+            log.warn("关联支付分预授权信息失败 - orderId: {}, error: {}", order.getId(), e.getMessage());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void handleOrderCallback(Map<String, Object> params) {
@@ -1050,6 +1068,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
 
                 if (order != null) {
                     log.info("主动创建订单成功 - orderId: {}, activityId: {}", order.getId(), activityId);
+                    tryApplyPreAuthPayScore(order);
                 }
                 return order;
             }