From 21ff1b4f2ef67975eef303bff66ef60388243cf1 Mon Sep 17 00:00:00 2001
From: qirong <2032486488@qq.com>
Date: 星期三, 05 七月 2023 16:42:03 +0800
Subject: [PATCH] 随机试卷修改和统计

---
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java |   93 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 89 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
index 298d087..4028398 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
@@ -19,6 +19,7 @@
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperPageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperTitleItemVM;
+import com.mindskip.xzs.viewmodel.admin.exam.QuestionTypeVM;
 import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM;
 import com.mindskip.xzs.viewmodel.student.dashboard.PaperFilter;
 import com.mindskip.xzs.viewmodel.student.dashboard.PaperInfo;
@@ -92,9 +93,10 @@
         List<ExamPaperTitleItemObject> frameTextContentList = new ArrayList<>();
         List<ExamPaperTitleItemVM> titleItemsVM = new ArrayList<>();
         //闅忔満璇曞嵎
-        if (examPaperEditRequestVM.getSubjectSource().size() != 0) {
+        if (examPaperEditRequestVM.getQuestionTypeVMS().size() != 0) {
 //            Map<Integer, Integer> questionList = questionService.getAll().stream().collect(Collectors.toMap(Question::getId, Question::getScore));
-            randomQuestion(examPaperEditRequestVM, frameTextContentList, titleItemsVM);
+//            randomQuestion(examPaperEditRequestVM, frameTextContentList, titleItemsVM);
+            randomQuestionType(examPaperEditRequestVM, frameTextContentList, titleItemsVM);
         }
         if (titleItemsVM.size() == 0) {
             titleItemsVM = examPaperEditRequestVM.getTitleItems();
@@ -244,7 +246,7 @@
     }
 
     private void addExamPaperDepartment(ExamPaperEditRequestVM examPaperEditRequestVM, ExamPaper examPaper) {
-        if(examPaperEditRequestVM.getDepartmentIds().length==0){
+        if (examPaperEditRequestVM.getDepartmentIds().length == 0) {
             return;
         }
         List<ExamPaperDepartment> list = Arrays.asList(examPaperEditRequestVM.getDepartmentIds()).stream().map(e -> {
@@ -339,7 +341,7 @@
         Integer order = 0;
         for (Integer key : subjectSource.keySet()) {    // key锛氭暟閲�
             //璇ユ爣绛惧搴旂殑鍒嗘暟   澶氶�夛細3 鍒ゆ柇锛�3 鍗曢�夛細4
-            Integer source = 80 * subjectSource.get(key) / sum - mark;
+            Integer source = 100 * subjectSource.get(key) / sum - mark;
             // 澶氶�夊拰鍒ゆ柇鏁伴噺
             Integer multipleNumber = (subjectSource.get(key) + count) * 3 / 10;
             //澶氶�夊拰鍒ゆ柇鍒嗘暟
@@ -404,6 +406,89 @@
 
     }
 
+    /**
+     * 闅忔満璇曞嵎
+     *
+     * @param examPaperEditRequestVM 浼犲弬
+     * @param frameTextContentList
+     * @param titleItemsVM           title
+     */
+    private void randomQuestionType(ExamPaperEditRequestVM examPaperEditRequestVM, List<ExamPaperTitleItemObject> frameTextContentList, List<ExamPaperTitleItemVM> titleItemsVM) throws QuestionException {
+        //鍗曢��
+        Integer singleChoice = examPaperEditRequestVM.getQuestionTypeVMS().stream().mapToInt(QuestionTypeVM::getSingleChoice).sum();
+        //澶氶��
+        Integer multipleChoice = examPaperEditRequestVM.getQuestionTypeVMS().stream().mapToInt(QuestionTypeVM::getMultipleChoice).sum();
+        //鍒ゆ柇
+        Integer judgment = examPaperEditRequestVM.getQuestionTypeVMS().stream().mapToInt(QuestionTypeVM::getTrueFalse).sum();
+        if ((singleChoice * 4 + multipleChoice * 5 + judgment * 2) != 100) {
+            throw new QuestionException();
+        }
+
+        ExamPaperTitleItemObject examPaperTitleItemObject = new ExamPaperTitleItemObject();
+        examPaperTitleItemObject.setName(examPaperEditRequestVM.getTitleItems().get(0).getName());
+
+        ExamPaperTitleItemVM examPaperTitleItemVM = new ExamPaperTitleItemVM();
+        //titleItemsVM
+        examPaperTitleItemVM.setName(examPaperEditRequestVM.getTitleItems().get(0).getName());
+
+        List<ExamPaperQuestionItemObject> examPaperQuestionItemObjectList = new ArrayList<>();
+
+        List<QuestionEditRequestVM> questionItems = new ArrayList<>();
+
+        List<QuestionTypeVM> questionTypeVMList = examPaperEditRequestVM.getQuestionTypeVMS();
+        Integer order = 0;
+        for (QuestionTypeVM questionTypeVM : questionTypeVMList) {
+
+            List<Integer> questions = questionSubjectService.getSubject(questionTypeVM.getSubjectId())
+                    .stream().map(QuestionSubject::getQuestionId).collect(Collectors.toList());
+            List<Question> list = questionService.selectByIds(questions);
+
+            Map<Integer, Integer> multiple = new HashMap<>();
+            //澶氶��
+            Map<Integer, Integer> multipleMap = list.stream()
+                    .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.MultipleChoice.getCode()))
+                    .collect(Collectors.toMap(Question::getId, Question::getScore));
+            Integer multipleSource = questionTypeVM.getMultipleChoice() * 5;
+            selectRandomScores(multiple, multipleMap, questionTypeVM.getMultipleChoice(), multipleSource);
+
+
+            //鍒ゆ柇
+            Map<Integer, Integer> judgmentMap = list.stream()
+                    .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.TrueFalse.getCode()))
+                    .collect(Collectors.toMap(Question::getId, Question::getScore));
+            Integer trueFalse = questionTypeVM.getTrueFalse() * 2;
+            selectRandomScores(multiple, judgmentMap, questionTypeVM.getTrueFalse(), trueFalse);
+
+            //鍗曢�夊垎鏁�
+            Integer radioSource = questionTypeVM.getSingleChoice() * 4;
+            //鍗曢��
+            Map<Integer, Integer> radioMap = list.stream()
+                    .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.SingleChoice.getCode()))
+                    .collect(Collectors.toMap(Question::getId, Question::getScore));
+            selectRandomScores(multiple, radioMap, questionTypeVM.getSingleChoice(), radioSource);
+
+//            titleItemsVM.add(examPaperTitleItemVM);
+            for (Integer k : multiple.keySet()) {
+                ExamPaperQuestionItemObject examPaperQuestionItemObject = new ExamPaperQuestionItemObject();
+                examPaperQuestionItemObject.setId(k);
+                examPaperQuestionItemObject.setItemOrder(order++);
+                examPaperQuestionItemObjectList.add(examPaperQuestionItemObject);
+                //titleItemsVM
+                QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM();
+                questionEditRequestVM.setScore(multiple.get(k).toString());
+                questionItems.add(questionEditRequestVM);
+            }
+
+            examPaperTitleItemObject.setQuestionItems(examPaperQuestionItemObjectList);
+
+            //titleItemsVM
+            examPaperTitleItemVM.setQuestionItems(questionItems);
+        }
+        frameTextContentList.add(examPaperTitleItemObject);
+        titleItemsVM.add(examPaperTitleItemVM);
+
+    }
+
     public Integer getRandomNumber(Integer a, Set<Integer> generatedNumbers, Random random) {
         if (a <= 0) {
             throw new IllegalArgumentException("a蹇呴』涓烘鏁存暟");

--
Gitblit v1.8.0