首先在启动类添加@EnableScheduling开启定时任务调度
新建一个类处理定时任务比如LessonStatusCheckJob
在上面添加@Component
定义一个方法处理过期课程
首先是先得到所有的课程集合排除已标注状态为过期的课程
第二步是将拿到的课程集合进行遍历筛选时间超出设定的时间将状态设置为过期
第三步是将集合全部更新
@Component
@Slf4j
@RequiredArgsConstructor
public class LessonStatusCheckJob {
private final ILearningLessonService lessonService;
@Scheduled(cron = "0 * * * * ?")//每分钟执行一次 秒,分,时,日,月,周,年
public void lessonStatusCheck(){
//1.查询状态为未过期的课程 不区分用户
List<LearningLesson> list = lessonService.list(Wrappers.<LearningLesson>lambdaQuery()
.ne(LearningLesson::getStatus, LessonStatus.EXPIRED));
LocalDateTime now = LocalDateTime.now();
//2.判断是否过期
for (LearningLesson lesson : list) {
if (now.isAfter(lesson.getExpireTime())){
lesson.setStatus(LessonStatus.EXPIRED);
}
}
//3.批量更新
lessonService.updateBatchById(list);
}
}