CourseController.java 12 KB

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