| | |
| | | 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; |
| | |
| | | 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(); |
| | |
| | | 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; |
| | | //多选和判断分数 |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 随机试卷 |
| | | * |
| | | * @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必须为正整数"); |