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);
+ }
+
}