ScheduledTask.java 1.98 KB
package com.tianting.infoloop.task;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.tianting.infoloop.mapper.OrderDbMapper;
import com.tianting.infoloop.model.db.OrderDb;
import com.tianting.infoloop.service.OrderDbService;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class ScheduledTask {
  private final OrderDbService orderDbService;
  private final OrderDbMapper orderDbMapper;

  // 每5秒执行一次的定时任务
//  @Scheduled(fixedRate = 5000)
//  public void task1() {
//    System.out.println("定时任务1:每5秒执行一次,当前时间:" + System.currentTimeMillis());
//  }

  // 每天凌晨2点执行一次的定时任务
  @Scheduled(cron = "0 0 1 * * *")
  public void taskForUpdateOrderStatus() {
    LocalDate today = LocalDate.now();
    LocalDateTime todayZero = today.atStartOfDay();
    LocalDate tomorrow = today.plusDays(1);
    LocalDateTime tomorrowZero = tomorrow.atStartOfDay();

    LambdaQueryWrapper<OrderDb> queryWrapper = Wrappers.lambdaQuery();
    queryWrapper.eq(OrderDb::getStatus, OrderStatusEnum.TO_PREPARE.getNumber());
    queryWrapper.ge(OrderDb::getMealTime, LocalDateTimeUtil.of(todayZero));
    queryWrapper.le(OrderDb::getMealTime, LocalDateTimeUtil.of(tomorrowZero));

    final var list = orderDbService.list(queryWrapper);
    for( OrderDb orderDb: list) {
      orderDb.setStatus(OrderStatusEnum.PREPARING_VALUE);
      orderDbMapper.updateById(orderDb);
    }
  }
}