|
@@ -0,0 +1,125 @@
|
|
|
+package com.fs.app.controller;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
+import com.fs.course.config.CourseConfig;
|
|
|
+import com.fs.course.domain.FsCourseWatchLog;
|
|
|
+import com.fs.course.param.FsUserCourseVideoFinishUParam;
|
|
|
+import com.fs.course.service.IFsCourseLinkService;
|
|
|
+import com.fs.course.service.IFsCourseWatchLogService;
|
|
|
+import com.fs.course.service.IFsUserCourseService;
|
|
|
+import com.fs.course.service.IFsUserCourseVideoService;
|
|
|
+import com.fs.course.vo.FsUserCourseVideoH5DVO;
|
|
|
+import com.fs.course.vo.FsUserCourseVideoH5VO;
|
|
|
+import com.fs.system.service.ISysConfigService;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+
|
|
|
+@Api("h5课堂接口")
|
|
|
+@RestController
|
|
|
+@RequestMapping(value="/app/course/h5")
|
|
|
+public class CourseH5Controller extends AppBaseController{
|
|
|
+ Logger logger= LoggerFactory.getLogger(getClass());
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseService courseService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseVideoService courseVideoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService configService;
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseLinkService courseLinkService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseWatchLogService courseWatchLogService;
|
|
|
+
|
|
|
+
|
|
|
+ @ApiOperation("h5课程简介")
|
|
|
+ @GetMapping("/getH5CourseByVideoId")
|
|
|
+ public R getCourseByVideoId(@RequestParam("videoId") Long videoId,HttpServletRequest request)
|
|
|
+ {
|
|
|
+ FsUserCourseVideoH5VO course = courseService.selectFsUserCourseVideoH5VOByVideoId(videoId);
|
|
|
+ return R.ok().put("data",course);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation("h5课程详情")
|
|
|
+ @GetMapping("/getH5CourseVideoDetails")
|
|
|
+ public R getCourseVideoDetails(FsUserCourseVideoFinishUParam param)
|
|
|
+ {
|
|
|
+ String json = configService.selectConfigByKey("course.config");
|
|
|
+ CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
|
|
|
+ FsUserCourseVideoH5DVO course = courseService.selectFsUserCourseVideoH5DVOByVideoId(param.getVideoId());
|
|
|
+
|
|
|
+ Long duration = 0L;
|
|
|
+ long tipsTime = 0L;
|
|
|
+ int isFinish = 0;
|
|
|
+ if (param.getLinkType()!=null&¶m.getLinkType()==1){
|
|
|
+ return R.ok().put("course",course).put("config",config).put("playDuration",duration).put("tipsTime",tipsTime).put("maxBufferLength",config.getMaxBufferLength());
|
|
|
+ }
|
|
|
+ // 从Redis中获取观看时长
|
|
|
+ String redisKey = "h5user:watch:duration:" + param.getQwUserId()+ ":" + param.getQwExternalId() + ":" + param.getVideoId();
|
|
|
+ String durationStr = redisCache.getCacheObject(redisKey);
|
|
|
+ FsCourseWatchLog log = courseWatchLogService.getWatchCourseVideoH5(param.getVideoId(),param.getQwUserId(),param.getQwExternalId());
|
|
|
+ //redis取不到查库
|
|
|
+ if (durationStr != null) {
|
|
|
+ duration = Long.parseLong(durationStr);
|
|
|
+ }else {
|
|
|
+ duration = log.getDuration();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (course.getDuration()!=null){
|
|
|
+ tipsTime = course.getDuration()/2;
|
|
|
+ }
|
|
|
+ //判断是否完课
|
|
|
+ if (log.getLogType()==2){
|
|
|
+ isFinish=1;
|
|
|
+ }
|
|
|
+
|
|
|
+ //将视频时长也存到redis
|
|
|
+ String videoRedisKey = "h5user:video:duration:" + param.getVideoId();
|
|
|
+ Long videoDuration = redisCache.getCacheObject(videoRedisKey);
|
|
|
+ if (videoDuration==null){
|
|
|
+ redisCache.setCacheObject(videoRedisKey,course.getDuration());
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok().put("course",course).put("config",config).put("playDuration",duration).put("tipsTime",tipsTime).put("maxBufferLength",config.getMaxBufferLength()).put("isFinish",isFinish);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @ApiOperation("获取真实链接")
|
|
|
+ @GetMapping("/getRealLink")
|
|
|
+ public R getRealLink(@RequestParam("sortLink")String link)
|
|
|
+ {
|
|
|
+ return courseLinkService.getRealLink(link);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @ApiOperation("更新看课时长")
|
|
|
+ @PostMapping("/updateWatchDuration")
|
|
|
+ public R updateWatchDuration(@RequestBody FsUserCourseVideoFinishUParam param)
|
|
|
+ {
|
|
|
+ return courseVideoService.updateWatchDuration(param);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @ApiOperation("获取缓冲流量")
|
|
|
+ @PostMapping("/getInternetTraffic")
|
|
|
+ public R getInternetTraffic(@RequestBody FsUserCourseVideoFinishUParam param) {
|
|
|
+ return courseVideoService.getInternetTraffic(param);
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("/getErrMsg")
|
|
|
+ public void getErrMsg(@RequestParam("msg") String msg) {
|
|
|
+ logger.error("zyp \n【h5看课中途报错】:{}",msg);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|