浏览代码

练习卷根据isDone存储或提交

mingfu 1 月之前
父节点
当前提交
be16aa58fa

+ 3 - 5
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontExamController.java

@@ -74,12 +74,10 @@ public class FrontExamController {
     @ApiOperation("02 交卷")
     @PostMapping(value = "commitExamineePaper")
     public AjaxResult commitExamineePaper(@RequestBody AnswerSheet answerSheet) {
-        boolean savePaper = answerSheet.getQuestions().stream().filter(t -> null != t.getIsNotKnow() && t.getIsNotKnow() || t.getAnswers().isEmpty()).count() > 0; // 判断是保存还是提交
-        if(savePaper) {
-            examService.updateAnswerSheet(answerSheet);
-        } else {
-            examService.commitAnswerSheet(answerSheet);
+        if(null == answerSheet.getIsDone()) {
+            answerSheet.setIsDone(false);
         }
+        examService.commitAnswerSheet(answerSheet);
         return AjaxResult.success();
     }
 

+ 17 - 21
ie-admin/src/main/java/com/ruoyi/web/service/ExamService.java

@@ -106,13 +106,6 @@ public class ExamService {
         return answerSheet;
     }
 
-    /**
-     * 临时保存
-     */
-    public void updateAnswerSheet(AnswerSheet answer) {
-
-    }
-
     /**
      * 交卷
      * @param answerSheet
@@ -132,16 +125,16 @@ public class ExamService {
         List<LearnAnswer> updateList = Lists.newArrayList();
         Integer wrongCount = 0;
         for(PaperVO.QuestionAnswer question : answerSheet.getQuestions()) {
-            if(CollectionUtils.isEmpty(question.getSubQuestions())) {
+            if(CollectionUtils.isNotEmpty(question.getSubQuestions())) {
                 for(PaperVO.QuestionAnswer sq : question.getSubQuestions()) {
                     LearnAnswer answer = buildAnswer(answerSheet, questionMap, sq, addList, updateList);
-                    if(!answer.getState().equals(1L)) {
+                    if(answerSheet.getIsDone() && !answer.getState().equals(1L)) {
                         wrongCount++;
                     }
                 }
             } else {
                 LearnAnswer answer = buildAnswer(answerSheet, questionMap, question, addList, updateList);
-                if(!answer.getState().equals(1L)) {
+                if(answerSheet.getIsDone() && !answer.getState().equals(1L)) {
                     wrongCount++;
                 }
             }
@@ -159,16 +152,19 @@ public class ExamService {
         LearnExaminee upExaminee = new LearnExaminee();
         upExaminee.setExamineeId(answerSheet.getExamineeId());
         upExaminee.setDuration(answerSheet.getDuration());
-        upExaminee.setEndTime(new Date());
-        upExaminee.setState(ExamineeStatus.Commit.getVal());
-        upExaminee.setWrongCount(wrongCount);
+        if(answerSheet.getIsDone()) {
+            upExaminee.setEndTime(new Date());
+            upExaminee.setState(ExamineeStatus.Commit.getVal());
+            upExaminee.setWrongCount(wrongCount);
+        }
         learnExamineeMapper.updateLearnExaminee(upExaminee);
-
-        // 关闭试卷
-        LearnPaper up = new LearnPaper();
-        up.setId(answerSheet.getPaperId());
-        up.setStatus(PaperStatus.Valid.getVal());
-        paperMapper.updateLearnPaper(up);
+        if(answerSheet.getIsDone()) {
+            // 关闭试卷
+            LearnPaper up = new LearnPaper();
+            up.setId(answerSheet.getPaperId());
+            up.setStatus(PaperStatus.Valid.getVal());
+            paperMapper.updateLearnPaper(up);
+        }
     }
 
     private LearnAnswer buildAnswer(AnswerSheet answerSheet, Map<Long, PaperVO.QuestionAnswer> questionMap, PaperVO.QuestionAnswer question,
@@ -187,7 +183,7 @@ public class ExamService {
             updateList.add(answer);
         }
         answer.setAnswer(StringUtils.join(question.getAnswers(), ","));
-        answer.setState(question.getState());
+        answer.setState(question.calcState(answerSheet.getIsDone()));
         return answer;
     }
 
@@ -254,7 +250,7 @@ public class ExamService {
         paper.setRelateId(knowledgeId);
         paper.setYear(Calendar.getInstance().get(Calendar.YEAR));
         paper.setStatus(PaperStatus.TmpValid.getVal());
-        paper.setDirectKey(StringUtils.trimToEmpty(directKey));
+        paper.setDirectKey(studentId + "_" + StringUtils.trimToEmpty(directKey));
         List<LearnPaper> paperList = paperMapper.selectLearnPaperList(paper);
         if (CollectionUtils.isNotEmpty(paperList)) { // 有未做完的
             LearnPaper existPaper = paperList.get(0);

+ 5 - 3
ie-admin/src/main/java/com/ruoyi/web/service/PaperService.java

@@ -78,6 +78,7 @@ public class PaperService {
                 PaperVO.QuestionSeq qg = gropuMap.get(lqs.getTitle0());
                 if(qg == null) {
                     qg = new PaperVO.QuestionSeq();
+                    qg.setSubQuestions(Lists.newArrayList());
                     qg.setTitle(lqs.getTitle0());
                     gropuMap.put(lqs.getTitle0(), qg);
                     paperQuestionList.add(qg);
@@ -98,9 +99,9 @@ public class PaperService {
         for(LearnQuestions lqs : questions) {
             PaperVO.QuestionAnswer qs = new PaperVO.QuestionAnswer();
             if(!withParse) {
-                BeanUtils.copyProperties(lqs, qs, "options");
+                BeanUtils.copyProperties(lqs, qs, "title", "options");
             } else {
-                BeanUtils.copyProperties(lqs, qs, "options", "parse", "answer1", "answer2");
+                BeanUtils.copyProperties(lqs, qs, "title", "options", "parse", "answer1", "answer2");
             }
             QuestionType qt = QuestionType.of(lqs.getQtpye());
             qs.setTypeId(qt.getVal());
@@ -108,12 +109,13 @@ public class PaperService {
                 qs.setAnswerId(answer.getAnswerId());
                 qs.setAnswers(Arrays.asList(answer.getAnswer().split(",")));
                 qs.setState(answer.getState());
-                qs.setIsNotKnow(answer.getState().equals(3L));
+                qs.setIsNotKnow(null != answer.getState() && answer.getState().equals(3L));
             }
             if(StringUtils.isNotBlank(lqs.getTitle0())) { // 大题
                 PaperVO.QuestionAnswer qg = gropuMap.get(lqs.getTitle0());
                 if(qg == null) {
                     qg = new PaperVO.QuestionAnswer();
+                    qg.setSubQuestions(Lists.newArrayList());
                     qg.setTitle(lqs.getTitle0());
                     gropuMap.put(lqs.getTitle0(), qg);
                     paperQuestionList.add(qg);

+ 2 - 0
ie-system/src/main/java/com/ruoyi/learn/domain/AnswerSheet.java

@@ -39,6 +39,8 @@ public class AnswerSheet {
     @ApiModelProperty("是否可阅卷")
     Boolean allowScore;
 
+    private Boolean isDone;
+
     @ApiModelProperty("题定义, time, score, types")
     PaperCond conditions;
 

+ 14 - 45
ie-system/src/main/java/com/ruoyi/learn/domain/PaperVO.java

@@ -42,39 +42,7 @@ public class PaperVO {
         @ApiModelProperty("选项数组")
         List<String> options;
 
-        @ApiModelProperty("本卷中标记")
-        Boolean isMark;
-        @ApiModelProperty("是否收藏")
-        Boolean isFavorite;
-        @ApiModelProperty("不会做,转State")
-        Boolean isNotKnow;
-        @ApiModelProperty("学生回答")
-        List<String> answers;
-
-        @ApiModelProperty("答题正确状态 0 默认 1正确 2错误 3不会")
-        Long state;
-
         List<QuestionSeq> subQuestions;
-
-        public Long getState() {
-            if(null != isNotKnow && isNotKnow) {
-                return 3L;
-            }
-            QuestionType qt = QuestionType.of(this.typeId);
-            if(QuestionType.Single.equals(qt) || QuestionType.Judgment.equals(qt)) {
-                if(CollectionUtils.isEmpty(answers)) {
-                    return 0L;
-                }
-                return answers.get(0).equals(answer1) ? 1L : 2L;
-            } else if(QuestionType.Multiple.equals(qt)) {
-                if(CollectionUtils.isEmpty(answers)) {
-                    return 0L;
-                }
-                List<String> stdAnswers = Arrays.asList(answer1.split(","));
-                return stdAnswers.size() == answers.size() && CollectionUtils.intersection(stdAnswers, answers).size() == answers.size() ? 1L : 2L;
-            }
-            return 0L;
-        }
     }
 
 
@@ -108,22 +76,23 @@ public class PaperVO {
 
         List<QuestionAnswer> subQuestions;
 
-        public Long getState() {
+        public Long calcState(boolean isDone) {
             if(null != isNotKnow && isNotKnow) {
                 return 3L;
-            }
-            QuestionType qt = QuestionType.of(this.typeId);
-            if(QuestionType.Single.equals(qt) || QuestionType.Judgment.equals(qt)) {
-                if(CollectionUtils.isEmpty(answers)) {
-                    return 0L;
-                }
-                return answers.get(0).equals(answer1) ? 1L : 2L;
-            } else if(QuestionType.Multiple.equals(qt)) {
-                if(CollectionUtils.isEmpty(answers)) {
-                    return 0L;
+            } if(isDone) {
+                QuestionType qt = QuestionType.of(this.typeId);
+                if(QuestionType.Single.equals(qt) || QuestionType.Judgment.equals(qt)) {
+                    if(CollectionUtils.isEmpty(answers)) {
+                        return 0L;
+                    }
+                    return answers.get(0).equals(answer1) ? 1L : 2L;
+                } else if(QuestionType.Multiple.equals(qt)) {
+                    if(CollectionUtils.isEmpty(answers)) {
+                        return 0L;
+                    }
+                    List<String> stdAnswers = Arrays.asList(answer1.split(","));
+                    return stdAnswers.size() == answers.size() && CollectionUtils.intersection(stdAnswers, answers).size() == answers.size() ? 1L : 2L;
                 }
-                List<String> stdAnswers = Arrays.asList(answer1.split(","));
-                return stdAnswers.size() == answers.size() && CollectionUtils.intersection(stdAnswers, answers).size() == answers.size() ? 1L : 2L;
             }
             return 0L;
         }