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