xiangpei
2024-07-01 e0614cb9fa53719a3ccdaab4a0cbf6768af5baa2
考试定时任务、考试修改调整
2个文件已修改
1个文件已添加
58 ■■■■■ 已修改文件
src/main/java/com/ycl/jxkg/JxkgApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/job/ExamJob.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/JxkgApplication.java
@@ -4,6 +4,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
@@ -12,6 +13,7 @@
 * Copyright (C), 2020-2024, 武汉思维跳跃科技有限公司
 * @date 2021/12/25 9:45
 */
@EnableScheduling
@SpringBootApplication
@EnableTransactionManagement
@EnableConfigurationProperties(value = { SystemConfig.class})
src/main/java/com/ycl/jxkg/job/ExamJob.java
New file
@@ -0,0 +1,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);
            }
        }
    }
}
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -94,6 +94,10 @@
        Exam entity = baseMapper.selectById(form.getId());
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        // 判断考试状态
        if (! ExamStatusEnum.NOT_START.equals(entity.getStatus())) {
            throw new RuntimeException("只能修改还未开始的考试");
        }
        BeanUtils.copyProperties(form, entity);
        entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
        baseMapper.updateById(entity);