|
@@ -752,7 +752,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
Sendvoice.sendPhone(js.getcPhone());
|
|
Sendvoice.sendPhone(js.getcPhone());
|
|
|
|
|
|
|
|
// 任务奖励 或者 消费奖励 —— 发放抽奖次数日志
|
|
// 任务奖励 或者 消费奖励 —— 发放抽奖次数日志
|
|
|
- grantLotteryCountForPay(user, orderParam);
|
|
|
|
|
|
|
+ grantLotteryCountForPay(user, orderNew);
|
|
|
|
|
|
|
|
// 已绑定一账通 → 异步同步抽奖次数
|
|
// 已绑定一账通 → 异步同步抽奖次数
|
|
|
syncLotteryCountIfNeeded(user);
|
|
syncLotteryCountIfNeeded(user);
|
|
@@ -1575,15 +1575,20 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
dto.setTargetUserId(user.getLocalLiveUserId());
|
|
dto.setTargetUserId(user.getLocalLiveUserId());
|
|
|
dto.setSourceUserId(user.getId());
|
|
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);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|