| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | this.examPaperDepartmentService = examPaperDepartmentService; |
| | | this.examPaperSubjectService = examPaperSubjectService; |
| | | this.questionSubjectService = questionSubjectService; |
| | | this.examPaperUserService = examPaperUserService; |
| | | this.userService = userService; |
| | | this.userDepartmentMapper = userDepartmentMapper; |
| | | this.departmentService = departmentService; |
| | | } |
| | | |
| | | |
| | |
| | | examPaper.setCreateTime(now); |
| | | examPaper.setCreateUser(user.getId()); |
| | | examPaper.setDeleted(false); |
| | | examPaper.setUserIds(examPaperEditRequestVM.getMenuIds()); |
| | | examPaperFromVM(examPaperEditRequestVM, examPaper, titleItemsVM); |
| | | examPaperMapper.insertSelective(examPaper); |
| | | |
| | |
| | | examPaperDepartmentService.removeByExamPaperId(examPaper.getId()); |
| | | examPaperSubjectService.removeByExamPaperId(examPaper.getId()); |
| | | } |
| | | addExamPaperDepartment(examPaperEditRequestVM, examPaper); |
| | | // addExamPaperDepartment(examPaperEditRequestVM, examPaper); |
| | | addExamPaperUser(examPaperEditRequestVM, examPaper); //批量添加试卷关联用户 |
| | | addExamPaperSubject(examPaperEditRequestVM, examPaper); |
| | | return examPaper; |
| | | } |
| | |
| | | ExamPaper examPaper = examPaperMapper.selectByPrimaryKey(id); |
| | | ExamPaperEditRequestVM vm = modelMapper.map(examPaper, ExamPaperEditRequestVM.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() |
| | |
| | | .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<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()); |
| | |
| | | .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; |
| | | } |
| | | |
| | |
| | | @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) { |
| | |
| | | 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); |
| | |
| | | keys.remove(index); |
| | | } |
| | | } |
| | | |
| | | if (!values.isEmpty()) { |
| | | int index = random.nextInt(values.size()); |
| | | int score = values.get(index); |
| | |
| | | * @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(); |
| | |
| | | * @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(10)) { |
| | | throw new QuestionException(); |
| | | } |
| | | |
| | |
| | | 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); |
| | | |
| | | //单选分数 |
| | |
| | | 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; |
| | | } |
| | | } |