Spring Task任务调度订单支付超时提醒案例
- package com.zidiu.task;
-
- import com.zidiu.entity.Orders;
- import com.zidiu.mapper.OrderMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import java.time.LocalDateTime;
- import java.util.List;
-
- /**
- * 定时任务类,定时处理订单状态
- */
- @Component
- @Slf4j
- public class OrderTask {
-
- @Autowired
- private OrderMapper orderMapper;
-
- /**
- * 处理超时订单的方法
- */
- @Scheduled(cron = "0 * * * * ? ") //每分钟触发一次
- public void processTimeoutOrder(){
- log.info("定时处理超时订单:{}", LocalDateTime.now());
-
- LocalDateTime time = LocalDateTime.now().plusMinutes(-15);
-
- // select * from orders where status = ? and order_time < (当前时间 - 15分钟)
- List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);
-
- if(ordersList != null && ordersList.size() > 0){
- for (Orders orders : ordersList) {
- orders.setStatus(Orders.CANCELLED);
- orders.setCancelReason("订单超时,自动取消");
- orders.setCancelTime(LocalDateTime.now());
- orderMapper.update(orders);
- }
- }
- }
-
- /**
- * 处理一直处于派送中状态的订单
- */
- @Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点触发一次
- public void processDeliveryOrder(){
- log.info("定时处理处于派送中的订单:{}",LocalDateTime.now());
-
- LocalDateTime time = LocalDateTime.now().plusMinutes(-60);
-
- List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, time);
-
- if(ordersList != null && ordersList.size() > 0){
- for (Orders orders : ordersList) {
- orders.setStatus(Orders.COMPLETED);
- orderMapper.update(orders);
- }
- }
- }
- }
复制代码
|