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.enums.ExamPaperTypeEnum; import com.mindskip.xzs.domain.task.TaskItemAnswerObject; import com.mindskip.xzs.domain.task.TaskItemObject; import com.mindskip.xzs.domain.vo.ExamTemplatesUserCountVO; import com.mindskip.xzs.domain.vo.ExamTemplatesVO; import com.mindskip.xzs.repository.ExamPaperAnswerMapper; import com.mindskip.xzs.repository.ExamTemplatesMapper; import com.mindskip.xzs.repository.ExamTemplatesUserCountMapper; import com.mindskip.xzs.repository.ExamTemplatesUserMapper; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @RestController("StudentDashboardController") @RequestMapping(value = "/api/student/dashboard") 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 ExamPaperUserService examPaperUserService; private final ExamPaperAnswerMapper answerMapper; private final ExamTemplatesMapper templatesMapper; private final ExamTemplatesUserCountMapper templatesUserCountMapper; private final ExamTemplatesUserMapper examTemplatesUserMapper; @Autowired public DashboardController(UserService userService, ExamPaperService examPaperService, QuestionService questionService, TaskExamService taskExamService, TaskExamCustomerAnswerService taskExamCustomerAnswerService, TextContentService textContentService, ExamPaperUserService examPaperUserService, ExamPaperAnswerMapper answerMapper, ExamTemplatesMapper templatesMapper, ExamTemplatesUserCountMapper templatesUserCountMapper, ExamTemplatesUserMapper examTemplatesUserMapper) { this.userService = userService; this.examPaperService = examPaperService; this.questionService = questionService; this.taskExamService = taskExamService; this.taskExamCustomerAnswerService = taskExamCustomerAnswerService; this.textContentService = textContentService; this.examPaperUserService = examPaperUserService; this.answerMapper = answerMapper; this.templatesMapper = templatesMapper; this.templatesUserCountMapper = templatesUserCountMapper; this.examTemplatesUserMapper = examTemplatesUserMapper; } @RequestMapping(value = "/qualification/{paperId}", method = RequestMethod.GET) public RestResponse qualification(@PathVariable("paperId") String paperId) { User user = getCurrentUser(); ExamTemplatesUserCount count = new ExamTemplatesUserCount(); List examTemplatesUserCountList = new ArrayList<>(); List paperInfos = new ArrayList<>(); count.setUserId(user.getId()); count.setExamPaperId(Integer.parseInt(paperId)); examTemplatesUserCountList.add(count); List list1 = answerMapper.getByExamPaperIdAndUserId(examTemplatesUserCountList); if(list1.size()>0){ return RestResponse.fail(500,"当前试卷已完成考试!"); } return RestResponse.ok(); } @RequestMapping(value = "/index", method = RequestMethod.POST) public RestResponse index() { IndexVM indexVM = new IndexVM(); User user = getCurrentUser(); PaperFilter fixedPaperFilter = new PaperFilter(); fixedPaperFilter.setGradeLevel(user.getUserLevel()); Integer[] type = {ExamPaperTypeEnum.Fixed.getCode(),ExamPaperTypeEnum.Random.getCode()}; fixedPaperFilter.setExamPaperType(type); fixedPaperFilter.setUserId(user.getId()); //试卷 List list = examPaperService.indexPaper(fixedPaperFilter); ExamTemplatesUserCount count = new ExamTemplatesUserCount(); List examTemplatesUserCountList = new ArrayList<>(); List paperInfos = new ArrayList<>(); for (PaperInfo info : list) { count.setUserId(user.getId()); count.setExamPaperId(info.getId()); examTemplatesUserCountList.add(count); List list1 = answerMapper.getByExamPaperIdAndUserId(examTemplatesUserCountList); examTemplatesUserCountList.clear(); if(list1.size()>0){ continue; } info.setStatus("0"); paperInfos.add(info); } ExamTemplatesVO vo = new ExamTemplatesVO(); vo.setStatus("0"); vo.setUserId(user.getId()); vo.setNow(LocalDateTime.now()); List gets = templatesMapper.gets(vo); ExamTemplatesUserCountVO templatesUserCountVO = new ExamTemplatesUserCountVO(); templatesUserCountVO.setUserId(user.getId()); for (ExamTemplates get : gets) { templatesUserCountVO.setId(get.getId()); Integer number = templatesUserCountMapper.getCountByUserIdAndTemplatesId(templatesUserCountVO); if(number==0){ PaperInfo info = new PaperInfo(); info.setId(get.getId()); info.setName(get.getName()); info.setStatus("1"); paperInfos.add(info); } } indexVM.setFixedPaper(paperInfos); PaperFilter timeLimitPaperFilter = new PaperFilter(); timeLimitPaperFilter.setDateTime(new Date()); timeLimitPaperFilter.setGradeLevel(user.getUserLevel()); Integer[] time = {ExamPaperTypeEnum.TimeLimit.getCode()}; timeLimitPaperFilter.setExamPaperType(time); timeLimitPaperFilter.setUserId(user.getId()); ExamTemplatesUserCount count1 = new ExamTemplatesUserCount(); List examTemplatesUserCountList1 = new ArrayList<>(); List paperInfos1 = new ArrayList<>(); List limitPaper = examPaperService.indexPaper(timeLimitPaperFilter); for (PaperInfo info : limitPaper) { count1.setUserId(user.getId()); count1.setExamPaperId(info.getId()); examTemplatesUserCountList1.add(count1); List list1 = answerMapper.getByExamPaperIdAndUserId(examTemplatesUserCountList1); examTemplatesUserCountList1.clear(); if(list1.size()>0){ continue; } paperInfos1.add(info); } List paperInfoVMS = paperInfos1.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); return RestResponse.ok(indexVM); } @RequestMapping(value = "/task", method = RequestMethod.POST) public RestResponse> task() { User user = getCurrentUser(); Integer[] ids = examPaperUserService.getByUserId(user.getId()) .stream().map(ExamPaperUser::getExamPaperId).toArray(Integer[]::new); List taskExams = new ArrayList<>(); if(ids.length!=0){ List list = examPaperService.gets(ids).stream() .filter(e -> e.getPaperType() == 6).collect(Collectors.toList()); if(list.size() != 0){ Integer[] taskIds = list.stream().map(ExamPaper::getTaskExamId).toArray(Integer[]::new); taskExams = taskExamService.gets(taskIds); } } // 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()); } }