Browse Source

fix: 支付状态同步哈哈平台使用哈哈orderId而非本地orderNo

- Order 实体新增 hahaOrderId 字段,ORDER 回调时存储哈哈平台订单号
- notifyHahaOrderStatusChanged / syncPayStatusToHaha 优先使用哈哈号
- 本地 24 位 orderNo 不再传给哈哈 setPayStatus 导致找不到订单

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 2 weeks ago
parent
commit
2f7f7e39f0

+ 3 - 0
haha-entity/src/main/java/com/haha/entity/Order.java

@@ -30,6 +30,9 @@ public class Order implements Serializable {
 
     private String outTradeNo;
 
+    /** 哈哈平台订单号(ORDER回调返回,用于 syncPayStatusToHaha) */
+    private String hahaOrderId;
+
     private String activityId;
 
     @JsonSerialize(using = ToStringSerializer.class)

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

@@ -873,7 +873,8 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
     private void updateOrderFromCallback(Order order, String orderId, String activityId,
                                           Object orderMoney, String orderDetail,
                                           String orderName, String orderGoodsStr) {
-        // 不覆盖本地生成的订单号,哈哈的 order_id 仅作为字段记录
+        // 不覆盖本地订单号,哈哈 order_id 存入独立字段,用于后续 payStatus 同步
+        order.setHahaOrderId(orderId);
         order.setActivityId(activityId);
 
         if (orderName != null && !orderName.isEmpty()) {
@@ -1498,9 +1499,12 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
      */
     private void syncPayStatusToHaha(Order order) {
         try {
-            if (order.getOrderNo() != null && !order.getOrderNo().isEmpty()) {
-                hahaClient.getOrderApi().setPayStatus(order.getOrderNo());
-                log.info("支付状态已同步到哈哈平台 - orderNo: {}", order.getOrderNo());
+            // 优先使用哈哈平台自己的 orderId,没有则用本地 orderNo
+            String hahaRef = order.getHahaOrderId() != null && !order.getHahaOrderId().isEmpty()
+                    ? order.getHahaOrderId() : order.getOrderNo();
+            if (hahaRef != null && !hahaRef.isEmpty()) {
+                hahaClient.getOrderApi().setPayStatus(hahaRef);
+                log.info("支付状态已同步到哈哈平台 - hahaRef: {}, localOrderNo: {}", hahaRef, order.getOrderNo());
             }
         } catch (Exception e) {
             log.error("同步支付状态到哈哈平台失败 - orderNo: {}", order.getOrderNo(), e);

+ 6 - 2
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -409,8 +409,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             return;
         }
         try {
-            hahaClient.getOrderApi().setPayStatus(orderNo);
-            log.info("订单状态已同步到哈哈平台 - orderNo: {}", orderNo);
+            // 优先使用哈哈平台的 orderId,本地 orderNo 作为 fallback
+            Order order = lambdaQuery().eq(Order::getOrderNo, orderNo).one();
+            String hahaRef = (order != null && order.getHahaOrderId() != null && !order.getHahaOrderId().isEmpty())
+                    ? order.getHahaOrderId() : orderNo;
+            hahaClient.getOrderApi().setPayStatus(hahaRef);
+            log.info("订单状态已同步到哈哈平台 - hahaRef: {}, localOrderNo: {}", hahaRef, orderNo);
         } catch (Exception e) {
             log.error("同步订单状态到哈哈平台失败 - orderNo: {}", orderNo, e);
         }