From 501ecc84678a081aad3ad598251a8a80e03d4116 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 17 六月 2024 17:54:54 +0800
Subject: [PATCH] 开始考试:todo 随机试卷题目

---
 src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java |  133 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 105 insertions(+), 28 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 a73b531..e2473ff 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -5,11 +5,15 @@
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.*;
+import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO;
 import com.ycl.jxkg.domain.vo.*;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
+import com.ycl.jxkg.enums.ExamPaperTypeEnum;
 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.*;
+import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.service.ExamService;
 import com.ycl.jxkg.base.Result;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,10 +26,7 @@
 import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -44,6 +45,7 @@
     private final ExamSubmitTempMapper examSubmitTempMapper;
     private final ClassesUserMapper classesUserMapper;
     private final ExamPaperMapper examPaperMapper;
+    private final ExamPaperService examPaperService;
 
     /**
      * 娣诲姞
@@ -110,7 +112,7 @@
     @Override
     public Result page(ExamQuery query) {
         IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class);
-        baseMapper.getPage(page, query);
+        baseMapper.getPage(page, query, webContext.getCurrentUser().getId());
         page.getRecords().stream().forEach(item -> {
             if (! StringUtils.hasText(item.getClassName())) {
                 item.setClassName("鐝骇涓嶅瓨鍦ㄦ垨琚垹闄�");
@@ -122,6 +124,76 @@
             }
         });
         return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+
+    @Override
+    public Result studentPage(ExamQuery query) {
+        IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class);
+        baseMapper.studentPage(page, query, webContext.getCurrentUser().getId());
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+
+    @Override
+    public Result start(Integer id) {
+        Exam exam = baseMapper.selectById(id);
+        if (Objects.isNull(exam)) {
+            throw new RuntimeException("璇ヨ�冭瘯涓嶅瓨鍦�");
+        }
+        if (Objects.isNull(exam.getExamPaperId())) {
+            throw new RuntimeException("鑰冭瘯鏈粦瀹氳瘯鍗�");
+        }
+        // 鏌ュ嚭鑰冭瘯璇曞嵎
+        ExamPaper examPaper = examPaperMapper.selectById(exam.getExamPaperId());
+        if (Objects.isNull(examPaper)) {
+            throw new RuntimeException("璇曞嵎涓嶅瓨鍦�");
+        }
+        if (StringUtils.hasText(examPaper.getContent())) {
+            throw new RuntimeException("璇曞嵎棰樼洰涓虹┖");
+        }
+        // 灏嗛鐩浆鎹负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯
+        if (ExamPaperTypeEnum.Fixed.getCode().equals(examPaper.getPaperType())
+                || ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {
+            // 杞崲
+            List<PaperFixQuestionVO> data = this.coverTo(examPaper);
+            return Result.ok().data(data);
+        } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) {
+            // todo 闅忔満棰樼洰鐢熸垚
+
+        }
+        return null;
+    }
+
+    /**
+     * 灏嗘暟鎹簱瀛樺偍鐨勯鐩紝杞负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯
+     *
+     * @param examPaper 璇曞嵎
+     * @return
+     */
+    private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper) {
+        List<PaperFixQuestionDTO> questionWarpList = JSON.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class);
+        return questionWarpList.stream().map(item -> {
+            PaperFixQuestionVO vo = new PaperFixQuestionVO();
+            vo.setTitle(item.getTitle());
+            vo.setQuestionType(item.getQuestionType());
+            List<DoQuestionVO> doQuestionVOS = item.getQuestionList().stream().map(question -> {
+                DoQuestionVO doQuestionVO = new DoQuestionVO();
+                doQuestionVO.setTitle(question.getTitle());
+                doQuestionVO.setQuestionType(item.getQuestionType());
+                doQuestionVO.setQuestionItemList(question.getItems());
+                doQuestionVO.setId(question.getId());
+                doQuestionVO.setOriginalFile(question.getOriginalFile());
+                doQuestionVO.setAudioFile(question.getAudioFile());
+                return doQuestionVO;
+            }).collect(Collectors.toList());
+            if (ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {
+                // 闅忓簭璇曞嵎鎵撲贡椤哄簭
+                Collections.shuffle(doQuestionVOS);
+            }
+            vo.setQuestionList(doQuestionVOS);
+            return vo;
+        }).collect(Collectors.toList());
     }
 
     /**
@@ -158,27 +230,31 @@
         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()));
-                }
-            }
-        });
+//        // 鍒ゆ柇鍗曢�夈�佸閫夈�佸垽鏂瀵归敊
+//        List<Integer> questionIds = new ArrayList<>(24);
+//        submitData.getPaperQuestionList().forEach(item -> {
+//            List<Integer> ids = item.getQuestionList().stream().map(DoQuestionVO::getId).collect(Collectors.toList());
+//            questionIds.addAll(ids);
+//        });
+//        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槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎
@@ -208,7 +284,7 @@
                 return;
             }
             one.setDoTime(submitData.getDoTime());
-            one.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+            one.setExamSubmit(JSON.toJSONString(submitData.getPaperQuestionList()));
             one.setCreateTime(new Date());
             one.setStatus(status);
             examSubmitTempMapper.updateById(one);
@@ -218,7 +294,7 @@
             examSubmitTemp.setDoTime(submitData.getDoTime());
             examSubmitTemp.setStatus(status);
             examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
-            examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+            examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getPaperQuestionList()));
             examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP);
             examSubmitTempMapper.insert(examSubmitTemp);
         }
@@ -264,4 +340,5 @@
         markPaperVO.setSuggestTime(examPaper.getSuggestTime());
         return Result.ok().data(markPaperVO);
     }
+
 }

--
Gitblit v1.8.0