| | |
| | | package com.ots.project.exam.service.impl; |
| | | |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.ots.common.enums.QuestionTypeEnum; |
| | |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | public class ExamPaperAnswerServiceImpl implements ExamPaperAnswerService { |
| | | private static final Logger log = LoggerFactory.getLogger(ExamPaperAnswerServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private TExamPaperMapper examPaperMapper; |
| | | @Autowired |
| | |
| | | private ITTextContentService textContentService; |
| | | @Autowired |
| | | private TQuestionMapper questionMapper; |
| | | |
| | | @Override |
| | | public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVM examPaperSubmitVM, ExamUser user) { |
| | | ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo(); |
| | |
| | | List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class); |
| | | List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList()); |
| | | List<TQuestion> questions = questionMapper.selectByIds(questionIds); |
| | | |
| | | |
| | | // 是否跳到下一段 |
| | | setWhichPart(examPaperSubmitVM, examPaperAnswerInfo, examPaperTitleItemObjects, questions); |
| | | |
| | | examPaperAnswerInfo.setExamPaper(examPaper); |
| | | |
| | | return examPaperAnswerInfo; |
| | | } |
| | | |
| | | |
| | | // 判断是否跳到下一段 |
| | | private void setWhichPart(ExamPaperSubmitVM examPaperSubmitVM, ExamPaperAnswerInfo examPaperAnswerInfo, List<ExamPaperTitleItemObject> examPaperTitleItemObjects, List<TQuestion> questions) { |
| | | |
| | | // 分片不足多少分不能答题,答题本应该的分数是否到了阀值。 |
| | | if (Objects.isNull(examPaperSubmitVM.getPartOrder())) { |
| | | return; |
| | | } |
| | | int answerPartOrder = examPaperSubmitVM.getPartOrder(); |
| | | |
| | | SubmitReport submitReport = new SubmitReport(); |
| | | if (Objects.isNull(answerPartOrder)) { |
| | | submitReport.setJump("this"); |
| | | examPaperAnswerInfo.setSubmitReport(submitReport); |
| | | return; |
| | | } |
| | | |
| | | |
| | | // 计算是否得分 |
| | | List<ExamPaperSubmitItemVM> answerItems = examPaperSubmitVM.getAnswerItems(); |
| | | |
| | | |
| | | |
| | | // 用户答的选项 |
| | | // (questionId, content答的项) |
| | | Map<Integer, String> answerContentMap = getAnswerContentMap(answerItems); |
| | | |
| | | |
| | | // 原始分片 |
| | | Map<Integer, QuestionPart> partMap = getParts(examPaperTitleItemObjects); |
| | | |
| | | |
| | | |
| | | // 那一题是那一片 |
| | | // (questionId, partOrder) |
| | | Map<Integer, Integer> questionPartOrdeMap = getQuestionPartOrdeMap(examPaperTitleItemObjects); |
| | | |
| | | |
| | | // 用户答多少分得分 |
| | | // (partOrder, score) |
| | | Map<Integer, Integer> partAnswerScoreMap = new HashMap<>(); |
| | | |
| | | |
| | | // 本段本来应该得多少分 |
| | | // (partOrder, score) |
| | | Map<Integer, Integer> partQuestionScoreMap = new HashMap<>(); |
| | | |
| | | // 用户本段耗时 |
| | | Map<Integer, Integer> partAnswerTimeMap = new HashMap<>(); |
| | | |
| | | setAnswerScoreMap(questions, answerContentMap, questionPartOrdeMap, partAnswerScoreMap, partQuestionScoreMap); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // 本应得多少分到了阀值。 |
| | | // System.out.println("本段应该得多少分:" + partQuestionScoreMap.get(answerPartOrder)); |
| | | // System.out.println("本段最低分:" + partMap.get(answerPartOrder).getLowestScore()); |
| | | // System.out.println("自己得分:" + partAnswerScoreMap.get(answerPartOrder)); |
| | | // if (Objects.nonNull(answerPartOrder) && partQuestionScoreMap.get(answerPartOrder) >= partMap.get(answerPartOrder).getLowestScore()) { |
| | | // if (partAnswerScoreMap.get(answerPartOrder) < partQuestionScoreMap.get(answerPartOrder)) { |
| | | // submitReport.setJump("next"); |
| | | // } else { |
| | | // submitReport.setJump("this"); |
| | | // } |
| | | // } else { |
| | | // submitReport.setJump("this"); |
| | | // } |
| | | examPaperAnswerInfo.setSubmitReport(submitReport); |
| | | |
| | | // 时间的判断 |
| | | |
| | | } |
| | | |
| | | private void setAnswerScoreMap(List<TQuestion> questions, Map<Integer, String> answerContentMap, Map<Integer, Integer> questionPartOrdeMap, Map<Integer, Integer> partAnswerScoreMap, Map<Integer, Integer> partQuestionScoreMap) { |
| | | for (TQuestion tQuestion : questions) { |
| | | |
| | | // 题目的段 |
| | | int partOrder = questionPartOrdeMap.get(tQuestion.getId().intValue()); |
| | | |
| | | |
| | | // 初始值集合 |
| | | if (Objects.isNull(partQuestionScoreMap.get(partOrder))){ |
| | | partQuestionScoreMap.put(partOrder, 0); |
| | | } |
| | | |
| | | if (Objects.isNull(partAnswerScoreMap.get(partOrder))) { |
| | | partAnswerScoreMap.put(partOrder, 0); |
| | | } |
| | | |
| | | |
| | | |
| | | // 本来应该的多少分 |
| | | // 用户能答多少分得分 |
| | | if (Objects.nonNull(answerContentMap.get(tQuestion.getId().intValue()))) { |
| | | setAnswerScoreMap(partQuestionScoreMap, tQuestion, partOrder); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | // 分数的判断 |
| | | // System.out.println("题目号:" + tQuestion.getId().intValue()); |
| | | // System.out.println("题目的正确答案:" + tQuestion.getCorrect()); |
| | | // System.out.println("自己选择:" + answerContentMap.get(tQuestion.getId().intValue())); |
| | | if (Objects.equals(tQuestion.getCorrect(), answerContentMap.get(tQuestion.getId().intValue()))) { |
| | | |
| | | // 用户能答多少分得分 |
| | | setAnswerScoreMap(partAnswerScoreMap, tQuestion, partOrder); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private Map<Integer, Integer> getQuestionPartOrdeMap(List<ExamPaperTitleItemObject> examPaperTitleItemObjects) { |
| | | Map<Integer, Integer> questionPartOrdeMap = new HashMap<>(); |
| | | for (ExamPaperTitleItemObject examPaperTitleItemObject : examPaperTitleItemObjects) { |
| | |
| | | } |
| | | return questionPartOrdeMap; |
| | | } |
| | | |
| | | private Map<Integer, QuestionPart> getParts(List<ExamPaperTitleItemObject> examPaperTitleItemObjects) { |
| | | List<QuestionPart> parts = examPaperTitleItemObjects.get(0).getParts(); |
| | | |
| | | // (partOrder, questionPart) |
| | | Map<Integer, QuestionPart> partMap = new HashMap<>(); |
| | | for (QuestionPart questionPart : parts) { |
| | | partMap.put(questionPart.getPartOrder(), questionPart); |
| | | } |
| | | return partMap; |
| | | } |
| | | |
| | | private Map<Integer, String> getAnswerContentMap(List<ExamPaperSubmitItemVM> answerItems) { |
| | | Map<Integer, String> answerContentMap = new HashMap<>(); |
| | | answerItems.stream().forEach(answerItem ->{ |
| | |
| | | }); |
| | | return answerContentMap; |
| | | } |
| | | |
| | | private void setAnswerScoreMap(Map<Integer, Integer> partQuestionScoreMap, TQuestion tQuestion, int partOrder) { |
| | | int questonScore = Objects.nonNull(tQuestion.getScore()) ? tQuestion.getScore().intValue() : 0; |
| | | if (Objects.nonNull(partQuestionScoreMap.get(partOrder))) { |
| | |
| | | partQuestionScoreMap.put(partOrder, questonScore); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 用户提交答案的转化存储对象 |
| | | * |
| | | * @param question question |
| | | * @param customerQuestionAnswer customerQuestionAnswer |
| | | * @param examPaper examPaper |
| | | * @param itemOrder itemOrder |
| | | * @param user user |
| | | * @param now now |
| | | * @return ExamPaperQuestionCustomerAnswer |
| | | */ |
| | | private ExamPaperQuestionCustomerAnswer ExamPaperQuestionCustomerAnswerFromVM(TQuestion question, ExamPaperSubmitItemVM customerQuestionAnswer, TExamPaper examPaper, Integer itemOrder, ExamUser user, Date now) { |
| | | ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = new ExamPaperQuestionCustomerAnswer(); |
| | | examPaperQuestionCustomerAnswer.setQuestionId(question.getId().intValue()); |
| | | examPaperQuestionCustomerAnswer.setExamPaperId(examPaper.getId().intValue()); |
| | | |
| | | |
| | | // examPaperQuestionCustomerAnswer.setWhichPart(question.getScore().intValue()); |
| | | // examPaperQuestionCustomerAnswer.setSubjectId(examPaper.getSubjectId().intValue()); |
| | | examPaperQuestionCustomerAnswer.setItemOrder(itemOrder); |
| | | examPaperQuestionCustomerAnswer.setCreateTime(now); |
| | | examPaperQuestionCustomerAnswer.setCreateUser(user.getId()); |
| | |
| | | } |
| | | return examPaperQuestionCustomerAnswer; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 判断提交答案是否正确,保留用户提交的答案 |
| | | * |
| | | * @param examPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer |
| | | * @param question question |
| | | * @param customerQuestionAnswer customerQuestionAnswer |
| | | */ |
| | | private void setSpecialFromVM(ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer, TQuestion question, ExamPaperSubmitItemVM customerQuestionAnswer) { |
| | | QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType()); |
| | | switch (questionTypeEnum) { |
| | |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVM requestVM) { |
| | | return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> |
| | | examPaperAnswerMapper.studentPage(requestVM)); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String judge(ExamPaperSubmitVM examPaperSubmitVM) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public ExamPaperSubmitVM examPaperAnswerToVM(Integer id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Integer selectAllCount() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<Integer> selectMothCount() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public int deleteById(Integer id) { |
| | | return 0; |
| | | } |
| | | |
| | | @Override |
| | | public int insert(ExamPaperAnswer record) { |
| | | return examPaperAnswerMapper.insertSelective(record); |
| | | } |
| | | |
| | | @Override |
| | | public int insertByFilter(ExamPaperAnswer record) { |
| | | return examPaperAnswerMapper.insertSelective(record); |
| | | } |
| | | |
| | | @Override |
| | | public ExamPaperAnswer selectById(Integer id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public int updateByIdFilter(ExamPaperAnswer record) { |
| | | return 0; |
| | | } |
| | | |
| | | @Override |
| | | public int updateById(ExamPaperAnswer record) { |
| | | return 0; |