CourseController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package com.qxgmat.controller.api;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.*;
  4. import com.nuliji.tools.exception.ParameterException;
  5. import com.qxgmat.data.constants.enums.ExperienceDayRange;
  6. import com.qxgmat.data.constants.enums.ExperienceScoreRange;
  7. import com.qxgmat.data.constants.enums.module.CourseModule;
  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.UserPaperBaseExtendDto;
  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.*;
  24. import java.util.stream.Collectors;
  25. @RestController
  26. @RequestMapping("/api/course")
  27. @Api(tags = "课程", description = "课程接口")
  28. public class CourseController {
  29. @Autowired
  30. private ShiroHelp shiroHelp;
  31. @Autowired
  32. private CourseService courseService;
  33. @Autowired
  34. private CourseDataService courseDataService;
  35. @Autowired
  36. private CoursePackageService coursePackageService;
  37. @Autowired
  38. private CourseTeacherService courseTeacherService;
  39. @Autowired
  40. private CourseExperienceService courseExperienceService;
  41. @Autowired
  42. private PreviewService previewService;
  43. @Autowired
  44. private PreviewPaperService previewPaperService;
  45. @Autowired
  46. private QuestionNoService questionNoService;
  47. @Autowired
  48. private QuestionService questionService;
  49. @Autowired
  50. private UserCourseService userCourseService;
  51. @Autowired
  52. private UserOrderRecordService userOrderRecordService;
  53. @RequestMapping(value = "/vs", method = RequestMethod.GET)
  54. @ApiOperation(value = "获取1v1课程信息", notes = "获取1v1课程信息", httpMethod = "GET")
  55. public Response<List<CourseListDto>> vs() {
  56. List<Course> p = courseService.all(CourseModule.VS);
  57. List<CourseListDto> pr = Transform.convert(p, CourseListDto.class);
  58. return ResponseHelp.success(pr);
  59. }
  60. @RequestMapping(value = "/video/list", method = RequestMethod.GET)
  61. @ApiOperation(value = "在线课程列表", httpMethod = "GET")
  62. public Response<PageMessage<CourseListDto>> listVideo(
  63. @RequestParam(required = false, defaultValue = "1") int page,
  64. @RequestParam(required = false, defaultValue = "100") int size,
  65. @RequestParam(required = false) Integer structId,
  66. @RequestParam(required = false, defaultValue = "id") String order,
  67. @RequestParam(required = false, defaultValue = "desc") String direction,
  68. HttpSession session) {
  69. Page<Course> p = courseService.list(page, size, CourseModule.VIDEO, structId, order, DirectionStatus.ValueOf(direction));
  70. List<CourseListDto> pr = Transform.convert(p, CourseListDto.class);
  71. return ResponseHelp.success(pr, page, size, p.getTotal());
  72. }
  73. @RequestMapping(value = "/detail", method = RequestMethod.GET)
  74. @ApiOperation(value = "课程详情", httpMethod = "GET")
  75. public Response<Course> detail(
  76. @RequestParam(required = true) Integer courseId
  77. ) {
  78. User user = (User) shiroHelp.getLoginUser();
  79. Course course = courseService.get(courseId);
  80. return ResponseHelp.success(course);
  81. }
  82. @RequestMapping(value = "/simple", method = RequestMethod.GET)
  83. @ApiOperation(value = "课程基本信息", httpMethod = "GET")
  84. public Response<Course> simple(
  85. @RequestParam(required = true) Integer courseId
  86. ) {
  87. User user = (User) shiroHelp.getLoginUser();
  88. Course course = courseService.get(courseId);
  89. return ResponseHelp.success(course);
  90. }
  91. @RequestMapping(value = "/package/list", method = RequestMethod.GET)
  92. @ApiOperation(value = "套餐列表", httpMethod = "GET")
  93. public Response<PageMessage<CoursePackageListDto>> listPackage(
  94. @RequestParam(required = false, defaultValue = "1") int page,
  95. @RequestParam(required = false, defaultValue = "100") int size,
  96. @RequestParam(required = false) Integer structId,
  97. @RequestParam(required = false, defaultValue = "id") String order,
  98. @RequestParam(required = false, defaultValue = "desc") String direction,
  99. HttpSession session) {
  100. Page<CoursePackage> p = coursePackageService.list(page, size, structId, order, DirectionStatus.ValueOf(direction));
  101. List<CoursePackageListDto> pr = Transform.convert(p, CoursePackageListDto.class);
  102. Map<Integer, Integer[]> courseIdsMap = new HashMap<>();
  103. for(CoursePackage cp : p){
  104. courseIdsMap.put(cp.getId(), cp.getCourseIds());
  105. }
  106. Map courseMap = courseService.groupByMap(courseIdsMap);
  107. Transform.combine(pr, courseMap, CoursePackageListDto.class, "id", "courses", CourseExtendDto.class);
  108. return ResponseHelp.success(pr, page, size, p.getTotal());
  109. }
  110. @RequestMapping(value = "/package/detail", method = RequestMethod.GET)
  111. @ApiOperation(value = "套餐详情", httpMethod = "GET")
  112. public Response<CoursePackageDetailDto> detailPackage(
  113. @RequestParam(required = true) Integer packageId
  114. ) {
  115. User user = (User) shiroHelp.getLoginUser();
  116. CoursePackage coursePackage = coursePackageService.get(packageId);
  117. CoursePackageDetailDto dto = Transform.convert(coursePackage, CoursePackageDetailDto.class);
  118. List<Course> courseList = courseService.select(coursePackage.getCourseIds());
  119. dto.setCourses(Transform.convert(courseList, CourseExtendDto.class));
  120. return ResponseHelp.success(dto);
  121. }
  122. @RequestMapping(value = "/data/list", method = RequestMethod.GET)
  123. @ApiOperation(value = "资料列表", httpMethod = "GET")
  124. public Response<PageMessage<CourseDataListDto>> listData(
  125. @RequestParam(required = false, defaultValue = "1") int page,
  126. @RequestParam(required = false, defaultValue = "100") int size,
  127. @RequestParam(required = false) Integer structId,
  128. @RequestParam(required = false) String dataType,
  129. @RequestParam(required = false) Boolean isNovice,
  130. @RequestParam(required = false) Boolean isOriginal,
  131. @RequestParam(required = false, defaultValue = "id") String order,
  132. @RequestParam(required = false, defaultValue = "desc") String direction,
  133. HttpSession session) {
  134. Page<CourseData> p = courseDataService.list(page, size, structId, DataType.ValueOf(dataType), isNovice, isOriginal, order, DirectionStatus.ValueOf(direction));
  135. List<CourseDataListDto> pr = Transform.convert(p, CourseDataListDto.class);
  136. return ResponseHelp.success(pr, page, size, p.getTotal());
  137. }
  138. @RequestMapping(value = "/data/detail", method = RequestMethod.GET)
  139. @ApiOperation(value = "资料详情", httpMethod = "GET")
  140. public Response<CourseData> detailData(
  141. @RequestParam(required = true) Integer dataId
  142. ) {
  143. User user = (User) shiroHelp.getLoginUser();
  144. CourseData courseData = courseDataService.get(dataId);
  145. return ResponseHelp.success(courseData);
  146. }
  147. @RequestMapping(value = "/teacher/list", method = RequestMethod.GET)
  148. @ApiOperation(value = "资料列表", httpMethod = "GET")
  149. public Response<List<CourseTeacher>> listTeacher(
  150. @RequestParam(required = false) Integer courseId,
  151. HttpSession session) {
  152. List<CourseTeacher> p = courseTeacherService.allByCourse(courseId);
  153. return ResponseHelp.success(p);
  154. }
  155. @RequestMapping(value = "/experience/list", method = RequestMethod.GET)
  156. @ApiOperation(value = "心经列表", httpMethod = "GET")
  157. public Response<PageMessage<CourseExperience>> listExperience(
  158. @RequestParam(required = false, defaultValue = "1") int page,
  159. @RequestParam(required = false, defaultValue = "100") int size,
  160. @RequestParam(required = false) String prepareStatus,
  161. @RequestParam(required = false) String experienceDay,
  162. @RequestParam(required = false) String experienceScore,
  163. @RequestParam(required = false) String experiencePercent,
  164. @RequestParam(required = false, defaultValue = "id") String order,
  165. @RequestParam(required = false, defaultValue = "desc") String direction,
  166. HttpSession session) {
  167. Page<CourseExperience> p = courseExperienceService.list(page, size, prepareStatus, ExperienceScoreRange.ValueOf(experienceScore), ExperienceDayRange.ValueOf(experienceDay), experiencePercent, order, DirectionStatus.ValueOf(direction));
  168. return ResponseHelp.success(p, page, size, p.getTotal());
  169. }
  170. @RequestMapping(value = "/record", method = RequestMethod.GET)
  171. @ApiOperation(value = "获取课程记录信息", notes = "获取所有课程及状态进度", httpMethod = "GET")
  172. public Response<UserCourseDetailDto> record(
  173. @RequestParam(required = true) Integer recordId
  174. ) {
  175. User user = (User) shiroHelp.getLoginUser();
  176. UserOrderRecord userOrderRecord = userOrderRecordService.get(recordId);
  177. if (userOrderRecord == null){
  178. throw new ParameterException("记录不存在");
  179. }
  180. if (!userOrderRecord.getUserId().equals(user.getId())){
  181. throw new ParameterException("记录不存在");
  182. }
  183. UserCourseDetailDto dto = Transform.convert(userOrderRecord, UserCourseDetailDto.class);
  184. Course course = courseService.get(userOrderRecord.getProductId());
  185. dto.setCourse(Transform.convert(course, CourseExtendDto.class));
  186. return ResponseHelp.success(dto);
  187. }
  188. @RequestMapping(value = "/progress", method = RequestMethod.GET)
  189. @ApiOperation(value = "获取课程进度", notes = "获取所有课程及状态进度", httpMethod = "GET")
  190. public Response<List<UserCourseProgressDto>> progress(
  191. @RequestParam(required = false) String[] courseModules,
  192. @RequestParam(required = false) Integer structId,
  193. @RequestParam(required = false) Integer courseId
  194. ) {
  195. User user = (User) shiroHelp.getLoginUser();
  196. List<UserOrderRecord> userOrderRecordList = userOrderRecordService.listWithStudyAdmin(1, 1000, courseModules, structId, courseId, user.getId(), null,null, null);
  197. List<UserCourseProgressDto> dtos = Transform.convert(userOrderRecordList, UserCourseProgressDto.class);
  198. // 绑定课程
  199. Collection courseIds = Transform.getIds(userOrderRecordList, UserOrderRecord.class, "productId");
  200. List<Course> courseList = courseService.select(courseIds);
  201. Transform.combine(dtos, courseList, UserCourseProgressDto.class, "productId", "course", Course.class, "id", CourseExtendDto.class);
  202. // 获取每个科目的最后2次作业: 正在进行中的
  203. Date now = new Date();
  204. List<UserOrderRecord> processList = userOrderRecordList.stream().filter(row-> row.getIsUsed() > 0 && row.getUseEndTime().after(now)).collect(Collectors.toList());
  205. Collection processIds = Transform.getIds(processList, UserOrderRecord.class, "id");
  206. Map<Object, Collection<UserPreviewPaperRelation>> previewMap = previewService.groupByCourseId(user.getId(), processIds, 2);
  207. Transform.combine(dtos, previewMap, UserCourseProgressDto.class, "productId", "previews", UserPaperBaseExtendDto.class);
  208. return ResponseHelp.success(dtos);
  209. }
  210. @RequestMapping(value = "/preview/list", method = RequestMethod.GET)
  211. @ApiOperation(value = "获取预习作业列表", notes = "获取预习作业列表", httpMethod = "GET")
  212. public Response<List<UserExercisePaperDto>> listPreview(
  213. @RequestParam(required = false) Integer recordId,
  214. @RequestParam(required = false) String endTime,
  215. @RequestParam(required = false) Integer times
  216. ) {
  217. User user = (User) shiroHelp.getLoginUser();
  218. List<UserPreviewPaperRelation> p = previewService.list(recordId, user.getId(), endTime, times, null);
  219. List<UserExercisePaperDto> pr = Transform.convert(p, UserExercisePaperDto.class);
  220. // 获取试卷统计信息
  221. Map map = Transform.getMap(p, UserPreviewPaperRelation.class, "id", "paper");
  222. Map<Integer, Integer[]> questionNoIdsMap = new HashMap<>();
  223. for(Object value : map.keySet()){
  224. Integer key = (Integer) value;
  225. PreviewPaper preview = (PreviewPaper) map.get(key);
  226. questionNoIdsMap.put(key, preview.getQuestionNoIds());
  227. }
  228. Map statMap = questionNoService.statPaperMap(questionNoIdsMap);
  229. Transform.combine(pr, statMap, UserExercisePaperDto.class, "id", "stat");
  230. return ResponseHelp.success(pr);
  231. }
  232. }