package com.gkhy.exam.framework.job; import com.gkhy.exam.system.domain.ExPaperStudent; import com.gkhy.exam.system.mapper.ExPaperStudentMapper; import com.gkhy.exam.system.service.ExPaperStudentService; 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.time.ZoneOffset; import java.util.List; /** * 考生考试超时处理job */ @Slf4j @Component public class PaperStudentJob { @Autowired private ExPaperStudentMapper paperStudentMapper; @Autowired private ExPaperStudentService paperStudentService; /** * 建议:每1小时秒执行一次 */ @Scheduled(cron = "0 */10 * * * ?") public void doprogress() { try { int pageIndex = 1; int pageSize = 20; while (true) { List paperStudentList = paperStudentMapper.selectNoCompleteStudent((pageIndex - 1) * pageSize, pageSize); if (paperStudentList.isEmpty()) { break; } for (ExPaperStudent paperStudent : paperStudentList) { handle(paperStudent); } if (paperStudentList.size() < pageSize) { break; } pageIndex = pageIndex + 1; } }catch (Exception e){ log.error("PaperStudentJob doprogress error:{}",e.getMessage()); } } public void handle(ExPaperStudent pStudent){ Long currentDateTime = System.currentTimeMillis(); LocalDateTime deadline = pStudent.getExamPaper().getDeadline(); if (currentDateTime - deadline.toInstant(ZoneOffset.of("+8")).toEpochMilli() < 0) { if(pStudent.getExamPaper().getLimited()==1){ if (pStudent.getStartTime() == null) { return; } if(currentDateTime - pStudent.getStartTime() < pStudent.getExamPaper().getLimitTime() * 60 * 1000) { return; } }else { return; } } paperStudentService.handlePaperData(pStudent); } }