New file |
| | |
| | | package com.ycl.jxkg.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.ycl.jxkg.domain.ExamPaperAnswerInfo; |
| | | import com.ycl.jxkg.domain.entity.*; |
| | | import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; |
| | | import com.ycl.jxkg.domain.other.KeyValue; |
| | | import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; |
| | | import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; |
| | | import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; |
| | | import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO; |
| | | import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageVO; |
| | | import com.ycl.jxkg.enums.ExamPaperAnswerStatusEnum; |
| | | import com.ycl.jxkg.enums.ExamPaperTypeEnum; |
| | | import com.ycl.jxkg.enums.QuestionTypeEnum; |
| | | import com.ycl.jxkg.mapper.ExamPaperScoreMapper; |
| | | import com.ycl.jxkg.mapper.ExamPaperMapper; |
| | | import com.ycl.jxkg.mapper.QuestionMapper; |
| | | import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper; |
| | | import com.ycl.jxkg.service.ExamPaperScoreService; |
| | | import com.ycl.jxkg.service.ExamPaperScoreDetailService; |
| | | import com.ycl.jxkg.service.TextContentService; |
| | | import com.ycl.jxkg.utils.DateTimeUtil; |
| | | import com.ycl.jxkg.utils.ExamUtil; |
| | | import com.ycl.jxkg.utils.JsonUtil; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class ExamPaperScoreServiceImpl extends ServiceImpl<ExamPaperScoreMapper, ExamPaperScore> implements ExamPaperScoreService { |
| | | |
| | | private final ExamPaperScoreMapper examPaperScoreMapper; |
| | | private final ExamPaperMapper examPaperMapper; |
| | | private final TextContentService textContentService; |
| | | private final QuestionMapper questionMapper; |
| | | private final ExamPaperScoreDetailService examPaperScoreDetailService; |
| | | private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper; |
| | | |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM) { |
| | | return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> |
| | | examPaperScoreMapper.studentPage(requestVM)); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVO examPaperSubmitVO, User user) { |
| | | ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo(); |
| | | Date now = new Date(); |
| | | ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId()); |
| | | ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType()); |
| | | //任务试卷只能做一次 |
| | | if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) { |
| | | ExamPaperScore examPaperScore = examPaperScoreMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId()); |
| | | if (null != examPaperScore) |
| | | return null; |
| | | } |
| | | //TODO:待完成 |
| | | // String frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()).getContent(); |
| | | // 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<Question> questions = questionMapper.selectByIds(questionIds); |
| | | // //将题目结构的转化为题目答案 |
| | | // List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream() |
| | | // .flatMap(t -> t.getQuestionItems().stream() |
| | | // .map(q -> { |
| | | // Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get(); |
| | | // ExamPaperSubmitItemVO customerQuestionAnswer = examPaperSubmitVO.getAnswerItems().stream() |
| | | // .filter(tq -> tq.getQuestionId().equals(q.getId())) |
| | | // .findFirst() |
| | | // .orElse(null); |
| | | // return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now); |
| | | // }) |
| | | // ).collect(Collectors.toList()); |
| | | // |
| | | // ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVO, examPaper, examPaperQuestionCustomerAnswers, user, now); |
| | | // examPaperAnswerInfo.setExamPaper(examPaper); |
| | | // examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer); |
| | | // examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers); |
| | | return examPaperAnswerInfo; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public String judge(ExamPaperSubmitVO examPaperSubmitVO) { |
| | | // ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(examPaperSubmitVO.getId()); |
| | | // List<ExamPaperSubmitItemVO> judgeItems = examPaperSubmitVO.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList()); |
| | | // List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size()); |
| | | // Integer customerScore = examPaperScore.getUserScore(); |
| | | // Integer questionCorrect = examPaperScore.getQuestionCorrect(); |
| | | // for (ExamPaperSubmitItemVO d : judgeItems) { |
| | | // ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate(); |
| | | // examPaperAnswerUpdate.setId(d.getId()); |
| | | // examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore())); |
| | | // boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore())); |
| | | // examPaperAnswerUpdate.setDoRight(doRight); |
| | | // examPaperAnswerUpdates.add(examPaperAnswerUpdate); |
| | | // customerScore += examPaperAnswerUpdate.getCustomerScore(); |
| | | // if (examPaperAnswerUpdate.getDoRight()) { |
| | | // ++questionCorrect; |
| | | // } |
| | | // } |
| | | // examPaperScore.setUserScore(customerScore); |
| | | // examPaperScore.setQuestionCorrect(questionCorrect); |
| | | // examPaperScore.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); |
| | | // examPaperScoreMapper.updateById(examPaperScore); |
| | | // examPaperScoreDetailService.updateScore(examPaperAnswerUpdates); |
| | | // |
| | | // ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperScore.getPaperType()); |
| | | // switch (examPaperTypeEnum) { |
| | | // case RandomOrder: |
| | | //TODO:待完成 |
| | | //任务试卷批改完成后,需要更新任务的状态 |
| | | // ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId()); |
| | | // Integer taskId = examPaper.getTaskExamId(); |
| | | // Integer userId = examPaperAnswer.getCreateUser(); |
| | | // TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getByTUid(taskId, userId); |
| | | // TextContent textContent = textContentService.getById(taskExamCustomerAnswer.getTextContentId()); |
| | | // List<TaskItemAnswerObject> taskItemAnswerObjects = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemAnswerObject.class); |
| | | // taskItemAnswerObjects.stream() |
| | | // .filter(d -> d.getExamPaperAnswerId().equals(examPaperAnswer.getId())) |
| | | // .findFirst().ifPresent(taskItemAnswerObject -> taskItemAnswerObject.setStatus(examPaperAnswer.getStatus())); |
| | | // textContentService.jsonConvertUpdate(textContent, taskItemAnswerObjects, null); |
| | | // textContentService.updateById(textContent); |
| | | // break; |
| | | // default: |
| | | // break; |
| | | // } |
| | | // return ExamUtil.scoreToVM(customerScore); |
| | | return "1"; |
| | | } |
| | | |
| | | @Override |
| | | public ExamPaperSubmitVO examPaperAnswerToVM(Integer id) { |
| | | ExamPaperSubmitVO examPaperSubmitVO = new ExamPaperSubmitVO(); |
| | | // ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(id); |
| | | // examPaperSubmitVO.setId(examPaperScore.getId()); |
| | | // examPaperSubmitVO.setDoTime(examPaperScore.getDoTime()); |
| | | // examPaperSubmitVO.setScore(ExamUtil.scoreToVM(examPaperScore.getUserScore())); |
| | | // List<ExamPaperScoreDetail> examPaperScoreDetails = examPaperScoreDetailService.selectListByPaperAnswerId(examPaperScore.getId()); |
| | | // List<ExamPaperSubmitItemVO> examPaperSubmitItemVOS = examPaperScoreDetails.stream() |
| | | // .map(a -> examPaperScoreDetailService.examPaperQuestionCustomerAnswerToVM(a)) |
| | | // .collect(Collectors.toList()); |
| | | // examPaperSubmitVO.setAnswerItems(examPaperSubmitItemVOS); |
| | | return examPaperSubmitVO; |
| | | } |
| | | |
| | | @Override |
| | | public Integer selectAllCount() { |
| | | return examPaperScoreMapper.selectAllCount(); |
| | | } |
| | | |
| | | @Override |
| | | public Integer selectAllQuestionCount() { |
| | | return examPaperScoreMapper.selectAllQuestionCount(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<Integer> selectMothCount() { |
| | | Date startTime = DateTimeUtil.getMonthStartDay(); |
| | | Date endTime = DateTimeUtil.getMonthEndDay(); |
| | | List<KeyValue> mouthCount = examPaperScoreMapper.selectCountByDate(startTime, endTime); |
| | | List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat(); |
| | | return mothStartToNowFormat.stream().map(md -> { |
| | | KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null); |
| | | return null == keyValue ? 0 : keyValue.getValue(); |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 用户提交答案的转化存储对象 |
| | | * |
| | | * @param question question |
| | | * @param customerQuestionAnswer customerQuestionAnswer |
| | | * @param examPaper examPaper |
| | | * @param itemOrder itemOrder |
| | | * @param user user |
| | | * @param now now |
| | | * @return ExamPaperQuestionCustomerAnswer |
| | | */ |
| | | private ExamPaperScoreDetail ExamPaperQuestionCustomerAnswerFromVM(Question question, ExamPaperSubmitItemVO customerQuestionAnswer, ExamPaper examPaper, Integer itemOrder, User user, Date now) { |
| | | ExamPaperScoreDetail examPaperScoreDetail = new ExamPaperScoreDetail(); |
| | | examPaperScoreDetail.setQuestionId(question.getId()); |
| | | examPaperScoreDetail.setExamPaperId(examPaper.getId()); |
| | | examPaperScoreDetail.setQuestionScore(null); |
| | | examPaperScoreDetail.setSubjectId(examPaper.getSubjectId()); |
| | | examPaperScoreDetail.setItemOrder(itemOrder); |
| | | examPaperScoreDetail.setCreateTime(now); |
| | | examPaperScoreDetail.setCreateUser(user.getId()); |
| | | examPaperScoreDetail.setQuestionType(question.getQuestionType()); |
| | | examPaperScoreDetail.setQuestionContent(question.getContent()); |
| | | if (null == customerQuestionAnswer) { |
| | | examPaperScoreDetail.setCustomerScore(0); |
| | | } else { |
| | | setSpecialFromVM(examPaperScoreDetail, question, customerQuestionAnswer); |
| | | } |
| | | return examPaperScoreDetail; |
| | | } |
| | | |
| | | /** |
| | | * 判断提交答案是否正确,保留用户提交的答案 |
| | | * |
| | | * @param examPaperScoreDetail examPaperQuestionCustomerAnswer |
| | | * @param question question |
| | | * @param customerQuestionAnswer customerQuestionAnswer |
| | | */ |
| | | private void setSpecialFromVM(ExamPaperScoreDetail examPaperScoreDetail, Question question, ExamPaperSubmitItemVO customerQuestionAnswer) { |
| | | QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperScoreDetail.getQuestionType()); |
| | | switch (questionTypeEnum) { |
| | | case SingleChoice: |
| | | case TrueFalse: |
| | | examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent()); |
| | | examPaperScoreDetail.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent())); |
| | | examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0); |
| | | break; |
| | | case MultipleChoice: |
| | | String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray()); |
| | | examPaperScoreDetail.setAnswer(customerAnswer); |
| | | examPaperScoreDetail.setDoRight(customerAnswer.equals(question.getCorrect())); |
| | | examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0); |
| | | break; |
| | | case GapFilling: |
| | | String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray()); |
| | | examPaperScoreDetail.setAnswer(correctAnswer); |
| | | examPaperScoreDetail.setCustomerScore(0); |
| | | break; |
| | | default: |
| | | examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent()); |
| | | examPaperScoreDetail.setCustomerScore(0); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | private ExamPaperScore ExamPaperAnswerFromVM(ExamPaperSubmitVO examPaperSubmitVO, ExamPaper examPaper, List<ExamPaperScoreDetail> examPaperScoreDetails, User user, Date now) { |
| | | Integer systemScore = examPaperScoreDetails.stream().mapToInt(a -> a.getCustomerScore()).sum(); |
| | | long questionCorrect = examPaperScoreDetails.stream().filter(a -> a.getCustomerScore().equals(a.getQuestionScore())).count(); |
| | | ExamPaperScore examPaperScore = new ExamPaperScore(); |
| | | //TODO:待完成 |
| | | // examPaperAnswer.setPaperName(examPaper.getName()); |
| | | // examPaperAnswer.setDoTime(examPaperSubmitVO.getDoTime()); |
| | | // examPaperAnswer.setExamPaperId(examPaper.getId()); |
| | | // examPaperAnswer.setCreateUser(user.getId()); |
| | | // examPaperAnswer.setCreateTime(now); |
| | | // examPaperAnswer.setSubjectId(examPaper.getSubjectId()); |
| | | // examPaperAnswer.setQuestionCount(examPaper.getQuestionCount()); |
| | | // examPaperAnswer.setPaperScore(examPaper.getScore()); |
| | | // examPaperAnswer.setPaperType(examPaper.getPaperType()); |
| | | // examPaperAnswer.setSystemScore(systemScore); |
| | | // examPaperAnswer.setUserScore(systemScore); |
| | | // examPaperAnswer.setTaskExamId(examPaper.getTaskExamId()); |
| | | // examPaperAnswer.setQuestionCorrect((int) questionCorrect); |
| | | // boolean needJudge = examPaperQuestionCustomerAnswers.stream().anyMatch(d -> QuestionTypeEnum.needSaveTextContent(d.getQuestionType())); |
| | | // if (needJudge) { |
| | | // examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.WaitJudge.getCode()); |
| | | // } else { |
| | | // examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); |
| | | // } |
| | | return examPaperScore; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM) { |
| | | return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() -> |
| | | examPaperScoreMapper.adminPage(requestVM)); |
| | | } |
| | | |
| | | @Override |
| | | public List<ExamPaperAnswerPageResponseVO> list(ExamPaperAnswerPageRequestVO requestVM) { |
| | | return examPaperScoreMapper.adminPage(requestVM); |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperAnswerPageResponseVO> pageExamPaper(ExamPaperAnswerPageRequestVO model) { |
| | | return PageHelper.startPage(model.getPageIndex(), model.getPageSize()).doSelectPageInfo(() -> |
| | | examPaperScoreMapper.pageExamPaper(model)); |
| | | } |
| | | } |