From 9e3d47a16aa7b4ed4edbcc1a09ac5949aa8f8ff6 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 14 六月 2024 10:50:52 +0800
Subject: [PATCH] 定时保存临时试卷

---
 src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
index 378a11c..921cff5 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -1,8 +1,20 @@
 package com.ycl.jxkg.service.impl;
 
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.Exam;
+import com.ycl.jxkg.domain.entity.ExamSubmitTemp;
+import com.ycl.jxkg.domain.entity.Question;
+import com.ycl.jxkg.domain.vo.DoQuestionVO;
+import com.ycl.jxkg.domain.vo.ExamSubmitVO;
+import com.ycl.jxkg.enums.QuestionTypeEnum;
+import com.ycl.jxkg.enums.general.ExamStatusEnum;
+import com.ycl.jxkg.enums.general.ExamSubmitTempStatusEnum;
 import com.ycl.jxkg.mapper.ExamMapper;
+import com.ycl.jxkg.mapper.ExamSubmitTempMapper;
+import com.ycl.jxkg.mapper.QuestionMapper;
 import com.ycl.jxkg.service.ExamService;
 import com.ycl.jxkg.base.Result;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,7 +27,10 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.Assert;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -29,37 +44,45 @@
 public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements ExamService {
 
     private final ExamMapper examMapper;
+    private final WebContext webContext;
+    private final QuestionMapper questionMapper;
+    private final ExamSubmitTempMapper examSubmitTempMapper;
 
     /**
      * 娣诲姞
+     *
      * @param form
      * @return
      */
     @Override
     public Result add(ExamForm form) {
         Exam entity = ExamForm.getEntityByForm(form, null);
+        entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
+        entity.setTeacherId(webContext.getCurrentUser().getId());
         baseMapper.insert(entity);
         return Result.ok("娣诲姞鎴愬姛");
     }
 
     /**
      * 淇敼
+     *
      * @param form
      * @return
      */
     @Override
     public Result update(ExamForm form) {
         Exam entity = baseMapper.selectById(form.getId());
-
         // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         BeanUtils.copyProperties(form, entity);
+        entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
         baseMapper.updateById(entity);
         return Result.ok("淇敼鎴愬姛");
     }
 
     /**
      * 鎵归噺鍒犻櫎
+     *
      * @param ids
      * @return
      */
@@ -71,6 +94,7 @@
 
     /**
      * id鍒犻櫎
+     *
      * @param id
      * @return
      */
@@ -82,6 +106,7 @@
 
     /**
      * 鍒嗛〉鏌ヨ
+     *
      * @param query
      * @return
      */
@@ -94,6 +119,7 @@
 
     /**
      * 鏍规嵁id鏌ユ壘
+     *
      * @param id
      * @return
      */
@@ -106,6 +132,7 @@
 
     /**
      * 鍒楄〃
+     *
      * @return
      */
     @Override
@@ -116,4 +143,76 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    @Override
+    public Result examSubmit(ExamSubmitVO submitData) {
+        // 鏍¢獙
+        Exam exam = examMapper.selectById(submitData.getExamId());
+        if (Objects.isNull(exam)) {
+            throw new RuntimeException("璇ヨ�冭瘯涓嶅瓨鍦�");
+        }
+        // 鍒ゆ柇鍗曢�夈�佸閫夈�佸垽鏂瀵归敊
+        List<Integer> questionIds = submitData.getQuestionList().stream().map(DoQuestionVO::getId).collect(Collectors.toList());
+        List<Question> questionList = questionMapper.getAnswerInfo(questionIds);
+        Map<Integer, Question> answerMap = questionList.stream().collect(Collectors.toMap(Question::getId, entity -> entity));
+        submitData.getQuestionList().stream().forEach(item -> {
+            Question question = answerMap.get(item.getId());
+            if (Objects.nonNull(question)
+                    && (QuestionTypeEnum.SingleChoice.getCode().equals(question.getQuestionType())
+                    || QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())
+                    || QuestionTypeEnum.TrueFalse.getCode().equals(question.getQuestionType())
+            )) {
+                String correct = question.getCorrect();
+                if (QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())) {
+                    // 濡傛灉鏄�夋嫨棰橈紝閭d箞灏嗙瓟妗堣浆涓簂ist
+                    List<String> answerList = JSON.parseArray(correct, String.class);
+                    item.setRight(answerList.containsAll(item.getAnswerList()));
+                } else {
+                    item.setRight(question.getCorrect().equals(item.getAnswer()));
+                }
+            }
+        });
+        // 闃呭嵎鍚庢墠寰�exam_paper_answer淇濆瓨鑰冭瘯鎴愮哗銆佷互鍙婁繚瀛樺埌exam_paper_customer_answer
+        // 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃
+        // 璇ユ帴鍙f槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎
+        saveTempExam(submitData, ExamSubmitTempStatusEnum.FINISH);
+        return Result.ok();
+    }
+
+    @Override
+    public Result timingSubmit(ExamSubmitVO submitData) {
+        saveTempExam(submitData, ExamSubmitTempStatusEnum.TEMP);
+        return Result.ok();
+    }
+
+    /**
+     * 淇濆瓨涓存椂璇曞嵎
+     *
+     * @param submitData  鍓嶇浼犻�掔殑璇曞嵎鏁版嵁
+     * @param status  璇曞嵎鐨勭姸鎬�
+     */
+    public void saveTempExam(ExamSubmitVO submitData, ExamSubmitTempStatusEnum status) {
+        ExamSubmitTemp one = new LambdaQueryChainWrapper<>(examSubmitTempMapper)
+                .eq(ExamSubmitTemp::getExamId, submitData.getExamId())
+                .eq(ExamSubmitTemp::getUserId, webContext.getCurrentUser().getId())
+                .one();
+        if (Objects.nonNull(one)) {
+            if (ExamSubmitTempStatusEnum.FINISH.equals(one.getStatus())) {
+                return;
+            }
+            one.setDoTime(submitData.getDoTime());
+            one.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+            one.setCreateTime(new Date());
+            one.setStatus(status);
+            examSubmitTempMapper.updateById(one);
+        } else {
+            ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
+            examSubmitTemp.setExamId(submitData.getExamId());
+            examSubmitTemp.setDoTime(submitData.getDoTime());
+            examSubmitTemp.setStatus(status);
+            examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
+            examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+            examSubmitTempMapper.insert(examSubmitTemp);
+        }
+    }
 }

--
Gitblit v1.8.0