package com.ots.project.exam.listener; import com.ots.common.enums.ExamPaperTypeEnum; import com.ots.common.enums.QuestionTypeEnum; import com.ots.project.exam.domain.ExamPaperAnswer; import com.ots.project.exam.domain.ExamPaperQuestionCustomerAnswer; import com.ots.project.exam.domain.TExamPaper; import com.ots.project.exam.domain.TTextContent; import com.ots.project.exam.dto.ExamPaperAnswerInfo; import com.ots.project.exam.service.ExamPaperAnswerService; import com.ots.project.exam.service.ExamPaperQuestionCustomerAnswerService; import com.ots.project.exam.service.ITTextContentService; import com.ots.project.exam.service.TaskExamCustomerAnswerService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @author OTS */ @Component @AllArgsConstructor public class CalculateExamPaperAnswerListener implements ApplicationListener { @Autowired private ExamPaperAnswerService examPaperAnswerService; @Autowired private ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; @Autowired private ITTextContentService textContentService; @Autowired private TaskExamCustomerAnswerService examCustomerAnswerService; @Override @Transactional public void onApplicationEvent(CalculateExamPaperAnswerCompleteEvent calculateExamPaperAnswerCompleteEvent) { Date now = new Date(); ExamPaperAnswerInfo examPaperAnswerInfo = (ExamPaperAnswerInfo) calculateExamPaperAnswerCompleteEvent.getSource(); TExamPaper examPaper = examPaperAnswerInfo.getExamPaper(); ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer(); List examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers(); examPaperAnswerService.insertByFilter(examPaperAnswer); examPaperQuestionCustomerAnswers.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> { TTextContent textContent = new TTextContent(d.getAnswer(), now); textContentService.insertTTextContent(textContent); d.setTextContentId(textContent.getId().intValue()); d.setAnswer(null); }); examPaperQuestionCustomerAnswers.forEach(d -> { d.setExamPaperAnswerId(examPaperAnswer.getId()); }); examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers); switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType().intValue())) { case Task: { examCustomerAnswerService.insertOrUpdate(examPaper, examPaperAnswer, now); break; } default: break; } } }