CourseController.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package com.zhongzheng.controller.course;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import cn.hutool.core.lang.Validator;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  8. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  9. import com.zhongzheng.common.exception.CustomException;
  10. import com.zhongzheng.common.utils.ServletUtils;
  11. import com.zhongzheng.modules.course.bo.*;
  12. import com.zhongzheng.modules.course.service.ICourseService;
  13. import com.zhongzheng.modules.course.vo.CourseVo;
  14. import com.zhongzheng.modules.course.vo.GoodsBatchListVo;
  15. import com.zhongzheng.modules.goods.bo.GoodsBatchDelBo;
  16. import com.zhongzheng.modules.goods.vo.ExportLiveGoodsVo;
  17. import com.zhongzheng.modules.goods.vo.GoodsUserVo;
  18. import com.zhongzheng.modules.order.vo.OrderGoodsLiveExportVo;
  19. import com.zhongzheng.modules.order.vo.OrderGoodsVo;
  20. import com.zhongzheng.modules.user.domain.User;
  21. import com.zhongzheng.modules.user.entity.ClientLoginUser;
  22. import com.zhongzheng.modules.user.service.IUserService;
  23. import com.zhongzheng.modules.user.service.IUserStudyRecordService;
  24. import lombok.RequiredArgsConstructor;
  25. import org.springframework.security.access.prepost.PreAuthorize;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.web.bind.annotation.GetMapping;
  28. import org.springframework.web.bind.annotation.PostMapping;
  29. import org.springframework.web.bind.annotation.PutMapping;
  30. import org.springframework.web.bind.annotation.DeleteMapping;
  31. import org.springframework.web.bind.annotation.PathVariable;
  32. import org.springframework.web.bind.annotation.RequestBody;
  33. import org.springframework.web.bind.annotation.RequestMapping;
  34. import org.springframework.web.bind.annotation.RestController;
  35. import com.zhongzheng.common.annotation.Log;
  36. import com.zhongzheng.common.core.controller.BaseController;
  37. import com.zhongzheng.common.core.domain.AjaxResult;
  38. import com.zhongzheng.common.enums.BusinessType;
  39. import com.zhongzheng.common.utils.poi.ExcelUtil;
  40. import com.zhongzheng.common.core.page.TableDataInfo;
  41. import io.swagger.annotations.Api;
  42. import io.swagger.annotations.ApiOperation;
  43. /**
  44. * 课程Controller
  45. *
  46. * @author hjl
  47. * @date 2021-10-09
  48. */
  49. @Api(value = "课程控制器", tags = {"课程管理"})
  50. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  51. @RestController
  52. @RequestMapping("/course")
  53. public class CourseController extends BaseController {
  54. private final ICourseService iCourseService;
  55. private final IUserStudyRecordService iUserStudyRecordService;
  56. private final IUserService iUserService;
  57. /**
  58. * 查询课程列表
  59. */
  60. @ApiOperation("查询课程列表")
  61. @PreAuthorize("@ss.hasPermi('system:course:list')")
  62. @GetMapping("/list")
  63. public TableDataInfo<CourseVo> list(CourseQueryBo bo) {
  64. startPage();
  65. List<CourseVo> list = iCourseService.selectList(bo);
  66. return getDataTable(list);
  67. }
  68. /**
  69. * 课程批量删除
  70. */
  71. @ApiOperation("课程批量删除")
  72. @PostMapping("/batch/del")
  73. public AjaxResult<Void> batchDelCourse(@RequestBody GoodsBatchDelBo bo) {
  74. return toAjax(iCourseService.batchDelCourse(bo) ? 1 : 0);
  75. }
  76. /**
  77. * 导出课程列表
  78. */
  79. /* @ApiOperation("导出课程列表")
  80. @PreAuthorize("@ss.hasPermi('system:course:export')")
  81. @Log(title = "课程", businessType = BusinessType.EXPORT)
  82. @GetMapping("/export")
  83. public AjaxResult<CourseVo> export(CourseQueryBo bo) {
  84. List<CourseVo> list = iCourseService.queryList(bo);
  85. ExcelUtil<CourseVo> util = new ExcelUtil<CourseVo>(CourseVo.class);
  86. return util.exportExcel(list, "课程");
  87. }*/
  88. /**
  89. * 获取课程详细信息
  90. */
  91. @ApiOperation("获取课程详细信息")
  92. @PreAuthorize("@ss.hasPermi('system:course:query')")
  93. @GetMapping("/{courseId}")
  94. public AjaxResult<CourseVo> getInfo(@PathVariable("courseId" ) Long courseId) {
  95. return AjaxResult.success(iCourseService.selectById(courseId));
  96. }
  97. /**
  98. * 新增课程
  99. */
  100. @ApiOperation("新增课程")
  101. @PreAuthorize("@ss.hasPermi('system:course:add')")
  102. @Log(title = "课程", businessType = BusinessType.INSERT)
  103. @PostMapping()
  104. public AjaxResult<Long> add(@RequestBody CourseAddBo bo) {
  105. return AjaxResult.success(iCourseService.insertByAddBo(bo));
  106. }
  107. /**
  108. * 修改课程
  109. */
  110. @ApiOperation("修改课程")
  111. @PreAuthorize("@ss.hasPermi('system:course:edit')")
  112. @Log(title = "课程", businessType = BusinessType.UPDATE)
  113. @PostMapping("/edit")
  114. public AjaxResult<Void> edit(@RequestBody CourseEditBo bo) {
  115. return toAjax(iCourseService.updateByEditBo(bo) ? 1 : 0);
  116. }
  117. /**
  118. * 课程统计报表
  119. */
  120. @ApiOperation("课程统计报表")
  121. @GetMapping("/statement")
  122. public TableDataInfo<CourseStatementVo> getCourseStatement(CourseStatementBo bo) {
  123. startPage();
  124. List<CourseStatementVo> list = iUserStudyRecordService.getCourseStatement(bo);
  125. return getDataTable(list);
  126. }
  127. /**
  128. * 课程统计报表导出
  129. */
  130. @ApiOperation("课程统计报表导出")
  131. @GetMapping("/statement/export")
  132. public AjaxResult<CourseStatementVo> exportCourseStatement(CourseStatementBo bo) {
  133. List<CourseStatementVo> list = iUserStudyRecordService.getCourseStatement(bo);
  134. if (CollectionUtils.isNotEmpty(list)){
  135. list = list.stream().map(item -> CourseStatementVo.createExportVo(item)).collect(Collectors.toList());
  136. }
  137. ExcelUtil<CourseStatementVo> util = new ExcelUtil<>(CourseStatementVo.class);
  138. return util.exportExcel(list,"课程学习统计");
  139. }
  140. /**
  141. * 课程详情统计
  142. */
  143. @ApiOperation("课程详情统计")
  144. @GetMapping("/detail/statistics")
  145. public TableDataInfo<CourseSectionDetailVo> getCourseDetailStatistics(CourseSectionDetailBo bo) {
  146. startPage();
  147. List<CourseSectionDetailVo> list = iUserStudyRecordService.getCourseDetailStatistics(bo);
  148. return getDataTable(list);
  149. }
  150. /**
  151. * 课程详情统计导出
  152. */
  153. @ApiOperation("课程详情统计导出")
  154. @GetMapping("/detail/statistics/export")
  155. public AjaxResult<CourseSectionDetailVo> exportCourseDetailStatistics(CourseSectionDetailBo bo) {
  156. List<CourseSectionDetailVo> list = iUserStudyRecordService.getCourseDetailStatistics(bo);
  157. if (CollectionUtils.isNotEmpty(list)){
  158. list.forEach(item -> {
  159. item.setPurchaseStatusStr(ObjectUtils.isNotNull(item.getPurchaseStatus()) && item.getPurchaseStatus() == 1?"已开课":"未开课");
  160. });
  161. }
  162. ExcelUtil<CourseSectionDetailVo> util = new ExcelUtil<>(CourseSectionDetailVo.class);
  163. return util.exportExcel(list,"课程学员学习统计");
  164. }
  165. /**
  166. * 学员观看记录
  167. */
  168. @ApiOperation("学员观看记录")
  169. @GetMapping("/user/watch")
  170. public AjaxResult<List<UserWatchStatisticsVo>> getUserWatchStatistics(CourseSectionDetailBo bo) {
  171. List<UserWatchStatisticsVo> list = iUserStudyRecordService.getUserWatchStatistics(bo);
  172. return AjaxResult.success(list);
  173. }
  174. /**
  175. * 删除课程
  176. */
  177. /* @ApiOperation("删除课程")
  178. @PreAuthorize("@ss.hasPermi('system:course:remove')")
  179. @Log(title = "课程" , businessType = BusinessType.DELETE)
  180. @DeleteMapping("/{courseIds}")
  181. public AjaxResult<Void> remove(@PathVariable Long[] courseIds) {
  182. return toAjax(iCourseService.deleteWithValidByIds(Arrays.asList(courseIds), true) ? 1 : 0);
  183. }*/
  184. /**
  185. * 查询课程列表
  186. */
  187. @ApiOperation("查询用户拥有的商品")
  188. @GetMapping("/goodsList")
  189. public TableDataInfo<GoodsUserVo> goodsList(CourseQueryBo bo) {
  190. User user = iUserService.getOne(new LambdaQueryWrapper<User>()
  191. .eq(User::getTelphone, bo.getTelphone()).last("limit 1"));
  192. if(Validator.isEmpty(user)){
  193. throw new CustomException("该用户不存在");
  194. }
  195. startPage();
  196. bo.setUserId(user.getUserId());
  197. List<GoodsUserVo> list = iCourseService.goodsList(bo);
  198. return getDataTable(list);
  199. }
  200. @ApiOperation("批量查询用户拥有的商品进度")
  201. @GetMapping("/goodsBatchList")
  202. public AjaxResult<List<GoodsBatchListVo>> goodsBatchList(CourseQueryBo bo) {
  203. List<GoodsBatchListVo> listVos = new ArrayList<>();
  204. if (CollectionUtils.isEmpty(bo.getTelphoneList())){
  205. return null;
  206. }
  207. for(CourseProgressQueryBo queryBo : bo.getTelphoneList()){
  208. User user = iUserService.getOne(new LambdaQueryWrapper<User>()
  209. .eq(User::getTelphone, queryBo.getTelphone()).last("limit 1"));
  210. if(Validator.isEmpty(user)){
  211. continue;
  212. }
  213. GoodsBatchListVo vo = new GoodsBatchListVo();
  214. vo.setUserId(user.getUserId());
  215. vo.setGoodsId(queryBo.getGoodsId());
  216. vo.setTelphone(queryBo.getTelphone());
  217. List<GoodsUserVo> list = iCourseService.goodsProgressList(bo);
  218. vo.setList(list);
  219. }
  220. if (CollectionUtils.isEmpty(listVos)){
  221. return null;
  222. }
  223. return AjaxResult.success(listVos);
  224. }
  225. }