Selaa lähdekoodia

考试交卷补偿任务

yangfeng 1 vuosi sitten
vanhempi
commit
4dab98d035

+ 9 - 0
web/src/main/java/com/ynfy/buss/exam/exam/dto/ExamSubmitDTO.java

@@ -22,4 +22,13 @@ public class ExamSubmitDTO {
      * 试题答案
      */
     private List<ExamAnswerDTO> examAnswers;
+
+    public ExamSubmitDTO(String userExamId, Date limitTime, List<ExamAnswerDTO> examAnswers) {
+        this.userExamId = userExamId;
+        this.limitTime = limitTime;
+        this.examAnswers = examAnswers;
+    }
+
+    public ExamSubmitDTO() {
+    }
 }

+ 55 - 0
web/src/main/java/com/ynfy/buss/exam/exam/job/MakeupSubmitExamJob.java

@@ -0,0 +1,55 @@
+package com.ynfy.buss.exam.exam.job;
+
+import com.alibaba.fastjson.JSON;
+import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
+import com.ynfy.buss.exam.exam.service.IExamService;
+import com.ynfy.buss.exam.userexam.entity.UserExam;
+import com.ynfy.buss.exam.userexam.service.IUserExamService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.jeecg.common.util.RedisUtil;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 考试交卷补偿任务
+ *
+ * @author bool
+ */
+@Slf4j
+public class MakeupSubmitExamJob implements Job {
+
+    @Autowired
+    private IExamService examService;
+
+    @Autowired
+    private IUserExamService userExamService;
+
+    @Autowired
+    public RedisUtil redisUtil;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        log.info("考试交卷补偿任务开始执行:处理已经过期了,但是状态还在进行中的考试...");
+        List<UserExam> userExamList = userExamService.listExpireExamIn();
+        if (!CollectionUtils.isEmpty(userExamList)) {
+            userExamList.forEach(userExam -> {
+                Object data = redisUtil.get(userExam.getId());
+                // 交卷
+                ExamSubmitDTO dto = null;
+                if (!Objects.isNull(data)) {
+                    dto = JSON.parseObject(String.valueOf(data), ExamSubmitDTO.class);
+                } else {
+                    dto = new ExamSubmitDTO(userExam.getId(), null, null);
+                }
+                examService.submitExam(dto);
+                examService.deleteAutoCommitJob(userExam.getId());
+            });
+        }
+    }
+}

+ 2 - 2
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -992,8 +992,8 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     @Override
     public void cacheExamAnswer(ExamSubmitDTO dto) {
         if (StringUtils.isNotBlank(dto.getUserExamId()) && !Objects.isNull(dto.getLimitTime())) {
-            //缓存答案的时间为截止时间后30分钟
-            long expireMins = DateUtil.between(new Date(), dto.getLimitTime(), DateUnit.MINUTE) + 30;
+            //缓存答案的时间为截止时间后3
+            long expireMins = DateUtil.between(new Date(), dto.getLimitTime(), DateUnit.MINUTE) + 60 * 24 * 3;
             long expireSec = expireMins * 60;
             redisUtil.set(dto.getUserExamId(), JSON.toJSONString(dto), expireSec);
         }

+ 9 - 0
web/src/main/java/com/ynfy/buss/exam/userexam/service/IUserExamService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.exam.userexam.entity.UserExam;
 
+import java.util.List;
+
 /**
  * @Description: 用户考试表
  * @Author: jeecg-boot
@@ -50,4 +52,11 @@ public interface IUserExamService extends IService<UserExam> {
      * 根据条件分页查询
      */
     IPage<UserExam> selectPageList(IPage<UserExam> page, UserExam userExam);
+
+    /**
+     * 获取过期了,并且正在进行中的考试
+     *
+     * @return
+     */
+    List<UserExam> listExpireExamIn();
 }

+ 13 - 0
web/src/main/java/com/ynfy/buss/exam/userexam/service/impl/UserExamServiceImpl.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -84,4 +85,16 @@ public class UserExamServiceImpl extends ServiceImpl<UserExamMapper, UserExam> i
     public IPage<UserExam> selectPageList(IPage<UserExam> page, UserExam userExam) {
         return userExamMapper.selectPageList(page, userExam);
     }
+
+    /**
+     * 获取过期了,并且正在进行中的考试
+     *
+     * @return
+     */
+    @Override
+    public List<UserExam> listExpireExamIn() {
+        LambdaQueryWrapper<UserExam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.le(UserExam::getLimitTime, new Date()).eq(UserExam::getState, PaperState.ING);
+        return this.list(wrapper);
+    }
 }