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