Pārlūkot izejas kodu

fix: 订单号统一由本地生成,不再被哈哈回调短号覆盖

- updateOrderFromCallback 移除 order.setOrderNo(orderId) 覆盖逻辑
- 重复回调检查改为按金额匹配,不再依赖订单号比对

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 2 nedēļas atpakaļ
vecāks
revīzija
1476abdaad

+ 6 - 3
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -538,8 +538,11 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
                 return;
             }
 
-            if (orderId != null && orderId.equals(localOrder.getOrderNo())) {
-                log.info("订单已处理过,跳过更新 - orderId: {}", orderId);
+            // 如果订单已有金额且与回调金额一致,说明是重复回调,跳过
+            if (orderMoney != null && localOrder.getTotalAmount() != null
+                    && localOrder.getTotalAmount().compareTo(BigDecimal.ZERO) > 0
+                    && localOrder.getTotalAmount().compareTo(new BigDecimal(orderMoney.toString())) == 0) {
+                log.info("订单已处理过(金额一致),跳过更新 - orderId: {}", orderId);
                 saveOrderInfoToRedis(localOrder, activityId, orderId, orderMoney, orderDetail);
                 return;
             }
@@ -870,7 +873,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
     private void updateOrderFromCallback(Order order, String orderId, String activityId,
                                           Object orderMoney, String orderDetail,
                                           String orderName, String orderGoodsStr) {
-        order.setOrderNo(orderId);
+        // 不覆盖本地生成的订单号,哈哈的 order_id 仅作为字段记录
         order.setActivityId(activityId);
 
         if (orderName != null && !orderName.isEmpty()) {