Преглед изворни кода

Merge remote-tracking branch 'origin/point_dev' into point_dev

jinshihui пре 1 недеља
родитељ
комит
9b14fe3c7d

+ 15 - 10
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -752,7 +752,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         Sendvoice.sendPhone(js.getcPhone());
 
         // 任务奖励 或者 消费奖励 —— 发放抽奖次数日志
-        grantLotteryCountForPay(user, orderParam);
+        grantLotteryCountForPay(user, orderNew);
 
         // 已绑定一账通 → 异步同步抽奖次数
         syncLotteryCountIfNeeded(user);
@@ -1575,15 +1575,20 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             dto.setTargetUserId(user.getLocalLiveUserId());
             dto.setSourceUserId(user.getId());
 
-            // 👇 事务提交后再执行异步
-            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
-                @Override
-                public void afterCommit() {
-                    // 事务提交完成!现在调用异步,一定能查到数据
-                    unifiedUserCenterService.syncLotteryCount(dto);
-                }
-            });
-
+            // 👇 加上这个 if 判断,只有当当前存在活跃事务时,才去注册 afterCommit 回调
+            if (TransactionSynchronizationManager.isSynchronizationActive()) {
+                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                    @Override
+                    public void afterCommit() {
+                        // 事务提交完成!现在调用异步,一定能查到数据
+                        unifiedUserCenterService.syncLotteryCount(dto);
+                    }
+                });
+            } else {
+                // 👇 兜底逻辑:如果事务没开启(比如同类自调用导致失效),就直接同步执行,避免报错
+                log.warn("当前没有活跃事务,无法注册 afterCommit 回调,将直接同步执行抽奖次数同步!");
+                unifiedUserCenterService.syncLotteryCount(dto);
+            }
         }
     }