Procházet zdrojové kódy

fix: 补充所有支付/退款状态变更路径的哈哈平台同步

原先仅 HahaCallbackServiceImpl.processPayScorePayment 一个路径
会同步支付状态到哈哈平台,其余全部缺失:
- OrderServiceImpl.updatePayStatus 新增同步(覆盖所有支付回调)
- PaymentServiceImpl.updateOrderRefundStatus 新增同步(退款完成)
- PayScoreServiceImpl 三处新增同步:
  - completePayScoreOrder(DONE 完结扣款)
  - handlePayScoreCallback(USER_PAID / REFUND_PAID)
  - syncPayScoreStatus(定时同步任务)
- HahaClient 注入为 required=false,miniapp 模块不受影响

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline před 2 týdny
rodič
revize
37d040817b

+ 6 - 1
haha-service/src/main/java/com/haha/service/OrderService.java

@@ -77,7 +77,12 @@ public interface OrderService extends IService<Order> {
     Order getOrderByOutTradeNo(String outTradeNo);
     Order getOrderBydeviceId(String deviceId);
     boolean updatePayStatus(String orderNo, String payStatus);
-    
+
+    /**
+     * 通知哈哈平台订单支付/退款状态已变更
+     */
+    void notifyHahaOrderStatusChanged(String orderNo);
+
     /**
      * 根据活动ID查询订单
      *

+ 23 - 1
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -89,6 +89,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Lazy
     private InviteActivityService inviteActivityService;
 
+    @Autowired(required = false)
+    private com.haha.sdk.HahaClient hahaClient;
+
     @Autowired
     @Lazy
     private OrderGoodsMapper orderGoodsMapper;
@@ -387,7 +390,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     @Override
     public boolean updatePayStatus(String orderNo, String payStatus) {
-        return lambdaUpdate().eq(Order::getOrderNo, orderNo).set(Order::getPayStatus, payStatus).update();
+        boolean updated = lambdaUpdate().eq(Order::getOrderNo, orderNo).set(Order::getPayStatus, payStatus).update();
+        if (updated && (OrderConstants.PAY_STATUS_PAID.equals(payStatus)
+                || OrderConstants.PAY_STATUS_REFUND.equals(payStatus)
+                || OrderConstants.PAY_STATUS_PARTIAL_REFUND.equals(payStatus))) {
+            notifyHahaOrderStatusChanged(orderNo);
+        }
+        return updated;
+    }
+
+    @Override
+    public void notifyHahaOrderStatusChanged(String orderNo) {
+        if (hahaClient == null || orderNo == null || orderNo.isEmpty()) {
+            return;
+        }
+        try {
+            hahaClient.getOrderApi().setPayStatus(orderNo);
+            log.info("订单状态已同步到哈哈平台 - orderNo: {}", orderNo);
+        } catch (Exception e) {
+            log.error("同步订单状态到哈哈平台失败 - orderNo: {}", orderNo, e);
+        }
     }
 
     /**

+ 2 - 0
haha-service/src/main/java/com/haha/service/payment/impl/PaymentServiceImpl.java

@@ -642,6 +642,8 @@ public class PaymentServiceImpl implements PaymentService {
         }
 
         orderService.updateById(order);
+        // 同步退款状态到哈哈平台
+        orderService.notifyHahaOrderStatusChanged(order.getOrderNo());
         log.info("订单退款状态已更新 - orderId={}, refundAmount={}(累计), payStatus={}",
                 order.getId(), cumulativeAmount, order.getPayStatus());
     }

+ 9 - 0
haha-service/src/main/java/com/haha/service/payment/payscore/impl/PayScoreServiceImpl.java

@@ -183,6 +183,8 @@ public class PayScoreServiceImpl implements PayScoreService {
                 order.setStatus(OrderStatus.COMPLETED.getCode());
                 order.setPayTime(LocalDateTime.now());
                 order.setPayScoreFailReason(null);
+                // 同步支付状态到哈哈平台
+                orderService.notifyHahaOrderStatusChanged(order.getOrderNo());
                 log.info("[支付分服务] 完结并扣款成功 - orderId: {}, state: {}", orderId, state);
             } else if (PayScoreState.isPaying(state)) {
                 log.warn("[支付分服务] 完结成功但用户待支付 - orderId: {}, state: {}", orderId, state);
@@ -344,6 +346,11 @@ public class PayScoreServiceImpl implements PayScoreService {
 
         orderService.updateById(order);
 
+        // 支付/退款状态变更时同步到哈哈平台
+        if ("PAYSCORE.USER_PAID".equals(eventType) || "PAYSCORE.REFUND_PAID".equals(eventType)) {
+            orderService.notifyHahaOrderStatusChanged(order.getOrderNo());
+        }
+
         return result;
     }
 
@@ -385,6 +392,8 @@ public class PayScoreServiceImpl implements PayScoreService {
                 if (result.getTotalAmount() != null) {
                     order.setTotalAmount(result.getTotalAmount());
                 }
+                // 同步支付状态到哈哈平台
+                orderService.notifyHahaOrderStatusChanged(order.getOrderNo());
             } else if (PayScoreState.isRevoked(newState)) {
                 order.setStatus(OrderStatus.CANCELLED.getCode());
             } else if (PayScoreState.isExpired(newState)) {