فهرست منبع

获取缓存的考试答案,用于考试页展示;交卷时清除答案的缓存

yangfeng 2 سال پیش
والد
کامیت
7afc70fc5c

+ 11 - 0
web/src/main/java/com/yntravelsky/buss/exam/exam/controller/ExamController.java

@@ -231,4 +231,15 @@ public class ExamController extends JeecgController<Exam, IExamService> {
         examService.cacheExamAnswer(dto);
         return Result.ok();
     }
+
+
+    /**
+     * 获取缓存的考试答案
+     *
+     * @return
+     */
+    @GetMapping(value = "/getCacheAnswer")
+    public Result<?> getCacheAnswer(@RequestParam(name = "userExamId") String userExamId) {
+        return Result.ok(examService.getCacheAnswer(userExamId));
+    }
 }

+ 6 - 0
web/src/main/java/com/yntravelsky/buss/exam/exam/dto/ExamAnswerDTO.java

@@ -18,4 +18,10 @@ public class ExamAnswerDTO {
      * 试题答案
      */
     private String[] answers;
+
+
+    /**
+     * 答案索引
+     */
+    private String[] answerIndex;
 }

+ 15 - 0
web/src/main/java/com/yntravelsky/buss/exam/exam/service/IExamService.java

@@ -74,4 +74,19 @@ public interface IExamService extends IService<Exam> {
      * @return
      */
     boolean checkIsUsedInExam(String paperId);
+
+    /**
+     * 获取缓存的考试答案
+     *
+     * @return
+     */
+    ExamSubmitDTO getCacheAnswer(String userExamId);
+
+
+    /**
+     * 清除缓存的考试答案
+     *
+     * @return
+     */
+    void deleteCacheAnswer(String userExamId);
 }

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

@@ -390,8 +390,11 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
             updateUserExamAndResult(score, userExam);
         }
 
-        //异步删除自动交卷任务
-        ThreadPoolUtil.getExecutor().execute(() -> this.deleteAutoCommitJob(dto.getUserExamId()));
+        //异步删除自动交卷任务,清除redis缓存
+        ThreadPoolUtil.getExecutor().execute(() -> {
+            this.deleteAutoCommitJob(dto.getUserExamId());
+            deleteCacheAnswer(dto.getUserExamId());
+        });
     }
 
 
@@ -547,4 +550,28 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         wrapper.eq(Exam::getPaperId, paperId);
         return this.count(wrapper) > 0 ? true : false;
     }
+
+    /**
+     * 获取缓存的考试答案
+     *
+     * @return
+     */
+    @Override
+    public ExamSubmitDTO getCacheAnswer(String userExamId) {
+        Object answerObject = redisUtil.get(userExamId);
+        if (!Objects.isNull(answerObject)) {
+            return JSON.parseObject(JSON.parse(String.valueOf(answerObject)).toString(), ExamSubmitDTO.class);
+        }
+        return null;
+    }
+
+    /**
+     * 清除缓存的考试答案
+     *
+     * @return
+     */
+    @Override
+    public void deleteCacheAnswer(String userExamId) {
+        redisUtil.del(userExamId);
+    }
 }