package com.qxgmat.controller.api; import com.github.pagehelper.Page; import com.nuliji.tools.*; import com.nuliji.tools.exception.ParameterException; import com.qxgmat.data.constants.enums.ExperienceDayRange; import com.qxgmat.data.constants.enums.ExperienceScoreRange; import com.qxgmat.data.constants.enums.module.CourseModule; import com.qxgmat.data.constants.enums.status.DirectionStatus; import com.qxgmat.data.constants.enums.user.DataType; import com.qxgmat.data.dao.entity.*; import com.qxgmat.data.relation.entity.UserPreviewPaperRelation; import com.qxgmat.dto.extend.CourseExtendDto; import com.qxgmat.dto.extend.UserPaperBaseExtendDto; 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 javax.servlet.http.HttpSession; import java.util.*; import java.util.stream.Collectors; @RestController @RequestMapping("/api/course") @Api(tags = "课程", description = "课程接口") public class CourseController { @Autowired private ShiroHelp shiroHelp; @Autowired private CourseService courseService; @Autowired private CourseDataService courseDataService; @Autowired private CoursePackageService coursePackageService; @Autowired private CourseTeacherService courseTeacherService; @Autowired private CourseExperienceService courseExperienceService; @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 = "/vs", method = RequestMethod.GET) @ApiOperation(value = "获取1v1课程信息", notes = "获取1v1课程信息", httpMethod = "GET") public Response> vs() { List p = courseService.all(CourseModule.VS); List pr = Transform.convert(p, CourseListDto.class); return ResponseHelp.success(pr); } @RequestMapping(value = "/video/list", method = RequestMethod.GET) @ApiOperation(value = "在线课程列表", httpMethod = "GET") public Response> listVideo( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) Integer structId, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p = courseService.list(page, size, CourseModule.VIDEO, structId, order, DirectionStatus.ValueOf(direction)); List pr = Transform.convert(p, CourseListDto.class); return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/detail", method = RequestMethod.GET) @ApiOperation(value = "课程详情", httpMethod = "GET") public Response detail( @RequestParam(required = true) Integer courseId ) { User user = (User) shiroHelp.getLoginUser(); Course course = courseService.get(courseId); return ResponseHelp.success(course); } @RequestMapping(value = "/simple", method = RequestMethod.GET) @ApiOperation(value = "课程基本信息", httpMethod = "GET") public Response simple( @RequestParam(required = true) Integer courseId ) { User user = (User) shiroHelp.getLoginUser(); Course course = courseService.get(courseId); return ResponseHelp.success(course); } @RequestMapping(value = "/package/list", method = RequestMethod.GET) @ApiOperation(value = "套餐列表", httpMethod = "GET") public Response> listPackage( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) Integer structId, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p = coursePackageService.list(page, size, structId, order, DirectionStatus.ValueOf(direction)); List pr = Transform.convert(p, CoursePackageListDto.class); Map courseIdsMap = new HashMap<>(); for(CoursePackage cp : p){ courseIdsMap.put(cp.getId(), cp.getCourseIds()); } Map courseMap = courseService.groupByMap(courseIdsMap); Transform.combine(pr, courseMap, CoursePackageListDto.class, "id", "courses", CourseExtendDto.class); return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/package/detail", method = RequestMethod.GET) @ApiOperation(value = "套餐详情", httpMethod = "GET") public Response detailPackage( @RequestParam(required = true) Integer packageId ) { User user = (User) shiroHelp.getLoginUser(); CoursePackage coursePackage = coursePackageService.get(packageId); CoursePackageDetailDto dto = Transform.convert(coursePackage, CoursePackageDetailDto.class); List courseList = courseService.select(coursePackage.getCourseIds()); dto.setCourses(Transform.convert(courseList, CourseExtendDto.class)); return ResponseHelp.success(dto); } @RequestMapping(value = "/data/list", method = RequestMethod.GET) @ApiOperation(value = "资料列表", httpMethod = "GET") public Response> listData( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) Integer structId, @RequestParam(required = false) String dataType, @RequestParam(required = false) Boolean isNovice, @RequestParam(required = false) Boolean isOriginal, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p = courseDataService.list(page, size, structId, DataType.ValueOf(dataType), isNovice, isOriginal, order, DirectionStatus.ValueOf(direction)); List pr = Transform.convert(p, CourseDataListDto.class); return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/data/detail", method = RequestMethod.GET) @ApiOperation(value = "资料详情", httpMethod = "GET") public Response detailData( @RequestParam(required = true) Integer dataId ) { User user = (User) shiroHelp.getLoginUser(); CourseData courseData = courseDataService.get(dataId); return ResponseHelp.success(courseData); } @RequestMapping(value = "/teacher/list", method = RequestMethod.GET) @ApiOperation(value = "资料列表", httpMethod = "GET") public Response> listTeacher( @RequestParam(required = false) Integer courseId, HttpSession session) { List p = courseTeacherService.allByCourse(courseId); return ResponseHelp.success(p); } @RequestMapping(value = "/experience/list", method = RequestMethod.GET) @ApiOperation(value = "心经列表", httpMethod = "GET") public Response> listExperience( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) String prepareStatus, @RequestParam(required = false) String experienceDay, @RequestParam(required = false) String experienceScore, @RequestParam(required = false) String experiencePercent, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p = courseExperienceService.list(page, size, prepareStatus, ExperienceScoreRange.ValueOf(experienceScore), ExperienceDayRange.ValueOf(experienceDay), experiencePercent, order, DirectionStatus.ValueOf(direction)); return ResponseHelp.success(p, page, size, p.getTotal()); } @RequestMapping(value = "/record", method = RequestMethod.GET) @ApiOperation(value = "获取课程记录信息", notes = "获取所有课程及状态进度", httpMethod = "GET") public Response record( @RequestParam(required = true) Integer recordId ) { User user = (User) shiroHelp.getLoginUser(); UserOrderRecord userOrderRecord = userOrderRecordService.get(recordId); if (userOrderRecord == null){ throw new ParameterException("记录不存在"); } if (!userOrderRecord.getUserId().equals(user.getId())){ throw new ParameterException("记录不存在"); } UserCourseDetailDto dto = Transform.convert(userOrderRecord, UserCourseDetailDto.class); Course course = courseService.get(userOrderRecord.getProductId()); dto.setCourse(Transform.convert(course, CourseExtendDto.class)); return ResponseHelp.success(dto); } @RequestMapping(value = "/progress", method = RequestMethod.GET) @ApiOperation(value = "获取课程进度", notes = "获取所有课程及状态进度", httpMethod = "GET") public Response> progress( @RequestParam(required = false) String[] courseModules, @RequestParam(required = false) Integer structId, @RequestParam(required = false) Integer courseId ) { User user = (User) shiroHelp.getLoginUser(); List userOrderRecordList = userOrderRecordService.listWithStudyAdmin(1, 1000, courseModules, structId, courseId, user.getId(), null,null, null); List dtos = Transform.convert(userOrderRecordList, UserCourseProgressDto.class); // 绑定课程 Collection courseIds = Transform.getIds(userOrderRecordList, UserOrderRecord.class, "productId"); List courseList = courseService.select(courseIds); Transform.combine(dtos, courseList, UserCourseProgressDto.class, "productId", "course", Course.class, "id", CourseExtendDto.class); // 获取每个科目的最后2次作业: 正在进行中的 Date now = new Date(); List processList = userOrderRecordList.stream().filter(row-> row.getIsUsed() > 0 && row.getUseEndTime().after(now)).collect(Collectors.toList()); Collection processIds = Transform.getIds(processList, UserOrderRecord.class, "id"); Map> previewMap = previewService.groupByCourseId(user.getId(), processIds, 2); Transform.combine(dtos, previewMap, UserCourseProgressDto.class, "productId", "previews", UserPaperBaseExtendDto.class); return ResponseHelp.success(dtos); } @RequestMapping(value = "/preview/list", method = RequestMethod.GET) @ApiOperation(value = "获取预习作业列表", notes = "获取预习作业列表", httpMethod = "GET") public Response> listPreview( @RequestParam(required = false) Integer recordId, @RequestParam(required = false) String endTime, @RequestParam(required = false) Integer times ) { User user = (User) shiroHelp.getLoginUser(); List p = previewService.list(recordId, user.getId(), endTime, times, null); List pr = Transform.convert(p, UserExercisePaperDto.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, UserExercisePaperDto.class, "id", "stat"); return ResponseHelp.success(pr); } }