xiangpei
2024-07-01 e0614cb9fa53719a3ccdaab4a0cbf6768af5baa2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.ycl.jxkg.job;
 
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ycl.jxkg.domain.entity.Exam;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import com.ycl.jxkg.mapper.ExamMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * @author:xp
 * @date:2024/7/1 11:06
 */
@Component
@RequiredArgsConstructor
public class ExamJob {
 
    private final ExamMapper examMapper;
 
 
    @Scheduled(fixedRate = 120000) // 两分钟执行一次,定时任务作为mq消费失败的保底
    private void updateExamStatus() {
        List<Exam> notFinishedExams = new LambdaQueryChainWrapper<>(examMapper)
                .select(Exam::getId, Exam::getStatus, Exam::getStartTime, Exam::getEndTime)
                .ne(Exam::getStatus, ExamStatusEnum.FINISHED)
                .list();
        List<Exam> notStartExams = notFinishedExams.stream().filter(item -> ExamStatusEnum.NOT_START.equals(item.getStatus())).collect(Collectors.toList());
        List<Exam> ingExams = notFinishedExams.stream().filter(item -> ExamStatusEnum.ING.equals(item.getStatus())).collect(Collectors.toList());
        Date now = new Date();
        // 未开始的状态 到 进行中
        for (Exam exam : notStartExams) {
            if (now.after(exam.getStartTime()) && now.before(exam.getEndTime())) {
                exam.setStatus(ExamStatusEnum.ING);
                examMapper.updateById(exam);
            }
        }
        // 从进行中状态 到 结束
        for (Exam ingExam : ingExams) {
            if (now.after(ingExam.getEndTime())) {
                ingExam.setStatus(ExamStatusEnum.FINISHED);
                examMapper.updateById(ingExam);
            }
        }
 
    }
 
}