Jelajahi Sumber

fix: 支付分恢复时同步写入 serviceId

- PayScoreService 接口新增 getServiceId() 方法
- PayScoreServiceImpl 实现 getServiceId(),返回 wxPayConfig 中的 serviceId
- HahaCallbackServiceImpl 三处恢复逻辑补充 serviceId 写入:
  getOrCreateOrder / fetchRecognitionAndCreateOrder / processPayScorePayment

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 2 hari lalu
induk
melakukan
7f3e88d118

+ 7 - 0
haha-service/src/main/java/com/haha/service/impl/HahaCallbackServiceImpl.java

@@ -505,6 +505,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
                         .tryRecoverPayScoreOrderId(record.getUserId(), record.getDeviceId());
                 if (payScoreOrderId != null) {
                     payScoreState = PayScoreState.CREATED.getCode();
+                    serviceId = payScoreService.getServiceId();
                     log.info("从追踪SET恢复支付分订单ID成功 - userId: {}, deviceId: {}, payScoreOrderId: {}",
                             record.getUserId(), record.getDeviceId(), payScoreOrderId);
                 } else {
@@ -1182,6 +1183,7 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
                                 .tryRecoverPayScoreOrderId(uid, deviceId);
                         if (payScoreOrderId != null) {
                             payScoreState = PayScoreState.CREATED.getCode();
+                            serviceId = payScoreService.getServiceId();
                             log.info("从追踪SET恢复支付分订单ID成功 - userId: {}, deviceId: {}, payScoreOrderId: {}",
                                     userId, deviceId, payScoreOrderId);
                         } else {
@@ -1638,12 +1640,17 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
                     order.setPayChannel(PaymentChannel.WECHAT_PAYSCORE.getCode());
                     order.setPayType("微信支付分");
                     order.setPayScoreState(PayScoreState.CREATED.getCode());
+                    String svcId = payScoreService.getServiceId();
+                    if (svcId != null) {
+                        order.setServiceId(svcId);
+                    }
                     // 回写到数据库
                     orderService.lambdaUpdate()
                             .set(Order::getPayScoreOrderId, recovered)
                             .set(Order::getPayChannel, PaymentChannel.WECHAT_PAYSCORE.getCode())
                             .set(Order::getPayType, "微信支付分")
                             .set(Order::getPayScoreState, PayScoreState.CREATED.getCode())
+                            .set(svcId != null, Order::getServiceId, svcId)
                             .eq(Order::getId, order.getId())
                             .update();
                     log.info("支付分订单ID已从追踪SET恢复 - orderId: {}, payScoreOrderId: {}",

+ 7 - 0
haha-service/src/main/java/com/haha/service/payment/payscore/PayScoreService.java

@@ -247,4 +247,11 @@ public interface PayScoreService {
      * @return 恢复的 payScoreOrderId,未找到返回 null
      */
     String tryRecoverPayScoreOrderId(Long userId, String deviceId);
+
+    /**
+     * 获取支付分服务ID(从微信支付配置中读取)
+     *
+     * @return 服务ID,未配置返回 null
+     */
+    String getServiceId();
 }

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

@@ -1112,6 +1112,11 @@ public class PayScoreServiceImpl implements PayScoreService {
         return null;
     }
 
+    @Override
+    public String getServiceId() {
+        return wxPayConfig != null ? wxPayConfig.getServiceId() : null;
+    }
+
     /**
      * 清理用户旧的进行中支付分订单,确保不超过微信支付分 3 笔限额。
      *