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<CalculateExamPaperAnswerCompleteEvent> {
|
|
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<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers();
|
|
examPaperAnswerService.insertByFilter(examPaperAnswer);
|
|
// 最优成绩有效,其余无效
|
examPaperAnswerService.maxGrade(examPaperAnswer, examPaperAnswerInfo.getTemplateId());
|
|
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;
|
}
|
}
|
}
|