package com.mindskip.xzs.controller.student; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.TaskExam; import com.mindskip.xzs.domain.TaskExamCustomerAnswer; import com.mindskip.xzs.domain.TextContent; import com.mindskip.xzs.domain.User; import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum; import com.mindskip.xzs.domain.exam.ExamClassShortInfo; import com.mindskip.xzs.domain.task.TaskItemAnswerObject; import com.mindskip.xzs.domain.task.TaskItemObject; import com.mindskip.xzs.service.*; import com.mindskip.xzs.utility.DateTimeUtil; import com.mindskip.xzs.utility.JsonUtil; import com.mindskip.xzs.viewmodel.student.dashboard.*; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @version 2.2.0 * @description: 主页 * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021 /9/7 9:45 */ @RestController("StudentDashboardController") @RequestMapping(value = "/api/student/dashboard") @AllArgsConstructor public class DashboardController extends BaseApiController { private final UserService userService; private final ExamPaperService examPaperService; private final QuestionService questionService; private final TaskExamService taskExamService; private final TaskExamCustomerAnswerService taskExamCustomerAnswerService; private final TextContentService textContentService; private final ClassesService classesService; /** * 固定试卷、时段试卷、班级试卷 * * @return the rest response */ @RequestMapping(value = "/index", method = RequestMethod.POST) public RestResponse index() { IndexVM indexVM = new IndexVM(); User user = getCurrentUser(); PaperFilter fixedPaperFilter = new PaperFilter(); fixedPaperFilter.setGradeLevel(user.getUserLevel()); fixedPaperFilter.setExamPaperType(ExamPaperTypeEnum.Fixed.getCode()); indexVM.setFixedPaper(examPaperService.indexPaper(fixedPaperFilter)); PaperFilter timeLimitPaperFilter = new PaperFilter(); timeLimitPaperFilter.setDateTime(new Date()); timeLimitPaperFilter.setGradeLevel(user.getUserLevel()); timeLimitPaperFilter.setExamPaperType(ExamPaperTypeEnum.TimeLimit.getCode()); List limitPaper = examPaperService.indexPaper(timeLimitPaperFilter); List paperInfoVMS = limitPaper.stream().map(d -> { PaperInfoVM vm = modelMapper.map(d, PaperInfoVM.class); vm.setStartTime(DateTimeUtil.dateFormat(d.getLimitStartTime())); vm.setEndTime(DateTimeUtil.dateFormat(d.getLimitEndTime())); return vm; }).collect(Collectors.toList()); indexVM.setTimeLimitPaper(paperInfoVMS); List cIds = classesService.getJoinClasses(user.getId()).stream() .map(d -> d.getClassesId()).collect(Collectors.toList()); if (0 != cIds.size()) { List classPaper = examPaperService.classesPaper(cIds); indexVM.setClassPaper(classPaper); } return RestResponse.ok(indexVM); } /** * 任务中心 * * @return the rest response */ @RequestMapping(value = "/task", method = RequestMethod.POST) public RestResponse> task() { User user = getCurrentUser(); List taskExams = taskExamService.getByGradeLevel(user.getUserLevel()); if (taskExams.size() == 0) { return RestResponse.ok(new ArrayList<>()); } List tIds = taskExams.stream().map(taskExam -> taskExam.getId()).collect(Collectors.toList()); List taskExamCustomerAnswers = taskExamCustomerAnswerService.selectByTUid(tIds, user.getId()); List vm = taskExams.stream().map(t -> { TaskItemVm itemVm = new TaskItemVm(); itemVm.setId(t.getId()); itemVm.setTitle(t.getTitle()); TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswers.stream() .filter(tc -> tc.getTaskExamId().equals(t.getId())).findFirst().orElse(null); List paperItemVMS = getTaskItemPaperVm(t.getFrameTextContentId(), taskExamCustomerAnswer); itemVm.setPaperItems(paperItemVMS); return itemVm; }).collect(Collectors.toList()); return RestResponse.ok(vm); } private List getTaskItemPaperVm(Integer tFrameId, TaskExamCustomerAnswer taskExamCustomerAnswers) { TextContent textContent = textContentService.selectById(tFrameId); List paperItems = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemObject.class); List answerPaperItems = null; if (null != taskExamCustomerAnswers) { TextContent answerTextContent = textContentService.selectById(taskExamCustomerAnswers.getTextContentId()); answerPaperItems = JsonUtil.toJsonListObject(answerTextContent.getContent(), TaskItemAnswerObject.class); } List finalAnswerPaperItems = answerPaperItems; return paperItems.stream().map(p -> { TaskItemPaperVm ivm = new TaskItemPaperVm(); ivm.setExamPaperId(p.getExamPaperId()); ivm.setExamPaperName(p.getExamPaperName()); if (null != finalAnswerPaperItems) { finalAnswerPaperItems.stream() .filter(a -> a.getExamPaperId().equals(p.getExamPaperId())) .findFirst() .ifPresent(a -> { ivm.setExamPaperAnswerId(a.getExamPaperAnswerId()); ivm.setStatus(a.getStatus()); }); } return ivm; } ).collect(Collectors.toList()); } }