package com.qxgmat.controller.api; import com.nuliji.tools.*; import com.qxgmat.data.constants.enums.module.ProductType; import com.qxgmat.data.dao.entity.*; import com.qxgmat.data.relation.entity.UserPreviewPaperRelation; import com.qxgmat.dto.extend.UserPreviewPaperExtendDto; import com.qxgmat.dto.response.*; import com.qxgmat.help.ShiroHelp; import com.qxgmat.service.extend.PreviewService; import com.qxgmat.service.inline.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/course") @Api(tags = "课程", description = "课程接口") public class CourseController { @Autowired private ShiroHelp shiroHelp; @Autowired private PreviewService previewService; @Autowired private PreviewPaperService previewPaperService; @Autowired private QuestionNoService questionNoService; @Autowired private QuestionService questionService; @Autowired private UserCourseService userCourseService; @Autowired private UserOrderRecordService userOrderRecordService; @RequestMapping(value = "/progress", method = RequestMethod.GET) @ApiOperation(value = "获取课程进度", notes = "获取所有课程及状态进度", httpMethod = "GET") public Response> progress() { User user = (User) shiroHelp.getLoginUser(); List userCourseList = userCourseService.getByUser(user.getId()); List dtos = Transform.convert(userCourseList, UserCourseDetailDto.class); // 获取每个科目的最后2次作业 Map> previewMap = previewService.groupByCategory(user.getId(), 3); Transform.combine(dtos, previewMap, UserCourseDetailDto.class, "courseId", "previews", UserPreviewPaperExtendDto.class); // 获取课程状态:已购买未开通 List records = userOrderRecordService.listUnUse(user.getId(), ProductType.COURSE); Collection ids = Transform.getIds(userCourseList, UserCourse.class, "courseId"); for(UserOrderRecord record : records){ Integer courseId = record.getProductId(); if (!ids.contains(courseId)){ UserCourseDetailDto dto = new UserCourseDetailDto(); dto.setCourseId(courseId); dto.setPayed(true); dtos.add(dto); } } // todo 区分完成状态 return ResponseHelp.success(dtos); } @RequestMapping(value = "/preview/list", method = RequestMethod.GET) @ApiOperation(value = "获取预习作业列表", notes = "获取预习作业列表", httpMethod = "GET") public Response> listPreview( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) Number category, @RequestParam(required = false) String endTime, @RequestParam(required = false) Boolean finish ) { User user = (User) shiroHelp.getLoginUser(); PageResult p = previewService.list(page, size, category, user.getId(), endTime, finish); List pr = Transform.convert(p, UserPreviewPaperExtendDto.class); // 获取试卷统计信息 Map map = Transform.getMap(p, UserPreviewPaperRelation.class, "id", "paper"); Map questionNoIdsMap = new HashMap<>(); for(Object value : map.keySet()){ Integer key = (Integer) value; PreviewPaper preview = (PreviewPaper) map.get(key); questionNoIdsMap.put(key, preview.getQuestionNoIds()); } Map statMap = questionNoService.statPaperMap(questionNoIdsMap); Transform.combine(pr, statMap, UserPreviewPaperExtendDto.class, "id", "stat"); return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/preview/paper", method = RequestMethod.GET) @ApiOperation(value = "获取预习作业", notes = "获取预习作业", httpMethod = "GET") public Response detailPreview( @RequestParam(required = true, name="id") Integer paperId ) { User user = (User) shiroHelp.getLoginUser(); PreviewPaper preview = previewPaperService.get(paperId); PaperBaseDto paperDto = Transform.convert(preview, PaperBaseDto.class); return ResponseHelp.success(paperDto); } }