From 24c9d860ced4d058b866a9fb548a8ef1d1412c20 Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期一, 06 五月 2024 18:04:10 +0800 Subject: [PATCH] 新增标签菜单添加、查询、删除、修改,学生绑定、展示、修改 --- src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java | 135 +++++++++++++++++++++++++++++++++++++------- 1 files changed, 113 insertions(+), 22 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..7186bd1 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java @@ -8,18 +8,18 @@ import com.mindskip.xzs.domain.exam.ExamPaperQuestionItemObject; import com.mindskip.xzs.domain.exam.ExamPaperTitleItemObject; import com.mindskip.xzs.domain.other.KeyValue; +import com.mindskip.xzs.domain.vo.PaperExcelVO; import com.mindskip.xzs.repository.ExamPaperMapper; import com.mindskip.xzs.repository.QuestionMapper; +import com.mindskip.xzs.repository.UserDepartmentMapper; import com.mindskip.xzs.service.*; import com.mindskip.xzs.service.enums.ActionEnum; import com.mindskip.xzs.utility.DateTimeUtil; import com.mindskip.xzs.utility.JsonUtil; import com.mindskip.xzs.utility.ModelMapperSingle; import com.mindskip.xzs.utility.ExamUtil; -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.exam.*; +import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM; import com.mindskip.xzs.viewmodel.student.dashboard.PaperFilter; import com.mindskip.xzs.viewmodel.student.dashboard.PaperInfo; @@ -30,6 +30,7 @@ import com.mindskip.xzs.domain.Question; import com.mindskip.xzs.domain.User; import org.modelmapper.ModelMapper; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,9 +51,15 @@ private final ExamPaperDepartmentService examPaperDepartmentService; private final ExamPaperSubjectService examPaperSubjectService; private final QuestionSubjectService questionSubjectService; + private final ExamPaperUserService examPaperUserService; + private final UserService userService; + private final UserDepartmentMapper userDepartmentMapper; + private final DepartmentService departmentService; + + @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, UserDepartmentMapper userDepartmentMapper, DepartmentService departmentService) { super(examPaperMapper); this.examPaperMapper = examPaperMapper; this.questionMapper = questionMapper; @@ -62,6 +69,10 @@ this.examPaperDepartmentService = examPaperDepartmentService; this.examPaperSubjectService = examPaperSubjectService; this.questionSubjectService = questionSubjectService; + this.examPaperUserService = examPaperUserService; + this.userService = userService; + this.userDepartmentMapper = userDepartmentMapper; + this.departmentService = departmentService; } @@ -116,6 +127,7 @@ examPaper.setCreateTime(now); examPaper.setCreateUser(user.getId()); examPaper.setDeleted(false); + examPaper.setUserIds(examPaperEditRequestVM.getMenuIds()); examPaperFromVM(examPaperEditRequestVM, examPaper, titleItemsVM); examPaperMapper.insertSelective(examPaper); @@ -131,16 +143,18 @@ examPaperDepartmentService.removeByExamPaperId(examPaper.getId()); examPaperSubjectService.removeByExamPaperId(examPaper.getId()); } - addExamPaperDepartment(examPaperEditRequestVM, examPaper); +// addExamPaperDepartment(examPaperEditRequestVM, examPaper); + addExamPaperUser(examPaperEditRequestVM, examPaper); //鎵归噺娣诲姞璇曞嵎鍏宠仈鐢ㄦ埛 addExamPaperSubject(examPaperEditRequestVM, examPaper); return examPaper; } @Override - public ExamPaperEditRequestVM examPaperToVM(Integer id) { + public ExamPaperEditRequestVO examPaperToVM(Integer id) { ExamPaper examPaper = examPaperMapper.selectByPrimaryKey(id); - ExamPaperEditRequestVM vm = modelMapper.map(examPaper, ExamPaperEditRequestVM.class); + ExamPaperEditRequestVO vm = modelMapper.map(examPaper, ExamPaperEditRequestVO.class); vm.setLevel(examPaper.getGradeLevel()); + vm.setMenuIds(examPaper.getUserIds()); TextContent frameTextContent = textContentService.selectById(examPaper.getFrameTextContentId()); List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent.getContent(), ExamPaperTitleItemObject.class); List<Integer> questionIds = examPaperTitleItemObjects.stream() @@ -148,17 +162,29 @@ .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(); - List<ExamPaperTitleItemVM> examPaperTitleItemVMS = examPaperTitleItemObjects.stream().map(t -> { - ExamPaperTitleItemVM tTitleVM = modelMapper.map(t, ExamPaperTitleItemVM.class); - List<QuestionEditRequestVM> questionItemsVM = t.getQuestionItems().stream().map(i -> { + List<ExamPaperTitleItemVO> examPaperTitleItemVMS = examPaperTitleItemObjects.stream().map(t -> { + ExamPaperTitleItemVO tTitleVM = new ExamPaperTitleItemVO(); + BeanUtils.copyProperties(t, tTitleVM); + List<ExamQuestionVO> 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)); + ExamQuestionVO questionEditRequestVM = questionService.getQuestionEditRequestVM(question); + 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)) + }).sorted(Comparator.comparing(ExamQuestionVO::getItemOrder)) .collect(Collectors.toList()); tTitleVM.setQuestionItems(questionItemsVM); return tTitleVM; @@ -175,6 +201,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; } @@ -209,6 +242,22 @@ @Override public List<ExamPaper> gets(Integer[] ids) { return examPaperMapper.gets(ids); + } + + @Override + public List<PaperExcelVO> getPaperExcelById(Integer id) { + List<PaperExcelVO> paperExcel = examPaperMapper.getPaperExcelById(id); + paperExcel = paperExcel.stream().map(e->{ + e.setPaperScore(ExamUtil.scoreToVM(Integer.parseInt(e.getPaperScore()))); + e.setUserScore(ExamUtil.scoreToVM(Integer.parseInt(e.getUserScore()))); + List<UserDepartment> userDepartments = userDepartmentMapper.selectByUserId(Integer.parseInt(e.getUserId())); + if(userDepartments.size() != 0){ + Department byId = departmentService.getById(userDepartments.get(0).getDepartmentId()); + e.setDepartmentName(byId.getName()); + } + return e; + }).collect(Collectors.toList()); + return paperExcel; } private void examPaperFromVM(ExamPaperEditRequestVM examPaperEditRequestVM, ExamPaper examPaper, List<ExamPaperTitleItemVM> titleItemsVM) { @@ -259,7 +308,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); @@ -291,6 +360,7 @@ int remainingScore = totalScore; for (int i = 0; i < quantity - 1; i++) { + // 濡傛灉棰樻暟閲忚秴杩囦簡棰樺簱鏁伴噺锛屾姤閿� if (i >= scoresMap.size()) { throw new QuestionException(); } @@ -305,7 +375,6 @@ keys.remove(index); } } - if (!values.isEmpty()) { int index = random.nextInt(values.size()); int score = values.get(index); @@ -321,7 +390,7 @@ * @param frameTextContentList * @param titleItemsVM title */ - private void randomQuestion(ExamPaperEditRequestVM examPaperEditRequestVM, List<ExamPaperTitleItemObject> frameTextContentList, List<ExamPaperTitleItemVM> titleItemsVM) throws QuestionException { + private void randomQuesrandomQuestiontion(ExamPaperEditRequestVM examPaperEditRequestVM, List<ExamPaperTitleItemObject> frameTextContentList, List<ExamPaperTitleItemVM> titleItemsVM) throws QuestionException { Map<Integer, Integer> subjectSource = examPaperEditRequestVM.getSubjectSource(); //鎬绘暟閲� Integer sum = subjectSource.values().stream().mapToInt(Integer::intValue).sum(); @@ -414,13 +483,17 @@ * @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) { + + + if ((singleChoice * 2 + multipleChoice * 2 + judgment * 2) != new Integer(100)) { throw new QuestionException(); } @@ -448,15 +521,15 @@ 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; + Integer multipleSource = questionTypeVM.getMultipleChoice() * 2; 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; + List<Question> collect1 = list.stream().filter(e -> e.getQuestionType().equals(QuestionTypeEnum.TrueFalse.getCode())).collect(Collectors.toList()); + Map<Integer, Integer> judgmentMap = collect1.stream().collect(Collectors.toMap(Question::getId, Question::getScore)); + Integer trueFalse1 = questionTypeVM.getTrueFalse(); + Integer trueFalse = trueFalse1 * 2; selectRandomScores(multiple, judgmentMap, questionTypeVM.getTrueFalse(), trueFalse); //鍗曢�夊垎鏁� @@ -508,4 +581,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