找回密码
 立即注册
查看: 35|回复: 0

Spring Task任务调度订单支付超时提醒案例

[复制链接]

153

主题

5

精华

157

金币

技术维护QQ:515138

积分
339
发表于 2025-12-29 13:45:10 | 显示全部楼层 |阅读模式
Spring Task任务调度订单支付超时提醒案例
  1. package com.zidiu.task;
  2. import com.zidiu.entity.Orders;
  3. import com.zidiu.mapper.OrderMapper;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.scheduling.annotation.Scheduled;
  7. import org.springframework.stereotype.Component;
  8. import java.time.LocalDateTime;
  9. import java.util.List;
  10. /**
  11. * 定时任务类,定时处理订单状态
  12. */
  13. @Component
  14. @Slf4j
  15. public class OrderTask {
  16.     @Autowired
  17.     private OrderMapper orderMapper;
  18.     /**
  19.      * 处理超时订单的方法
  20.      */
  21.     @Scheduled(cron = "0 * * * * ? ") //每分钟触发一次
  22.     public void processTimeoutOrder(){
  23.         log.info("定时处理超时订单:{}", LocalDateTime.now());
  24.         LocalDateTime time = LocalDateTime.now().plusMinutes(-15);
  25.         // select * from orders where status = ? and order_time < (当前时间 - 15分钟)
  26.         List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);
  27.         if(ordersList != null && ordersList.size() > 0){
  28.             for (Orders orders : ordersList) {
  29.                 orders.setStatus(Orders.CANCELLED);
  30.                 orders.setCancelReason("订单超时,自动取消");
  31.                 orders.setCancelTime(LocalDateTime.now());
  32.                 orderMapper.update(orders);
  33.             }
  34.         }
  35.     }
  36.     /**
  37.      * 处理一直处于派送中状态的订单
  38.      */
  39.     @Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点触发一次
  40.     public void processDeliveryOrder(){
  41.         log.info("定时处理处于派送中的订单:{}",LocalDateTime.now());
  42.         LocalDateTime time = LocalDateTime.now().plusMinutes(-60);
  43.         List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, time);
  44.         if(ordersList != null && ordersList.size() > 0){
  45.             for (Orders orders : ordersList) {
  46.                 orders.setStatus(Orders.COMPLETED);
  47.                 orderMapper.update(orders);
  48.             }
  49.         }
  50.     }
  51. }
复制代码




上一篇:Spring Task任务调度工具,定时任务开启
下一篇:WebSocket是基于TCP 的一种新的网络协议,websocket入门案例
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2026-1-13 19:30

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表