浏览代码

上传视频进度条

lyhzzz 3 年之前
父节点
当前提交
ed333861a7

+ 6 - 0
src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java

@@ -0,0 +1,6 @@
+package com.fdkankan.fusion.common.util;
+
+public class RedisKeyUtil {
+
+    public static String mergerVideoKey = "merger:video:";
+}

+ 11 - 0
src/main/java/com/fdkankan/fusion/common/util/ThreadUtil.java

@@ -0,0 +1,11 @@
+package com.fdkankan.fusion.common.util;
+
+import lombok.SneakyThrows;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class ThreadUtil {
+   public static  ExecutorService executorService = Executors.newSingleThreadExecutor();
+
+}

+ 12 - 0
src/main/java/com/fdkankan/fusion/controller/CaseVideoController.java

@@ -2,6 +2,7 @@ package com.fdkankan.fusion.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.entity.CaseVideo;
 import com.fdkankan.fusion.request.CaseParam;
@@ -45,6 +46,17 @@ public class CaseVideoController {
         caseVideoService.uploadAddVideo(files,folderId,caseId);
         return ResultData.ok();
     }
+    /**
+     * 批量添加文件至文件夹
+     */
+    @GetMapping("/uploadAddVideoProgress")
+    public ResultData uploadAddVideoProgress(@RequestParam(required = false) Integer folderId) throws Exception {
+        String code = caseVideoService.uploadAddVideoProgress(folderId);
+        if("-1".equals(code)){
+            return ResultData.error(code);
+        }
+        return ResultData.ok(code);
+    }
 
     /**
      * 删除单个文件

+ 2 - 2
src/main/java/com/fdkankan/fusion/service/ICaseVideoService.java

@@ -2,8 +2,6 @@ package com.fdkankan.fusion.service;
 
 import com.fdkankan.fusion.entity.CaseVideo;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.fdkankan.fusion.request.CaseParam;
-import com.fdkankan.fusion.request.CaseVideoParam;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -26,4 +24,6 @@ public interface ICaseVideoService extends IService<CaseVideo> {
     void delete(Integer videoId);
 
     void uploadAddVideo(MultipartFile[] files, Integer folderId,Integer caseId) throws IOException;
+
+    String uploadAddVideoProgress(Integer folderId);
 }

+ 55 - 23
src/main/java/com/fdkankan/fusion/service/impl/CaseVideoServiceImpl.java

@@ -5,7 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.FilePath;
-import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.common.util.ThreadUtil;
 import com.fdkankan.fusion.common.util.UploadToOssUtil;
 import com.fdkankan.fusion.common.util.VideoUtil;
 import com.fdkankan.fusion.entity.CaseEntity;
@@ -13,21 +14,17 @@ import com.fdkankan.fusion.entity.CaseVideoFolder;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.entity.CaseVideo;
 import com.fdkankan.fusion.mapper.ICaseVideoMapper;
-import com.fdkankan.fusion.request.CaseParam;
-import com.fdkankan.fusion.request.CaseVideoParam;
 import com.fdkankan.fusion.service.ICaseService;
 import com.fdkankan.fusion.service.ICaseVideoFolderService;
 import com.fdkankan.fusion.service.ICaseVideoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.apache.commons.lang3.StringUtils;
+import com.fdkankan.redis.util.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
 import java.io.IOException;
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -52,9 +49,10 @@ public class CaseVideoServiceImpl extends ServiceImpl<ICaseVideoMapper, CaseVide
     ICaseService caseService;
     @Autowired
     UploadService uploadService;
-
     @Value("${upload.query-path}")
     private String queryPath;
+    @Autowired
+    RedisUtil redisUtil;
 
     @Override
     public List<CaseVideo> getAllList(Integer folderId) {
@@ -102,25 +100,59 @@ public class CaseVideoServiceImpl extends ServiceImpl<ICaseVideoMapper, CaseVide
             sort ++;
         }
         this.saveBatch(videoList);
-
-        String mergeLocalName = VideoUtil.mergeVideo(filePathSet, FilePath.VIDEO_LOCAL_PATH);
-        if(mergeLocalName == null){
-            throw new BusinessException(ResultCode.MERGER_VIDEO_ERROR);
+        if(videoList.size() <=0){
+            return;
+        }
+        if(videoList.size() ==1){
+            videoFolder.setVideoMergeUrl(videoList.get(0).getVideoPath());
+            videoFolder.setVideoFolderCover(videoList.get(0).getVideoCover());
+            videoFolderService.updateById(videoFolder);
+            return;
         }
-        String mergeLocalPath =  FilePath.VIDEO_LOCAL_PATH +"/"+mergeLocalName;
-        String ossKey =  String.format(FilePath.VIDEO_OSS_PATH,videoFolder.getVideoFolderId()) +"/"+mergeLocalName;
-
-        String mergeLocalPathImg =  FilePath.VIDEO_LOCAL_PATH +"/"+mergeLocalName.replace(".mp4",".jpg");
-        String ossKeyImg =  String.format(FilePath.VIDEO_OSS_PATH,videoFolder.getVideoFolderId()) +"/"+mergeLocalName.replace(".mp4",".jpg");
-        uploadToOssUtil.upload(mergeLocalPath,ossKey);
-        uploadToOssUtil.upload(mergeLocalPathImg,ossKeyImg);
-
-        videoFolder.setVideoMergeUrl(queryPath + ossKey);
-        videoFolder.setVideoFolderCover(queryPath + ossKeyImg);
-        videoFolderService.updateById(videoFolder);
-        FileUtil.del(FilePath.VIDEO_LOCAL_PATH);
+        redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"10");
+        runThread(filePathSet,videoFolder);
+    }
+
+    private void runThread(LinkedHashSet<String> filePathSet,CaseVideoFolder videoFolder){
+        ThreadUtil.executorService.execute(new Runnable() {
+            @Override
+            public void run() {
+                String mergeLocalName = VideoUtil.mergeVideo(filePathSet, FilePath.VIDEO_LOCAL_PATH);
+                redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"30");
+                if(mergeLocalName == null){
+                    redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"-1");
+                    return;
+                }
+                String mergeLocalPath =  FilePath.VIDEO_LOCAL_PATH +"/"+mergeLocalName;
+                String ossKey =  String.format(FilePath.VIDEO_OSS_PATH,videoFolder.getVideoFolderId()) +"/"+mergeLocalName;
+
+                String mergeLocalPathImg =  FilePath.VIDEO_LOCAL_PATH +"/"+mergeLocalName.replace(".mp4",".jpg");
+                String ossKeyImg =  String.format(FilePath.VIDEO_OSS_PATH,videoFolder.getVideoFolderId()) +"/"+mergeLocalName.replace(".mp4",".jpg");
+                uploadToOssUtil.upload(mergeLocalPath,ossKey);
+                uploadToOssUtil.upload(mergeLocalPathImg,ossKeyImg);
+                if(!uploadToOssUtil.existKey(ossKey)&& !uploadToOssUtil.existKey(ossKeyImg)){
+                    redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"-1");
+                    return;
+                }
+                redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"70");
+
+                videoFolder.setVideoMergeUrl(queryPath + ossKey);
+                videoFolder.setVideoFolderCover(queryPath + ossKeyImg);
+                videoFolderService.updateById(videoFolder);
+                FileUtil.del(FilePath.VIDEO_LOCAL_PATH);
+                redisUtil.set(RedisKeyUtil.mergerVideoKey+videoFolder.getVideoFolderId(),"100");
+            }
+        });
     }
 
+    @Override
+    public String uploadAddVideoProgress(Integer folderId) {
+        String redisKey = RedisKeyUtil.mergerVideoKey+folderId;
+        if(redisUtil.hasKey(redisKey)){
+            return redisUtil.get(redisKey);
+        }
+        return "0";
+    }
 
     @Override
     public void deleteByFolderId(Integer videoFolderId) {