package com.mindskip.xzs.controller.student; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.*; import com.mindskip.xzs.domain.question.QuestionObject; import com.mindskip.xzs.service.*; import com.mindskip.xzs.utility.DateTimeUtil; import com.mindskip.xzs.utility.HtmlUtil; import com.mindskip.xzs.utility.JsonUtil; import com.mindskip.xzs.utility.PageInfoHelper; import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM; import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVM; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVO; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @RestController("StudentQuestionAnswerController") @RequestMapping(value = "/api/student/question/answer") public class QuestionAnswerController extends BaseApiController { private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; private final QuestionService questionService; private final TextContentService textContentService; private final SubjectService subjectService; private final QuestionSubjectService questionSubjectService; @Autowired public QuestionAnswerController(ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, QuestionService questionService, TextContentService textContentService, SubjectService subjectService, QuestionSubjectService questionSubjectService) { this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService; this.questionService = questionService; this.textContentService = textContentService; this.subjectService = subjectService; this.questionSubjectService = questionSubjectService; } @RequestMapping(value = "/page", method = RequestMethod.POST) public RestResponse> pageList(@RequestBody QuestionPageStudentRequestVM model) { model.setCreateUser(getCurrentUser().getId()); PageInfo pageInfo = examPaperQuestionCustomerAnswerService.studentPage(model); PageInfo page = PageInfoHelper.copyMap(pageInfo, q -> { // Subject subject = subjectService.selectById(q.getSubjectId()); Integer[] ids = questionSubjectService.getQuestion(q.getQuestionId()) .stream().map(QuestionSubject::getSubjectId).toArray(Integer[]::new); String name = ""; if (ids.length > 0) { name = subjectService.selectByIds(ids) .stream().map(Subject::getName).collect(Collectors.joining(",")); } QuestionPageStudentResponseVM vm = modelMapper.map(q, QuestionPageStudentResponseVM.class); vm.setCreateTime(DateTimeUtil.dateFormat(q.getCreateTime())); TextContent textContent = textContentService.selectById(q.getQuestionTextContentId()); QuestionObject questionObject = JsonUtil.toJsonObject(textContent.getContent(), QuestionObject.class); String clearHtml = HtmlUtil.clear(questionObject.getTitleContent()); vm.setShortTitle(clearHtml); vm.setSubjectName(name); return vm; }); return RestResponse.ok(page); } @RequestMapping(value = "/select/{id}", method = RequestMethod.POST) public RestResponse select(@PathVariable Integer id) { QuestionAnswerVO vm = new QuestionAnswerVO(); ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = examPaperQuestionCustomerAnswerService.selectById(id); ExamPaperSubmitItemVM questionAnswerVM = examPaperQuestionCustomerAnswerService.examPaperQuestionCustomerAnswerToVM(examPaperQuestionCustomerAnswer); ExamQuestionVO questionVM = questionService.getQuestionEditRequestVM(examPaperQuestionCustomerAnswer.getQuestionId()); vm.setQuestionVM(questionVM); vm.setQuestionAnswerVM(questionAnswerVM); return RestResponse.ok(vm); } }