| | |
| | | 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; |
| | |
| | | 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; // 返回空Map |
| | | } |
| | | |
| | | 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; |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 随机试卷 |
| | | * |
| | | * @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); |
| | | |
| | | } |
| | | |
| | | } |