From 6c12bcfde3b2d5c910ed1b11112442237021ac09 Mon Sep 17 00:00:00 2001 From: qirong <2032486488@qq.com> Date: 星期日, 16 七月 2023 10:01:38 +0800 Subject: [PATCH] 随机试卷修改 --- src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java | 67 ++++++++++++++++++++++++++++++++- 1 files changed, 64 insertions(+), 3 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 4028398..75766ed 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java @@ -50,9 +50,11 @@ private final ExamPaperDepartmentService examPaperDepartmentService; private final ExamPaperSubjectService examPaperSubjectService; private final QuestionSubjectService questionSubjectService; + private final ExamPaperUserService examPaperUserService; + private final UserService userService; @Autowired - public ExamPaperServiceImpl(ExamPaperMapper examPaperMapper, QuestionMapper questionMapper, TextContentService textContentService, QuestionService questionService, SubjectService subjectService, ExamPaperDepartmentService examPaperDepartmentService, ExamPaperSubjectService examPaperSubjectService, QuestionSubjectService questionSubjectService) { + public ExamPaperServiceImpl(ExamPaperMapper examPaperMapper, QuestionMapper questionMapper, TextContentService textContentService, QuestionService questionService, SubjectService subjectService, ExamPaperDepartmentService examPaperDepartmentService, ExamPaperSubjectService examPaperSubjectService, QuestionSubjectService questionSubjectService, ExamPaperUserService examPaperUserService, UserService userService) { super(examPaperMapper); this.examPaperMapper = examPaperMapper; this.questionMapper = questionMapper; @@ -62,6 +64,8 @@ this.examPaperDepartmentService = examPaperDepartmentService; this.examPaperSubjectService = examPaperSubjectService; this.questionSubjectService = questionSubjectService; + this.examPaperUserService = examPaperUserService; + this.userService = userService; } @@ -131,7 +135,8 @@ examPaperDepartmentService.removeByExamPaperId(examPaper.getId()); examPaperSubjectService.removeByExamPaperId(examPaper.getId()); } - addExamPaperDepartment(examPaperEditRequestVM, examPaper); +// addExamPaperDepartment(examPaperEditRequestVM, examPaper); + addExamPaperUser(examPaperEditRequestVM, examPaper); //鎵归噺娣诲姞璇曞嵎鍏宠仈鐢ㄦ埛 addExamPaperSubject(examPaperEditRequestVM, examPaper); return examPaper; } @@ -148,6 +153,12 @@ .map(q -> q.getId())) .collect(Collectors.toList()); List<Question> questions = questionMapper.selectByIds(questionIds); + //鍗曢�夋暟閲� + Integer singleChoice = questions.stream().filter(e -> e.getQuestionType() == 1).collect(Collectors.toList()).size(); + //澶氶�夋暟閲� + Integer multipleChoice = questions.stream().filter(e -> e.getQuestionType() == 2).collect(Collectors.toList()).size(); + //鍒ゆ柇鏁伴噺 + Integer trueFalse = questions.stream().filter(e -> e.getQuestionType() == 3).collect(Collectors.toList()).size(); Integer order = 0; Set<Integer> generatedNumbers = new HashSet<>(); Random random = new Random(); @@ -156,7 +167,12 @@ List<QuestionEditRequestVM> questionItemsVM = t.getQuestionItems().stream().map(i -> { Question question = questions.stream().filter(q -> q.getId().equals(i.getId())).findFirst().get(); QuestionEditRequestVM questionEditRequestVM = questionService.getQuestionEditRequestVM(question); - questionEditRequestVM.setItemOrder(getRandomNumber(t.getQuestionItems().size() - 1, generatedNumbers, random)); + questionEditRequestVM.setTitle("(" + QuestionTypeEnum.fromCode(questionEditRequestVM.getQuestionType()).getName() + ") " + questionEditRequestVM.getTitle()); + questionEditRequestVM.setItemOrder(generateRandomNumber(questionEditRequestVM.getQuestionType() == 1 ? 0 : ((questionEditRequestVM.getQuestionType() == 2 ? singleChoice : multipleChoice + singleChoice)), + questionEditRequestVM.getQuestionType() == 1 ? singleChoice : ((questionEditRequestVM.getQuestionType() == 2 ? multipleChoice + singleChoice : trueFalse + multipleChoice + singleChoice)), + generatedNumbers, random)); +// questionEditRequestVM.setItemOrder(getRandomNumber(t.getQuestionItems().size() - 1, generatedNumbers, random)); + return questionEditRequestVM; }).sorted(Comparator.comparing(QuestionEditRequestVM::getItemOrder)) .collect(Collectors.toList()); @@ -175,6 +191,13 @@ .stream().map(ExamPaperSubject::getSubjectId).toArray(Integer[]::new)); vm.setDepartmentIds(examPaperDepartmentService.getByExamPaperId(examPaper.getId()) .stream().map(ExamPaperDepartment::getDepartmentId).toArray(Integer[]::new)); + List<ExamPaperUser> examPaperUsers = examPaperUserService.getByExamPaperId(examPaper.getId()); + Integer[][] userIds = new Integer[examPaperUsers.size()][2]; + for (int i = 0; i < examPaperUsers.size(); i++) { + Integer[] userId = {userService.getUserById(examPaperUsers.get(i).getUserId()).getUserLevel(), examPaperUsers.get(i).getUserId()}; + userIds[i] = userId; + } + vm.setUserId(userIds); return vm; } @@ -259,7 +282,27 @@ examPaperDepartmentService.saves(list); } + private void addExamPaperUser(ExamPaperEditRequestVM examPaperEditRequestVM, ExamPaper examPaper) { + if (examPaperEditRequestVM.getUserIds().length == 0) { + return; + } + if (examPaperUserService.getByExamPaperId(examPaper.getId()).size() > 0) { + examPaperUserService.removeByExamPaperId(examPaper.getId()); + } + List<ExamPaperUser> list = Arrays.asList(examPaperEditRequestVM.getUserIds()).stream().map(e -> { + ExamPaperUser examPaperUser = new ExamPaperUser(); + examPaperUser.setUserId(e); + examPaperUser.setExamPaperId(examPaper.getId()); + examPaperUser.setDeleted("0"); + return examPaperUser; + }).collect(Collectors.toList()); + examPaperUserService.saves(list); + } + private void addExamPaperSubject(ExamPaperEditRequestVM examPaperEditRequestVM, ExamPaper examPaper) { + if (examPaperSubjectService.getByExamPaperId(examPaper.getId()).size() > 0) { + examPaperSubjectService.removeByExamPaperId(examPaper.getId()); + } List<ExamPaperSubject> subjectList = Arrays.asList(examPaperEditRequestVM.getSubjectId()).stream().map(e -> { ExamPaperSubject examPaperSubject = new ExamPaperSubject(); examPaperSubject.setSubjectId(e); @@ -508,4 +551,22 @@ generatedNumbers.add(randomNumber); return randomNumber; } + + /** + * 涓や釜鏁颁箣鍓嶇殑闅忔満鏁帮紙涓嶉噸澶嶏級 + * + * @param a + * @param b + * @return + */ + public static int generateRandomNumber(Integer a, Integer b, Set<Integer> generatedNumbers, Random random) { + + int randomNumber = random.nextInt(b - a) + a; + while (generatedNumbers.contains(randomNumber)) { + randomNumber = random.nextInt(b - a) + a; + } + generatedNumbers.add(randomNumber); + + return randomNumber; + } } -- Gitblit v1.8.0