package com.mindskip.xzs.service.impl; import com.mindskip.xzs.domain.ExamPaperQuestionCustomerAnswer; import com.mindskip.xzs.domain.other.ExamPaperAnswerUpdate; import com.mindskip.xzs.domain.other.KeyValue; import com.mindskip.xzs.domain.TextContent; import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.repository.ExamPaperQuestionCustomerAnswerMapper; import com.mindskip.xzs.service.ExamPaperQuestionCustomerAnswerService; import com.mindskip.xzs.service.TextContentService; import com.mindskip.xzs.utility.DateTimeUtil; import com.mindskip.xzs.utility.ExamUtil; import com.mindskip.xzs.utility.HtmlUtil; import com.mindskip.xzs.utility.JsonUtil; import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service public class ExamPaperQuestionCustomerAnswerServiceImpl extends BaseServiceImpl implements ExamPaperQuestionCustomerAnswerService { private final ExamPaperQuestionCustomerAnswerMapper examPaperQuestionCustomerAnswerMapper; private final TextContentService textContentService; @Autowired public ExamPaperQuestionCustomerAnswerServiceImpl(ExamPaperQuestionCustomerAnswerMapper examPaperQuestionCustomerAnswerMapper, TextContentService textContentService) { super(examPaperQuestionCustomerAnswerMapper); this.examPaperQuestionCustomerAnswerMapper = examPaperQuestionCustomerAnswerMapper; this.textContentService = textContentService; } @Override public PageInfo studentPage(QuestionPageStudentRequestVM requestVM) { return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() -> examPaperQuestionCustomerAnswerMapper.studentPage(requestVM).stream().peek( q -> q.setShortTitle(HtmlUtil.clear(q.getShortTitle())) ).collect(Collectors.toList()) ); } @Override public List selectListByPaperAnswerId(Integer id) { return examPaperQuestionCustomerAnswerMapper.selectListByPaperAnswerId(id); } @Override public void insertList(List examPaperQuestionCustomerAnswers) { examPaperQuestionCustomerAnswerMapper.insertList(examPaperQuestionCustomerAnswers); } @Override public ExamPaperSubmitItemVM examPaperQuestionCustomerAnswerToVM(ExamPaperQuestionCustomerAnswer qa) { ExamPaperSubmitItemVM examPaperSubmitItemVM = new ExamPaperSubmitItemVM(); examPaperSubmitItemVM.setId(qa.getId()); examPaperSubmitItemVM.setQuestionId(qa.getQuestionId()); examPaperSubmitItemVM.setDoRight(qa.getDoRight()); examPaperSubmitItemVM.setItemOrder(qa.getItemOrder()); examPaperSubmitItemVM.setQuestionScore(ExamUtil.scoreToVM(qa.getQuestionScore())); examPaperSubmitItemVM.setScore(ExamUtil.scoreToVM(qa.getCustomerScore())); setSpecialToVM(examPaperSubmitItemVM, qa); return examPaperSubmitItemVM; } @Override public Integer selectAllCount(List deptIds) { return examPaperQuestionCustomerAnswerMapper.selectAllCount(deptIds); } @Override public List selectMothCount(List deptIds) { Date startTime = DateTimeUtil.getMonthStartDay(); Date endTime = DateTimeUtil.getMonthEndDay(); List mouthCount = examPaperQuestionCustomerAnswerMapper.selectCountByDate(startTime, endTime, deptIds); List 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()); } @Override public int updateScore(List examPaperAnswerUpdates) { return examPaperQuestionCustomerAnswerMapper.updateScore(examPaperAnswerUpdates); } private void setSpecialToVM(ExamPaperSubmitItemVM examPaperSubmitItemVM, ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer) { QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType()); switch (questionTypeEnum) { case MultipleChoice: examPaperSubmitItemVM.setContent(examPaperQuestionCustomerAnswer.getAnswer()); examPaperSubmitItemVM.setContentArray(ExamUtil.contentToArray(examPaperQuestionCustomerAnswer.getAnswer())); break; case GapFilling: TextContent textContent = textContentService.selectById(examPaperQuestionCustomerAnswer.getTextContentId()); List correctAnswer = JsonUtil.toJsonListObject(textContent.getContent(), String.class); examPaperSubmitItemVM.setContentArray(correctAnswer); break; default: if (QuestionTypeEnum.needSaveTextContent(examPaperQuestionCustomerAnswer.getQuestionType())) { TextContent content = textContentService.selectById(examPaperQuestionCustomerAnswer.getTextContentId()); examPaperSubmitItemVM.setContent(content.getContent()); } else { examPaperSubmitItemVM.setContent(examPaperQuestionCustomerAnswer.getAnswer()); } break; } } }