package com.mindskip.xzs.listener; import com.mindskip.xzs.domain.*; import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum; import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.event.CalculateExamPaperAnswerCompleteEvent; import com.mindskip.xzs.service.ExamPaperAnswerService; import com.mindskip.xzs.service.ExamPaperQuestionCustomerAnswerService; import com.mindskip.xzs.service.TaskExamCustomerAnswerService; import com.mindskip.xzs.service.TextContentService; 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; /** * @version 3.5.0 * @description: The type Calculate exam paper answer listener. * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021/12/25 9:45 */ @Component public class CalculateExamPaperAnswerListener implements ApplicationListener { private final ExamPaperAnswerService examPaperAnswerService; private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; private final TextContentService textContentService; private final TaskExamCustomerAnswerService examCustomerAnswerService; /** * Instantiates a new Calculate exam paper answer listener. * * @param examPaperAnswerService the exam paper answer service * @param examPaperQuestionCustomerAnswerService the exam paper question customer answer service * @param textContentService the text content service * @param examCustomerAnswerService the exam customer answer service */ @Autowired public CalculateExamPaperAnswerListener(ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) { this.examPaperAnswerService = examPaperAnswerService; this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService; this.textContentService = textContentService; this.examCustomerAnswerService = examCustomerAnswerService; } @Override @Transactional public void onApplicationEvent(CalculateExamPaperAnswerCompleteEvent calculateExamPaperAnswerCompleteEvent) { Date now = new Date(); ExamPaperAnswerInfo examPaperAnswerInfo = (ExamPaperAnswerInfo) calculateExamPaperAnswerCompleteEvent.getSource(); ExamPaper examPaper = examPaperAnswerInfo.getExamPaper(); ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer(); List examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers(); examPaperAnswerService.insertByFilter(examPaperAnswer); examPaperQuestionCustomerAnswers.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> { TextContent textContent = new TextContent(d.getAnswer(), now); textContentService.insertByFilter(textContent); d.setTextContentId(textContent.getId()); d.setAnswer(null); }); examPaperQuestionCustomerAnswers.forEach(d -> { d.setExamPaperAnswerId(examPaperAnswer.getId()); }); examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers); switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) { case Task: { examCustomerAnswerService.insertOrUpdate(examPaper, examPaperAnswer, now); break; } default: break; } } }