From 872b9939f9c77aefc172b009c77073b3a4df4702 Mon Sep 17 00:00:00 2001 From: wangjinlei <751475802@qq.com> Date: Wed, 24 Apr 2024 11:09:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=AF=86=E8=A7=86=E9=A2=91=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../com/peanut/common/utils/SpdbUtil.java | 45 +++++++++++++++++ .../CourseCatalogueChapterVideoEntity.java | 4 ++ .../CourseCatalogueChapterVideoService.java | 2 + ...ourseCatalogueChapterVideoServiceImpl.java | 48 ++++++++++++++++++- .../controller/CourseController.java | 28 +++++++++++ 6 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/peanut/common/utils/SpdbUtil.java diff --git a/pom.xml b/pom.xml index 97841542..22d7b2f8 100644 --- a/pom.xml +++ b/pom.xml @@ -293,6 +293,11 @@ springfox-swagger2 ${swagger.version} + + com.aliyun + vod20170321 + 2.20.0 + io.springfox springfox-swagger-ui diff --git a/src/main/java/com/peanut/common/utils/SpdbUtil.java b/src/main/java/com/peanut/common/utils/SpdbUtil.java new file mode 100644 index 00000000..fb5de3c6 --- /dev/null +++ b/src/main/java/com/peanut/common/utils/SpdbUtil.java @@ -0,0 +1,45 @@ +package com.peanut.common.utils; + +import com.aliyun.tea.TeaException; +import com.aliyun.teautil.models.RuntimeOptions; +import com.aliyun.vod20170321.Client; +import com.aliyun.vod20170321.models.GetVideoPlayAuthRequest; +import com.aliyun.vod20170321.models.GetVideoPlayAuthResponse; + +public class SpdbUtil { + + public static String getPlayAuth(String vid) throws Exception { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId("LTAI5tMKmWhPfnPsz2J3bfxL") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("doFUplbiIxL6PgJME3eSaW8G6HauuC"); + // Endpoint 请参考 https://api.aliyun.com/product/vod + config.endpoint = "vod.cn-shanghai.aliyuncs.com"; + Client client = new Client(config); + GetVideoPlayAuthRequest getVideoPlayAuthRequest = new GetVideoPlayAuthRequest().setVideoId(vid).setAuthInfoTimeout(1000L);; + RuntimeOptions runtimeOptions = new RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + GetVideoPlayAuthResponse videoPlayAuthWithOptions = client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtimeOptions); + return videoPlayAuthWithOptions.getBody().getPlayAuth(); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + return "error"; + + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + return "error"; + } + + } +} diff --git a/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java b/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java index 057c681a..e79fc5fa 100644 --- a/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java +++ b/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java @@ -1,5 +1,6 @@ package com.peanut.modules.common.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; @@ -26,4 +27,7 @@ public class CourseCatalogueChapterVideoEntity { @TableLogic private Integer delFlag; + + @TableField(exist = false) + private String playAuth; } diff --git a/src/main/java/com/peanut/modules/master/service/CourseCatalogueChapterVideoService.java b/src/main/java/com/peanut/modules/master/service/CourseCatalogueChapterVideoService.java index 9264f341..55e8e09a 100644 --- a/src/main/java/com/peanut/modules/master/service/CourseCatalogueChapterVideoService.java +++ b/src/main/java/com/peanut/modules/master/service/CourseCatalogueChapterVideoService.java @@ -7,4 +7,6 @@ import com.peanut.modules.common.to.ParamTo; public interface CourseCatalogueChapterVideoService extends IService { Page getCourseCatalogueChapterVideoList(ParamTo param); + + CourseCatalogueChapterVideoEntity checkVideo(CourseCatalogueChapterVideoEntity video) throws Exception; } diff --git a/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java b/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java index 0f21d19c..e670cea4 100644 --- a/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java +++ b/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java @@ -3,17 +3,35 @@ package com.peanut.modules.master.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.common.utils.ShiroUtils; +import com.peanut.common.utils.SpdbUtil; +import com.peanut.modules.common.dao.CourseCatalogueChapterDao; import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao; +import com.peanut.modules.common.dao.CourseCatalogueDao; +import com.peanut.modules.common.dao.UserToCourseDao; +import com.peanut.modules.common.entity.CourseCatalogueChapterEntity; import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity; +import com.peanut.modules.common.entity.CourseCatalogueEntity; +import com.peanut.modules.common.entity.UserToCourseEntity; import com.peanut.modules.common.to.ParamTo; import com.peanut.modules.master.service.CourseCatalogueChapterVideoService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.xml.ws.soap.Addressing; +import java.util.Date; +import java.util.List; + @Slf4j @Service("masterCourseCatalogueChapterVideoService") public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl implements CourseCatalogueChapterVideoService { - + @Autowired + private CourseCatalogueChapterDao courseCatalogueChapterDao; + @Autowired + private CourseCatalogueDao courseCatalogueDao; + @Autowired + private UserToCourseDao userToCourseDao; @Override public Page getCourseCatalogueChapterVideoList(ParamTo param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -22,4 +40,32 @@ public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl page = this.page(new Page<>(param.getPage(), param.getLimit()), wrapper); return page; } + + + @Override + public CourseCatalogueChapterVideoEntity checkVideo(CourseCatalogueChapterVideoEntity video) throws Exception { + CourseCatalogueChapterEntity courseCatalogueChapterEntity = courseCatalogueChapterDao.selectById(video.getChapterId()); + CourseCatalogueEntity courseCatalogueEntity = courseCatalogueDao.selectById(courseCatalogueChapterEntity.getCatalogueId()); + Integer uId = ShiroUtils.getUId(); + List userToCourseEntities = userToCourseDao.selectList(new LambdaQueryWrapper().eq(UserToCourseEntity::getUserId, uId).eq(UserToCourseEntity::getCourseId, courseCatalogueEntity.getCourseId())); + //用户课程足迹 + if(userToCourseEntities.size()!=0){ + UserToCourseEntity userToCourseEntity = userToCourseEntities.get(0); + userToCourseEntity.setUpdateTime(new Date()); + userToCourseDao.updateById(userToCourseEntity); + }else{ + UserToCourseEntity userToCourseEntity = new UserToCourseEntity(); + userToCourseEntity.setUserId(uId); + userToCourseEntity.setCourseId(courseCatalogueEntity.getCourseId()); + userToCourseEntity.setCreateTime(new Date()); + userToCourseEntity.setUpdateTime(new Date()); + userToCourseDao.insert(userToCourseEntity); + } + //加密视频组装playauth + if(video.getType()==1){ + String playAuth = SpdbUtil.getPlayAuth(video.getVideo()); + video.setPlayAuth(playAuth); + } + return video; + } } diff --git a/src/main/java/com/peanut/modules/sociology/controller/CourseController.java b/src/main/java/com/peanut/modules/sociology/controller/CourseController.java index d678d00b..0e686271 100644 --- a/src/main/java/com/peanut/modules/sociology/controller/CourseController.java +++ b/src/main/java/com/peanut/modules/sociology/controller/CourseController.java @@ -1,11 +1,19 @@ package com.peanut.modules.sociology.controller; +import com.aliyun.tea.TeaException; +import com.aliyun.teautil.models.RuntimeOptions; +import com.aliyun.vod20170321.Client; +import com.aliyun.vod20170321.models.*; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; +import com.peanut.common.utils.SpdbUtil; +import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao; import com.peanut.modules.common.entity.CourseCatalogueChapterEntity; +import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity; import com.peanut.modules.common.entity.CourseEntity; import com.peanut.modules.common.to.ParamTo; +import com.peanut.modules.master.service.CourseCatalogueChapterVideoService; import com.peanut.modules.sociology.service.CourseCatalogueChapterService; import com.peanut.modules.sociology.service.CourseService; import lombok.extern.slf4j.Slf4j; @@ -26,6 +34,8 @@ public class CourseController { private CourseService courseService; @Autowired private CourseCatalogueChapterService courseCatalogueChapterService; + @Autowired + private CourseCatalogueChapterVideoService courseCatalogueChapterVideoService; /** * 获取用户最近学习课程列表 @@ -95,4 +105,22 @@ public class CourseController { return R.ok().put("chapterList",courseCatalogueChapterList); } + @RequestMapping("/getPlayAuth") + public R getPlayAuth(@RequestBody Map map) throws Exception { + String playAuth = SpdbUtil.getPlayAuth(map.get("vid")); + return R.ok().put("playAuth",playAuth); + } + + /** + * 验证video权限,并解决足迹,加密视频签名问题 + * @param video + * @return + * @throws Exception + */ + @RequestMapping("/checkVideo") + public R checkVideo(@RequestBody CourseCatalogueChapterVideoEntity video) throws Exception { + CourseCatalogueChapterVideoEntity courseCatalogueChapterVideoEntity = courseCatalogueChapterVideoService.checkVideo(video); + return R.ok().put("video",courseCatalogueChapterVideoEntity); + } + }