Kaynağa Gözat

增加异步完成订单任务方法syncCompleteOrderTask

wangzhijun 4 gün önce
ebeveyn
işleme
f30d4ff7f7

+ 26 - 8
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -907,12 +907,8 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         // 添加订单完成消息通知(用户侧)
         orderNotificationService.sendCompletedNotification(orderNew);
 
-        // 完成积分任务(按照新手活动、每日活动、每月活动的优先级顺序)
-        try {
-            this.pointUserActivityTaskCompletionService.completeOrderTaskByPriority(orderNew.getcOpenId());
-        } catch (Exception e) {
-            log.error("完成积分任务失败 - 订单号:{}, 错误信息:{}", orderNew.getOrderNo(), e.getMessage(), e);
-        }
+        // 异步完成积分任务
+        syncCompleteOrderTask(orderNew);
 
         return true;
     }
@@ -1441,8 +1437,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         // 统计用户在指定时间之前完成的订单数量
         // 完成状态包括:4-待评价(已完成)和5-已完成(已评价)
         LambdaQueryWrapper<TOrder> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(TOrder::getcOpenId, openId).in(TOrder::getnStatus, OrderStatusEnum.WAIT_EVALUATE.getCode(), OrderStatusEnum.COMPLETE.getCode()).lt(TOrder::getEndTime, queryTime);
-
+        queryWrapper.eq(TOrder::getcOpenId, openId)
+                .in(TOrder::getnStatus, OrderStatusEnum.WAIT_EVALUATE.getCode(), OrderStatusEnum.COMPLETE.getCode());
+        if (ObjectUtil.isNotNull(queryTime)) {
+            queryWrapper.lt(TOrder::getEndTime, queryTime);
+        }
         return Math.toIntExact(this.count(queryWrapper));
     }
 
@@ -1646,4 +1645,23 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         return Math.max(0, Math.min(requested, remainingQuota));
     }
 
+    private void syncCompleteOrderTask(TOrder orderNew) {
+
+        if (TransactionSynchronizationManager.isSynchronizationActive()) {
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+
+                @Override
+                public void afterCommit() {
+                    // 完成积分任务(按照新手活动、每日活动、每月活动的优先级顺序)
+                    try {
+                        pointUserActivityTaskCompletionService.completeOrderTaskByPriority(orderNew.getcOpenId());
+                    } catch (Exception e) {
+                        log.error("完成积分任务失败 - 订单号:{}, 错误信息:{}", orderNew.getOrderNo(), e.getMessage(), e);
+                    }
+                }
+            });
+        }
+
+    }
+
 }