Zhangbw 2 месяцев назад
Родитель
Сommit
818021937c

+ 7 - 1
.claude/settings.local.json

@@ -1,7 +1,13 @@
 {
   "permissions": {
     "allow": [
-      "Bash(ls:*)"
+      "Bash(ls:*)",
+      "Bash(dir:*)",
+      "Bash(mvn dependency:tree:*)",
+      "Bash(tasklist:*)",
+      "Bash(findstr:*)",
+      "Bash(netstat:*)",
+      "Bash(taskkill:*)"
     ]
   }
 }

+ 8 - 1
src/main/java/com/yingpai/gupiao/scheduled/OrderScheduledTask.java

@@ -3,6 +3,7 @@ package com.yingpai.gupiao.scheduled;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yingpai.gupiao.domain.po.PaymentOrder;
 import com.yingpai.gupiao.mapper.PaymentOrderMapper;
+import jakarta.annotation.PostConstruct;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -18,8 +19,14 @@ public class OrderScheduledTask {
 
     private final PaymentOrderMapper orderMapper;
 
-    @Scheduled(cron = "0 */5 * * * ?")
+    @PostConstruct
+    public void init() {
+        log.info("OrderScheduledTask bean initialized - scheduling enabled");
+    }
+
+    @Scheduled(cron = "*/10 * * * * *")
     public void cancelExpiredOrders() {
+        log.info("定时任务开始执行 - cancelExpiredOrders");
         LocalDateTime expireTime = LocalDateTime.now().minusMinutes(15);
 
         List<PaymentOrder> expiredOrders = orderMapper.selectList(

+ 32 - 1
src/main/java/com/yingpai/gupiao/service/impl/OrderServiceImpl.java

@@ -96,11 +96,42 @@ public class OrderServiceImpl implements OrderService {
         order.setPayTime(LocalDateTime.now());
         order.setUpdateTime(LocalDateTime.now());
         orderMapper.updateById(order);
-        
+
         createSubscription(order);
+        cancelOtherPendingOrders(order.getUserId(), order.getPoolType(), orderNo);
         log.info("支付成功,orderNo: {}", orderNo);
     }
     
+    /**
+     * 取消用户在同一订阅池的其他未支付订单
+     */
+    private void cancelOtherPendingOrders(Long userId, Integer poolType, String currentOrderNo) {
+        List<PaymentOrder> pendingOrders = orderMapper.selectList(
+            new LambdaQueryWrapper<PaymentOrder>()
+                .eq(PaymentOrder::getUserId, userId)
+                .eq(PaymentOrder::getPoolType, poolType)
+                .eq(PaymentOrder::getOrderStatus, PaymentOrder.STATUS_PENDING)
+                .ne(PaymentOrder::getOrderNo, currentOrderNo)
+        );
+
+        if (pendingOrders.isEmpty()) {
+            return;
+        }
+
+        LocalDateTime now = LocalDateTime.now();
+        for (PaymentOrder order : pendingOrders) {
+            order.setOrderStatus(PaymentOrder.STATUS_CANCELLED);
+            order.setCancelTime(now);
+            order.setUpdateTime(now);
+            orderMapper.updateById(order);
+            log.info("自动取消用户其他未支付订单,orderNo: {}, userId: {}, poolType: {}",
+                    order.getOrderNo(), userId, poolType);
+        }
+
+        log.info("自动取消用户其他未支付订单完成,userId: {}, poolType: {}, 共取消{}个订单",
+                userId, poolType, pendingOrders.size());
+    }
+
     /**
      * 创建订阅
      * 超短池:到当日24点