|
@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
@@ -84,89 +85,84 @@ public class CaseVideoServiceImpl extends ServiceImpl<ICaseVideoMapper, CaseVide
|
|
|
if(videoFolder == null){
|
|
|
throw new BusinessException(ResultCode.FOLDER_NOT_EXIST);
|
|
|
}
|
|
|
-
|
|
|
- runThread(files,videoFolder,this);
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "0");
|
|
|
+ //替换文件夹中文件
|
|
|
+ List<CaseVideo> videoList = new ArrayList<>();
|
|
|
+ Integer sort = 1;
|
|
|
+ LinkedHashSet<String> filePathSet = new LinkedHashSet<>();
|
|
|
+ for (MultipartFile file : files) {
|
|
|
+ String ossPath = uploadService.uploadFile(file, true, String.format(FilePath.VIDEO_OSS_PATH, videoFolder.getVideoFolderId()) + "/", filePathSet);
|
|
|
+ String suffixName = ossPath.substring(ossPath.lastIndexOf("."));
|
|
|
+
|
|
|
+ CaseVideo caseVideo = new CaseVideo();
|
|
|
+ caseVideo.setFolderId(videoFolder.getVideoFolderId());
|
|
|
+ caseVideo.setVideoPath(ossPath);
|
|
|
+ caseVideo.setVideoName(file.getName());
|
|
|
+ caseVideo.setVideoCover(ossPath.replace(suffixName, ".jpg"));
|
|
|
+ caseVideo.setSort(sort);
|
|
|
+ videoList.add(caseVideo);
|
|
|
+ sort++;
|
|
|
+ }
|
|
|
+ runThread(videoList,filePathSet,videoFolder,this);
|
|
|
return videoFolder;
|
|
|
}
|
|
|
+ @Async
|
|
|
+ public void runThread(List<CaseVideo> videoList, LinkedHashSet<String> filePathSet,CaseVideoFolder videoFolder,ICaseVideoService caseVideoService){
|
|
|
+ try {
|
|
|
+ LinkedHashSet<String> filePathSetAll = new LinkedHashSet<>();
|
|
|
+ String mergeVideoUrl = null;
|
|
|
+ if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
|
|
|
+ mergeVideoUrl = videoFolder.getVideoMergeUrl().replace(queryPath, "/home/");
|
|
|
+ uploadToOssUtil.downFormAli(videoFolder.getVideoMergeUrl().replace(queryPath, ""), mergeVideoUrl);
|
|
|
+ uploadService.deleteOssUrl(videoFolder.getVideoMergeUrl());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
|
|
|
+ uploadService.deleteOssUrl(videoFolder.getVideoFolderCover());
|
|
|
+ }
|
|
|
+ this.deleteByFolderId(videoFolder.getVideoFolderId());
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "10");
|
|
|
+ caseVideoService.saveBatch(videoList);
|
|
|
+ if (videoList.size() <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- private void runThread(MultipartFile[] files,CaseVideoFolder videoFolder,ICaseVideoService caseVideoService){
|
|
|
- new Thread(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- try {
|
|
|
- String mergeVideoUrl = null;
|
|
|
- if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
|
|
|
- mergeVideoUrl = videoFolder.getVideoMergeUrl().replace(queryPath, "/home/");
|
|
|
- uploadToOssUtil.downFormAli(videoFolder.getVideoMergeUrl().replace(queryPath, ""), mergeVideoUrl);
|
|
|
- uploadService.deleteOssUrl(videoFolder.getVideoMergeUrl());
|
|
|
- }
|
|
|
- if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
|
|
|
- uploadService.deleteOssUrl(videoFolder.getVideoFolderCover());
|
|
|
- }
|
|
|
- caseVideoService.deleteByFolderId(videoFolder.getVideoFolderId());
|
|
|
- redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "10");
|
|
|
- //替换文件夹中文件
|
|
|
- List<CaseVideo> videoList = new ArrayList<>();
|
|
|
- Integer sort = 1;
|
|
|
- LinkedHashSet<String> filePathSet = new LinkedHashSet<>();
|
|
|
- LinkedHashSet<String> filePathSetAll = new LinkedHashSet<>();
|
|
|
- for (MultipartFile file : files) {
|
|
|
- String ossPath = uploadService.uploadFile(file, true, String.format(FilePath.VIDEO_OSS_PATH, videoFolder.getVideoFolderId()) + "/", filePathSet);
|
|
|
- String suffixName = ossPath.substring(ossPath.lastIndexOf("."));
|
|
|
-
|
|
|
- CaseVideo caseVideo = new CaseVideo();
|
|
|
- caseVideo.setFolderId(videoFolder.getVideoFolderId());
|
|
|
- caseVideo.setVideoPath(ossPath);
|
|
|
- caseVideo.setVideoName(file.getName());
|
|
|
- caseVideo.setVideoCover(ossPath.replace(suffixName, ".jpg"));
|
|
|
- caseVideo.setSort(sort);
|
|
|
- videoList.add(caseVideo);
|
|
|
- sort++;
|
|
|
- }
|
|
|
- caseVideoService.saveBatch(videoList);
|
|
|
- if (videoList.size() <= 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "20");
|
|
|
- if (StringUtils.isNotBlank(mergeVideoUrl)) {
|
|
|
- filePathSetAll.add(mergeVideoUrl);
|
|
|
- }
|
|
|
- filePathSetAll.addAll(filePathSet);
|
|
|
- String mergeLocalName = VideoUtil.mergeVideo(filePathSetAll, FilePath.VIDEO_LOCAL_PATH);
|
|
|
- redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "30");
|
|
|
- if (mergeLocalName == null) {
|
|
|
- updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
- 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.uploadOss(mergeLocalPath, ossKey);
|
|
|
- uploadToOssUtil.uploadOss(mergeLocalPathImg, ossKeyImg);
|
|
|
- if (!uploadToOssUtil.existKey(ossKey) && !uploadToOssUtil.existKey(ossKeyImg)) {
|
|
|
- updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
- 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);
|
|
|
- updateCaseVideoStatus(videoFolder.getVideoFolderId(), 1);
|
|
|
- redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "100");
|
|
|
- }catch (Exception e){
|
|
|
- updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
- redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "-1");
|
|
|
- log.info("合并视频出错:",e);
|
|
|
- }
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "20");
|
|
|
+ if (StringUtils.isNotBlank(mergeVideoUrl)) {
|
|
|
+ filePathSetAll.add(mergeVideoUrl);
|
|
|
+ }
|
|
|
+ filePathSetAll.addAll(filePathSet);
|
|
|
+ String mergeLocalName = VideoUtil.mergeVideo(filePathSetAll, FilePath.VIDEO_LOCAL_PATH);
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "30");
|
|
|
+ if (mergeLocalName == null) {
|
|
|
+ updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "-1");
|
|
|
+ return;
|
|
|
}
|
|
|
- }).start();
|
|
|
+ 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.uploadOss(mergeLocalPath, ossKey);
|
|
|
+ uploadToOssUtil.uploadOss(mergeLocalPathImg, ossKeyImg);
|
|
|
+ if (!uploadToOssUtil.existKey(ossKey) && !uploadToOssUtil.existKey(ossKeyImg)) {
|
|
|
+ updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
+ 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);
|
|
|
+ updateCaseVideoStatus(videoFolder.getVideoFolderId(), 1);
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "100");
|
|
|
+ }catch (Exception e){
|
|
|
+ updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
|
|
|
+ redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "-1");
|
|
|
+ log.info("合并视频出错:",e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void updateCaseVideoStatus(Integer folderId, Integer status) {
|