CourseController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package com.qxgmat.controller.api;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.*;
  4. import com.qxgmat.data.constants.enums.ExperienceDayRange;
  5. import com.qxgmat.data.constants.enums.ExperienceScoreRange;
  6. import com.qxgmat.data.constants.enums.module.CourseModule;
  7. import com.qxgmat.data.constants.enums.module.ProductType;
  8. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  9. import com.qxgmat.data.constants.enums.user.DataType;
  10. import com.qxgmat.data.dao.entity.*;
  11. import com.qxgmat.data.relation.entity.UserPreviewPaperRelation;
  12. import com.qxgmat.dto.extend.CourseExtendDto;
  13. import com.qxgmat.dto.extend.UserPreviewPaperExtendDto;
  14. import com.qxgmat.dto.response.*;
  15. import com.qxgmat.help.ShiroHelp;
  16. import com.qxgmat.service.extend.PreviewService;
  17. import com.qxgmat.service.inline.*;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.web.bind.annotation.*;
  22. import javax.servlet.http.HttpSession;
  23. import java.util.Collection;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. @RestController
  28. @RequestMapping("/api/course")
  29. @Api(tags = "课程", description = "课程接口")
  30. public class CourseController {
  31. @Autowired
  32. private ShiroHelp shiroHelp;
  33. @Autowired
  34. private CourseService courseService;
  35. @Autowired
  36. private CourseDataService courseDataService;
  37. @Autowired
  38. private CoursePackageService coursePackageService;
  39. @Autowired
  40. private CourseTeacherService courseTeacherService;
  41. @Autowired
  42. private CourseExperienceService courseExperienceService;
  43. @Autowired
  44. private PreviewService previewService;
  45. @Autowired
  46. private PreviewPaperService previewPaperService;
  47. @Autowired
  48. private QuestionNoService questionNoService;
  49. @Autowired
  50. private QuestionService questionService;
  51. @Autowired
  52. private UserCourseService userCourseService;
  53. @Autowired
  54. private UserOrderRecordService userOrderRecordService;
  55. @RequestMapping(value = "/vs", method = RequestMethod.GET)
  56. @ApiOperation(value = "获取1v1课程信息", notes = "获取1v1课程信息", httpMethod = "GET")
  57. public Response<List<CourseListDto>> vs() {
  58. List<Course> p = courseService.all(CourseModule.VS);
  59. List<CourseListDto> pr = Transform.convert(p, CourseListDto.class);
  60. return ResponseHelp.success(pr);
  61. }
  62. @RequestMapping(value = "/video/list", method = RequestMethod.GET)
  63. @ApiOperation(value = "在线课程列表", httpMethod = "GET")
  64. public Response<PageMessage<CourseListDto>> listVideo(
  65. @RequestParam(required = false, defaultValue = "1") int page,
  66. @RequestParam(required = false, defaultValue = "100") int size,
  67. @RequestParam(required = false) Integer structId,
  68. @RequestParam(required = false, defaultValue = "id") String order,
  69. @RequestParam(required = false, defaultValue = "desc") String direction,
  70. HttpSession session) {
  71. Page<Course> p = courseService.list(page, size, CourseModule.VIDEO, structId, order, DirectionStatus.ValueOf(direction));
  72. List<CourseListDto> pr = Transform.convert(p, CourseListDto.class);
  73. return ResponseHelp.success(pr, page, size, p.getTotal());
  74. }
  75. @RequestMapping(value = "/detail", method = RequestMethod.GET)
  76. @ApiOperation(value = "课程详情", httpMethod = "GET")
  77. public Response<Course> detail(
  78. @RequestParam(required = true) Integer courseId
  79. ) {
  80. User user = (User) shiroHelp.getLoginUser();
  81. Course course = courseService.get(courseId);
  82. return ResponseHelp.success(course);
  83. }
  84. @RequestMapping(value = "/package/list", method = RequestMethod.GET)
  85. @ApiOperation(value = "套餐列表", httpMethod = "GET")
  86. public Response<PageMessage<CoursePackageListDto>> listPackage(
  87. @RequestParam(required = false, defaultValue = "1") int page,
  88. @RequestParam(required = false, defaultValue = "100") int size,
  89. @RequestParam(required = false) Integer structId,
  90. @RequestParam(required = false, defaultValue = "id") String order,
  91. @RequestParam(required = false, defaultValue = "desc") String direction,
  92. HttpSession session) {
  93. Page<CoursePackage> p = coursePackageService.list(page, size, structId, order, DirectionStatus.ValueOf(direction));
  94. List<CoursePackageListDto> pr = Transform.convert(p, CoursePackageListDto.class);
  95. Map<Integer, Integer[]> courseIdsMap = new HashMap<>();
  96. for(CoursePackage cp : p){
  97. courseIdsMap.put(cp.getId(), cp.getCourseIds());
  98. }
  99. Map courseMap = courseService.groupByMap(courseIdsMap);
  100. Transform.combine(pr, courseMap, CoursePackageListDto.class, "id", "courses", CourseExtendDto.class);
  101. return ResponseHelp.success(pr, page, size, p.getTotal());
  102. }
  103. @RequestMapping(value = "/package/detail", method = RequestMethod.GET)
  104. @ApiOperation(value = "套餐详情", httpMethod = "GET")
  105. public Response<CoursePackageDetailDto> detailPackage(
  106. @RequestParam(required = true) Integer packageId
  107. ) {
  108. User user = (User) shiroHelp.getLoginUser();
  109. CoursePackage coursePackage = coursePackageService.get(packageId);
  110. CoursePackageDetailDto dto = Transform.convert(coursePackage, CoursePackageDetailDto.class);
  111. List<Course> courseList = courseService.select(coursePackage.getCourseIds());
  112. dto.setCourses(Transform.convert(courseList, CourseExtendDto.class));
  113. return ResponseHelp.success(dto);
  114. }
  115. @RequestMapping(value = "/data/list", method = RequestMethod.GET)
  116. @ApiOperation(value = "资料列表", httpMethod = "GET")
  117. public Response<PageMessage<CourseDataListDto>> listData(
  118. @RequestParam(required = false, defaultValue = "1") int page,
  119. @RequestParam(required = false, defaultValue = "100") int size,
  120. @RequestParam(required = false) Integer structId,
  121. @RequestParam(required = false) String dataType,
  122. @RequestParam(required = false) Boolean isNovice,
  123. @RequestParam(required = false) Boolean isOriginal,
  124. @RequestParam(required = false, defaultValue = "id") String order,
  125. @RequestParam(required = false, defaultValue = "desc") String direction,
  126. HttpSession session) {
  127. Page<CourseData> p = courseDataService.list(page, size, structId, DataType.ValueOf(dataType), isNovice, isOriginal, order, DirectionStatus.ValueOf(direction));
  128. List<CourseDataListDto> pr = Transform.convert(p, CourseDataListDto.class);
  129. return ResponseHelp.success(pr, page, size, p.getTotal());
  130. }
  131. @RequestMapping(value = "/data/detail", method = RequestMethod.GET)
  132. @ApiOperation(value = "资料详情", httpMethod = "GET")
  133. public Response<CourseData> detailData(
  134. @RequestParam(required = true) Integer dataId
  135. ) {
  136. User user = (User) shiroHelp.getLoginUser();
  137. CourseData courseData = courseDataService.get(dataId);
  138. return ResponseHelp.success(courseData);
  139. }
  140. @RequestMapping(value = "/teacher/list", method = RequestMethod.GET)
  141. @ApiOperation(value = "资料列表", httpMethod = "GET")
  142. public Response<List<CourseTeacher>> listTeacher(
  143. @RequestParam(required = false) Integer courseId,
  144. HttpSession session) {
  145. List<CourseTeacher> p = courseTeacherService.allByCourse(courseId);
  146. return ResponseHelp.success(p);
  147. }
  148. @RequestMapping(value = "/experience/list", method = RequestMethod.GET)
  149. @ApiOperation(value = "心经列表", httpMethod = "GET")
  150. public Response<PageMessage<CourseExperience>> listExperience(
  151. @RequestParam(required = false, defaultValue = "1") int page,
  152. @RequestParam(required = false, defaultValue = "100") int size,
  153. @RequestParam(required = false) String prepareStatus,
  154. @RequestParam(required = false) String experienceDay,
  155. @RequestParam(required = false) String experienceScore,
  156. @RequestParam(required = false) String experiencePercent,
  157. @RequestParam(required = false, defaultValue = "id") String order,
  158. @RequestParam(required = false, defaultValue = "desc") String direction,
  159. HttpSession session) {
  160. Page<CourseExperience> p = courseExperienceService.list(page, size, prepareStatus, ExperienceScoreRange.ValueOf(experienceScore), ExperienceDayRange.ValueOf(experienceDay), experiencePercent, order, DirectionStatus.ValueOf(direction));
  161. return ResponseHelp.success(p, page, size, p.getTotal());
  162. }
  163. @RequestMapping(value = "/progress", method = RequestMethod.GET)
  164. @ApiOperation(value = "获取课程进度", notes = "获取所有课程及状态进度", httpMethod = "GET")
  165. public Response<List<UserCourseDetailDto>> progress() {
  166. User user = (User) shiroHelp.getLoginUser();
  167. List<UserCourse> userCourseList = userOrderRecordService.getByUser(user.getId());
  168. List<UserCourseDetailDto> dtos = Transform.convert(userCourseList, UserCourseDetailDto.class);
  169. // 获取每个科目的最后2次作业
  170. Map<Object, Collection<UserPreviewPaperRelation>> previewMap = previewService.groupByCategory(user.getId(), 3);
  171. Transform.combine(dtos, previewMap, UserCourseDetailDto.class, "courseId", "previews", UserPreviewPaperExtendDto.class);
  172. // 获取课程状态:已购买未开通
  173. List<UserOrderRecord> records = userOrderRecordService.listUnUse(user.getId(), ProductType.COURSE);
  174. Collection ids = Transform.getIds(userCourseList, UserCourse.class, "courseId");
  175. for(UserOrderRecord record : records){
  176. Integer courseId = record.getProductId();
  177. if (!ids.contains(courseId)){
  178. UserCourseDetailDto dto = new UserCourseDetailDto();
  179. dto.setCourseId(courseId);
  180. dto.setPayed(true);
  181. dtos.add(dto);
  182. }
  183. }
  184. // todo 区分完成状态
  185. return ResponseHelp.success(dtos);
  186. }
  187. @RequestMapping(value = "/preview/list", method = RequestMethod.GET)
  188. @ApiOperation(value = "获取预习作业列表", notes = "获取预习作业列表", httpMethod = "GET")
  189. public Response<PageMessage<UserPreviewPaperExtendDto>> listPreview(
  190. @RequestParam(required = false, defaultValue = "1") int page,
  191. @RequestParam(required = false, defaultValue = "100") int size,
  192. @RequestParam(required = false) Number category,
  193. @RequestParam(required = false) String endTime,
  194. @RequestParam(required = false) Boolean finish
  195. ) {
  196. User user = (User) shiroHelp.getLoginUser();
  197. PageResult<UserPreviewPaperRelation> p = previewService.list(page, size, category, user.getId(), endTime, finish);
  198. List<UserPreviewPaperExtendDto> pr = Transform.convert(p, UserPreviewPaperExtendDto.class);
  199. // 获取试卷统计信息
  200. Map map = Transform.getMap(p, UserPreviewPaperRelation.class, "id", "paper");
  201. Map<Integer, Integer[]> questionNoIdsMap = new HashMap<>();
  202. for(Object value : map.keySet()){
  203. Integer key = (Integer) value;
  204. PreviewPaper preview = (PreviewPaper) map.get(key);
  205. questionNoIdsMap.put(key, preview.getQuestionNoIds());
  206. }
  207. Map statMap = questionNoService.statPaperMap(questionNoIdsMap);
  208. Transform.combine(pr, statMap, UserPreviewPaperExtendDto.class, "id", "stat");
  209. return ResponseHelp.success(pr, page, size, p.getTotal());
  210. }
  211. @RequestMapping(value = "/preview/paper", method = RequestMethod.GET)
  212. @ApiOperation(value = "获取预习作业", notes = "获取预习作业", httpMethod = "GET")
  213. public Response<PaperBaseDto> detailPreview(
  214. @RequestParam(required = true, name="id") Integer paperId
  215. ) {
  216. User user = (User) shiroHelp.getLoginUser();
  217. PreviewPaper preview = previewPaperService.get(paperId);
  218. PaperBaseDto paperDto = Transform.convert(preview, PaperBaseDto.class);
  219. return ResponseHelp.success(paperDto);
  220. }
  221. }