zyp před 4 dny
rodič
revize
b788b0b1ea

+ 2 - 0
fs-service/src/main/java/com/fs/course/domain/FsVideoResource.java

@@ -102,4 +102,6 @@ public class FsVideoResource {
 
     //火山云vid
     private String hsyVid;
+
+    private String jobId;
 }

+ 8 - 6
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -2,6 +2,7 @@ package com.fs.course.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.course.domain.FsUserCourseVideo;
+import com.fs.course.domain.FsVideoResource;
 import com.fs.course.param.CourseVideoUpdates;
 import com.fs.course.param.FsCourseListBySidebarParam;
 import com.fs.course.param.FsUserCourseVideoListUParam;
@@ -266,12 +267,13 @@ public interface FsUserCourseVideoMapper extends BaseMapper<FsUserCourseVideo> {
     @MapKey("videoId")
     Map<Long, FsUserCourseVideo> selectAllMap();
 
-    @Select("select * from fs_user_course_video where line_two is not null and job_id is null")
-    List<FsUserCourseVideo> selectVideoByHuaWei();
+    @Select("select * from fs_video_resource where line2 is not null and job_id is null")
+    List<FsVideoResource> selectVideoByHuaWei();
 
-    @Select("select * from fs_user_course_video where job_id is not null and  (vid is null or vid='')")
-    List<FsUserCourseVideo> selectVideoByJobId();
+    @Select("select * from fs_video_resource where job_id is not null and  (hsy_vid is null or hsy_vid='')")
+    List<FsVideoResource> selectVideoByJobId();
 
-    @Select("select * from fs_user_course_video where vid is not null")
-    List<FsUserCourseVideo> selectVideoByVid();
+
+    @Select("select * from fs_video_resource where hsy_vid is not null")
+    List<FsVideoResource> selectVideoByVid();
 }

+ 43 - 39
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -4076,8 +4076,8 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
 
     @Override
     public R uploadVideoToHuoShanByUrl() {
-        List <FsUserCourseVideo> videos = fsUserCourseVideoMapper.selectVideoByHuaWei();
-        for (FsUserCourseVideo video : videos){
+        List <FsVideoResource> videos = fsUserCourseVideoMapper.selectVideoByHuaWei();
+        for (FsVideoResource video : videos){
             uploadVideoByUrl(video);
         }
         return R.ok();
@@ -4087,7 +4087,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     private IVodService vodService;
 
     //通过Url上传视频
-    public void uploadVideoByUrl(FsUserCourseVideo courseVideo) {
+    public void uploadVideoByUrl(FsVideoResource videoResource) {
 
         try {
             VodUrlUploadRequest.Builder reqBuilder = VodUrlUploadRequest.newBuilder();
@@ -4095,7 +4095,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             reqBuilder.setSpaceName(cloudHostProper.getSpaceName());
             VodUrlUploadURLSet.Builder uRLSetsBuilder = VodUrlUploadURLSet.newBuilder();
             //源文件 URL
-            uRLSetsBuilder.setSourceUrl(courseVideo.getLineTwo());//华为云
+            uRLSetsBuilder.setSourceUrl(videoResource.getLine2());//华为云
             //存储类型。默认为 1。取值如下:
             //1:标准存储。
             //2:归档存储。
@@ -4110,7 +4110,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
 //            String fileName = System.currentTimeMillis() + ".mp4";
 //            String remoteFileName = "fs/" + datePath + "/" + fileName;
 
-            uRLSetsBuilder.setFileName(courseVideo.getFileKey());
+            uRLSetsBuilder.setFileName(videoResource.getFileKey());
             reqBuilder.addURLSets(uRLSetsBuilder);
 
             VodUrlUploadResponse resp = vodService.uploadMediaByUrl(reqBuilder.build());
@@ -4119,11 +4119,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 log.info("上传返回异常:{}",resp.getResponseMetadata().getError());
                 System.exit(-1);
             }else {
-                FsUserCourseVideo video = new FsUserCourseVideo();
-                video.setVideoId(courseVideo.getVideoId());
+                FsVideoResource video = new FsVideoResource();
+                video.setId(videoResource.getId());
                 video.setJobId(resp.getResult().getData(0).getJobId());
                 //更新JobId
-                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
+                fsVideoResourceMapper.updateById(video);
             }
             log.info("上传返回参数:{}",resp);
         } catch (Exception e) {
@@ -4134,25 +4134,25 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     @Override
     public R getVidByJob() {
         // 查询有JobId的视频
-        List<FsUserCourseVideo> list = fsUserCourseVideoMapper.selectVideoByJobId();
+        List<FsVideoResource> list = fsUserCourseVideoMapper.selectVideoByJobId();
         if (list.isEmpty()) {
             log.info("没有待上传的视频任务");
             return R.error();
         }
         // 按五百一批切割
-        List<List<FsUserCourseVideo>> batches = splitList(list, 500);
+        List<List<FsVideoResource>> batches = splitList(list, 500);
         log.info("总任务 {} 条,分成 {} 批", list.size(), batches.size());
 
         int batchIndex = 1;
 
         // 批次顺序执行,每批内部多线程并发执行
-        for (List<FsUserCourseVideo> batch : batches) {
+        for (List<FsVideoResource> batch : batches) {
 
             log.info("开始执行批次 {}/{},本批任务 {} 条", batchIndex, batches.size(), batch.size());
 
             CountDownLatch latch = new CountDownLatch(batch.size());
 
-            for (FsUserCourseVideo video : batch) {
+            for (FsVideoResource video : batch) {
                 uploadExecutor.submit(() -> {
                     try {
                         uploadSingleTaskWithRetry(video,1);
@@ -4180,25 +4180,25 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     @Override
     public R getVideoInfoByVid() {
         // 查询有JobId的视频
-        List<FsUserCourseVideo> list = fsUserCourseVideoMapper.selectVideoByVid();
+        List<FsVideoResource> list = fsUserCourseVideoMapper.selectVideoByVid();
         if (list.isEmpty()) {
             log.info("没有包含vid的视频");
             return R.error();
         }
         // 按五百一批切割
-        List<List<FsUserCourseVideo>> batches = splitList(list, 500);
+        List<List<FsVideoResource>> batches = splitList(list, 500);
         log.info("总任务 {} 条,分成 {} 批", list.size(), batches.size());
 
         int batchIndex = 1;
 
         // 批次顺序执行,每批内部多线程并发执行
-        for (List<FsUserCourseVideo> batch : batches) {
+        for (List<FsVideoResource> batch : batches) {
 
             log.info("开始执行批次 {}/{},本批任务 {} 条", batchIndex, batches.size(), batch.size());
 
             CountDownLatch latch = new CountDownLatch(batch.size());
 
-            for (FsUserCourseVideo video : batch) {
+            for (FsVideoResource video : batch) {
                 uploadExecutor.submit(() -> {
                     try {
                         uploadSingleTaskWithRetry(video,2);
@@ -4280,10 +4280,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     }
 
     //根据jobid查询上传视频的vid
-    public void getVidByJobId(FsUserCourseVideo courseVideo){
+    public void getVidByJobId(FsVideoResource videoResource){
         try {
             VodQueryUploadTaskInfoRequest.Builder reqBuilder = VodQueryUploadTaskInfoRequest.newBuilder();
-            reqBuilder.setJobIds(courseVideo.getJobId());
+            reqBuilder.setJobIds(videoResource.getJobId());
 
             VodQueryUploadTaskInfoResponse resp = vodService.queryUploadTaskInfo(reqBuilder.build());
             if (resp.getResponseMetadata().hasError()) {
@@ -4293,10 +4293,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 if (StringUtils.isEmpty(resp.getResult().getData().getMediaInfoList(0).getVid())){
                     return;
                 }
-                FsUserCourseVideo video = new FsUserCourseVideo();
-                video.setVideoId(courseVideo.getVideoId());
-                video.setVid(resp.getResult().getData().getMediaInfoList(0).getVid());
-                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
+                FsVideoResource video = new FsVideoResource();
+                video.setId(videoResource.getId());
+                video.setHsyVid(resp.getResult().getData().getMediaInfoList(0).getVid());
+                fsVideoResourceMapper.updateById(video);
             }
             System.out.println(resp);
         } catch (Exception e) {
@@ -4305,10 +4305,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     }
 
 
-    public void getVideoInfoByVid(FsUserCourseVideo courseVideo) {
+    //根据vid获取视频详情
+    public void getVideoInfoByVid(FsVideoResource videoResource) {
         try {
             VodGetMediaInfosRequest.Builder reqBuilder = VodGetMediaInfosRequest.newBuilder();
-            reqBuilder.setVids(courseVideo.getVid());
+            reqBuilder.setVids(videoResource.getHsyVid());
 
             VodGetMediaInfosResponse resp = vodService.getMediaInfos20230701(reqBuilder.build());
             if (resp.getResponseMetadata().hasError()) {
@@ -4321,19 +4322,22 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 }
                 //如果是未发布状态修改发布状态
                 if (resp.getResult().getMediaInfoList(0).getBasicInfo().getPublishStatus().equals("Unpublished")){
-                    updateMediaPublishStatus(courseVideo.getVid());
+                    updateMediaPublishStatus(videoResource.getHsyVid());
                 }
+                //更新视频资源
+                String url = cloudHostProper.volcengineUrl+"/"+resp.getResult().getMediaInfoList(0).getSourceInfo().getStoreUri();
+
+                FsVideoResource fsVideoResource = new FsVideoResource();
+                fsVideoResource.setId(videoResource.getId());
+                fsVideoResource.setLine2(url);
+                fsVideoResourceMapper.updateById(fsVideoResource);
 
                 //更新小节
-                FsUserCourseVideo video = new FsUserCourseVideo();
-                video.setVideoId(courseVideo.getVideoId());
-                String url = cloudHostProper.volcengineUrl+"/"+resp.getResult().getMediaInfoList(0).getSourceInfo().getStoreUri();
-                video.setLineTwo(url);
-                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
-                //更新视频资源
-                FsVideoResource videoResource = fsVideoResourceMapper.selectByFileKey(courseVideo.getFileKey());
-                videoResource.setLine2(url);
-                fsVideoResourceMapper.updateById(videoResource);
+                FsUserCourseVideo courseVideo = new FsUserCourseVideo();
+                courseVideo.setFileKey(videoResource.getFileKey());
+                courseVideo.setLineTwo(url);
+                fsUserCourseVideoMapper.updateFsUserCourseVideoByFileKey(courseVideo);
+
             }
             System.out.println(resp);
         } catch (Exception e) {
@@ -4362,23 +4366,23 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     }
 
 
-    public void uploadSingleTaskWithRetry(FsUserCourseVideo courseVideo,Integer type) {
+    public void uploadSingleTaskWithRetry(FsVideoResource videoResource,Integer type) {
         int maxRetry = 3;
         for (int i = 1; i <= maxRetry; i++) {
             try {
                 if (type == 1){
                     //获取上传成功的视频vid,同步到数据库
-                    getVidByJobId(courseVideo);
+                    getVidByJobId(videoResource);
                 }else if (type == 2){
                     //获取视频地址同步到线路二
-                    getVideoInfoByVid(courseVideo);
+                    getVideoInfoByVid(videoResource);
                 }
                 return;
             } catch (Exception e) {
                 log.error("视频 {} 上传失败,第 {} 次重试,原因:{}",
-                        courseVideo.getVideoId(), i, e.getMessage());
+                        videoResource.getId(), i, e.getMessage());
                 if (i == maxRetry) {
-                    log.error("视频 {} 上传最终失败!", courseVideo.getVideoId());
+                    log.error("视频 {} 上传最终失败!", videoResource.getId());
                 }
             }
         }