From e40857210a448e805913ed66f3b378d2a501c58f Mon Sep 17 00:00:00 2001
From: qirong <2032486488@qq.com>
Date: 星期二, 20 六月 2023 17:51:47 +0800
Subject: [PATCH] 修改

---
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java |  156 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 102 insertions(+), 54 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 249fa99..b98b439 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
@@ -87,61 +87,21 @@
     public ExamPaper savePaperFromVM(ExamPaperEditRequestVM examPaperEditRequestVM, User user) {
         ActionEnum actionEnum = (examPaperEditRequestVM.getId() == null) ? ActionEnum.ADD : ActionEnum.UPDATE;
         Date now = new Date();
+
+        List<ExamPaperTitleItemObject> frameTextContentList = new ArrayList<>();
+        List<ExamPaperTitleItemVM> titleItemsVM = new ArrayList<>();
+        //闅忔満璇曞嵎
         if (examPaperEditRequestVM.getSubjectSource() != null) {
 //            Map<Integer, Integer> questionList = questionService.getAll().stream().collect(Collectors.toMap(Question::getId, Question::getScore));
-            Map<Integer, Integer> subjectSource = examPaperEditRequestVM.getSubjectSource();
-            //鎬绘暟閲�
-            Integer sum = subjectSource.values().stream().mapToInt(Integer::intValue).sum();
-            Map<Integer, Integer> map = new HashMap<>();
-            Integer avg = 0;
-            for (Integer key : subjectSource.keySet()) {    // key锛氭暟閲�
-                //璇ユ爣绛惧搴旂殑鍒嗘暟   澶氶�夛細3 鍒ゆ柇锛�3 鍗曢�夛細4
-                Integer source = examPaperEditRequestVM.getAggregateSource() * subjectSource.get(key) / sum;
-                // 澶氶�夊拰鍒ゆ柇鏁伴噺
-                Integer multipleNumber = key * 3 / 10;
-                //澶氶�夊拰鍒ゆ柇鍒嗘暟
-                Integer multipleSource = source * 3 / 10;
-                List<Integer> questions = questionSubjectService.getQuestion(key)
-                        .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));
-                selectRandomScores(multiple, multipleMap, multipleNumber, multipleSource);
-
-                //鍒ゆ柇
-                Map<Integer, Integer> judgmentMap = list.stream()
-                        .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.TrueFalse.getCode()))
-                        .collect(Collectors.toMap(Question::getId, Question::getScore));
-                selectRandomScores(multiple, judgmentMap, multipleNumber, multipleSource);
-
-                //鍗曢�夋暟閲�
-                Integer radioNumber = key - (2 * multipleNumber);
-                //鍗曢�夊垎鏁�
-                Integer radioSource = source - (2 * multipleSource);
-                //鍗曢��
-                Map<Integer, Integer> radioMap = list.stream()
-                        .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.SingleChoice.getCode()))
-                        .collect(Collectors.toMap(Question::getId, Question::getScore));
-                selectRandomScores(multiple, radioMap, radioNumber, radioSource);
-                ExamPaperTitleItemObject examPaperTitleItemObject = new ExamPaperTitleItemObject();
-                examPaperTitleItemObject.setName("娴嬭瘯001");
-                Integer order = 0;
-                List<ExamPaperQuestionItemObject> examPaperQuestionItemObjectList = new ArrayList<>();
-                for (Integer k : multiple.keySet()) {
-                    ExamPaperQuestionItemObject examPaperQuestionItemObject = new ExamPaperQuestionItemObject();
-                    examPaperQuestionItemObject.setId(k);
-                    examPaperQuestionItemObject.setItemOrder(order++);
-                    examPaperQuestionItemObjectList.add(examPaperQuestionItemObject);
-                }
-                examPaperTitleItemObject.setQuestionItems(examPaperQuestionItemObjectList);
-            }
+            randomQuestion(examPaperEditRequestVM, frameTextContentList, titleItemsVM);
         }
-        List<ExamPaperTitleItemVM> titleItemsVM = examPaperEditRequestVM.getTitleItems();
-        List<ExamPaperTitleItemObject> frameTextContentList = frameTextContentFromVM(titleItemsVM);
+        if (titleItemsVM.size() < 0) {
+            titleItemsVM = examPaperEditRequestVM.getTitleItems();
+        }
+        if (frameTextContentList.size() < 0) {
+            frameTextContentList = frameTextContentFromVM(titleItemsVM);
+        }
+
         String frameTextContentStr = JsonUtil.toJsonStr(frameTextContentList);
 
         ExamPaper examPaper;
@@ -295,15 +255,22 @@
         examPaperSubjectService.saves(subjectList);
     }
 
+    /**
+     * 
+     * @param result
+     * @param scoresMap
+     * @param quantity
+     * @param totalScore
+     */
     public static void selectRandomScores(Map<Integer, Integer> result, Map<Integer, Integer> scoresMap, int quantity, int totalScore) {
-//        Map<Integer, Integer> selectedScoresMap = new HashMap<>();
+//        Map<String, Integer> selectedScoresMap = new HashMap<>();
 
         if (quantity <= 0 || totalScore <= 0 || scoresMap.isEmpty()) {
             return; // 杩斿洖绌篗ap
         }
 
         List<Integer> keys = new ArrayList<>(scoresMap.keySet());
-        List<Integer> values = new ArrayList<>(scoresMap.values());
+        List<Integer> values = scoresMap.values().stream().map(e->e=e/10).collect(Collectors.toList());
 
         Random random = new Random();
         int remainingQuantity = quantity;
@@ -330,4 +297,85 @@
 
     }
 
+    /**
+     * 闅忔満璇曞嵎
+     *
+     * @param examPaperEditRequestVM 浼犲弬
+     * @param frameTextContentList
+     * @param titleItemsVM           title
+     */
+    private void randomQuestion(ExamPaperEditRequestVM examPaperEditRequestVM, List<ExamPaperTitleItemObject> frameTextContentList, List<ExamPaperTitleItemVM> titleItemsVM) {
+        Map<Integer, Integer> subjectSource = examPaperEditRequestVM.getSubjectSource();
+        //鎬绘暟閲�
+        Integer sum = subjectSource.values().stream().mapToInt(Integer::intValue).sum();
+        Integer avg = 0;
+
+        ExamPaperTitleItemObject examPaperTitleItemObject = new ExamPaperTitleItemObject();
+        examPaperTitleItemObject.setName("娴嬭瘯001");
+
+        ExamPaperTitleItemVM examPaperTitleItemVM = new ExamPaperTitleItemVM();
+        //titleItemsVM
+        examPaperTitleItemVM.setName("娴嬭瘯001");
+
+        List<ExamPaperQuestionItemObject> examPaperQuestionItemObjectList = new ArrayList<>();
+
+        List<QuestionEditRequestVM> questionItems = new ArrayList<>();
+        for (Integer key : subjectSource.keySet()) {    // key锛氭暟閲�
+            //璇ユ爣绛惧搴旂殑鍒嗘暟   澶氶�夛細3 鍒ゆ柇锛�3 鍗曢�夛細4
+            Integer source = 20 * subjectSource.get(key) / sum;
+            // 澶氶�夊拰鍒ゆ柇鏁伴噺
+            Integer multipleNumber = subjectSource.get(key) * 3 / 10;
+            //澶氶�夊拰鍒ゆ柇鍒嗘暟
+            Integer multipleSource = source * 3 / 10;
+            List<Integer> questions = questionSubjectService.getSubject(key)
+                    .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));
+            selectRandomScores(multiple, multipleMap, multipleNumber, multipleSource);
+
+
+            //鍒ゆ柇
+            Map<Integer, Integer> judgmentMap = list.stream()
+                    .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.TrueFalse.getCode()))
+                    .collect(Collectors.toMap(Question::getId, Question::getScore));
+            selectRandomScores(multiple, judgmentMap, multipleNumber, multipleSource);
+
+            //鍗曢�夋暟閲�
+            Integer radioNumber = subjectSource.get(key) - multiple.size();
+            //鍗曢�夊垎鏁�
+            Integer radioSource = source - multiple.values().stream().mapToInt(Integer::intValue).sum();;
+            //鍗曢��
+            Map<Integer, Integer> radioMap = list.stream()
+                    .filter(e -> e.getQuestionType().equals(QuestionTypeEnum.SingleChoice.getCode()))
+                    .collect(Collectors.toMap(Question::getId, Question::getScore));
+            selectRandomScores(multiple, radioMap, radioNumber, radioSource);
+            Integer order = 0;
+            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);
+
+    }
+
 }

--
Gitblit v1.8.0