CaseVideoServiceImpl.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6. import com.fdkankan.fusion.common.ResultCode;
  7. import com.fdkankan.fusion.common.FilePath;
  8. import com.fdkankan.fusion.common.util.RedisKeyUtil;
  9. import com.fdkankan.fusion.common.util.UploadToOssUtil;
  10. import com.fdkankan.fusion.common.util.VideoUtil;
  11. import com.fdkankan.fusion.entity.CaseEntity;
  12. import com.fdkankan.fusion.entity.CaseVideoFolder;
  13. import com.fdkankan.fusion.exception.BusinessException;
  14. import com.fdkankan.fusion.entity.CaseVideo;
  15. import com.fdkankan.fusion.mapper.ICaseVideoMapper;
  16. import com.fdkankan.fusion.service.ICaseService;
  17. import com.fdkankan.fusion.service.ICaseVideoFolderService;
  18. import com.fdkankan.fusion.service.ICaseVideoService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import com.fdkankan.redis.util.RedisUtil;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.web.multipart.MultipartFile;
  26. import java.io.File;
  27. import java.io.IOException;
  28. import java.util.ArrayList;
  29. import java.util.LinkedHashSet;
  30. import java.util.List;
  31. /**
  32. * <p>
  33. * 服务实现类
  34. * </p>
  35. *
  36. * @author
  37. * @since 2022-07-29
  38. */
  39. @Service
  40. public class CaseVideoServiceImpl extends ServiceImpl<ICaseVideoMapper, CaseVideo> implements ICaseVideoService {
  41. @Autowired
  42. UploadToOssUtil uploadToOssUtil;
  43. @Autowired
  44. ICaseVideoFolderService videoFolderService;
  45. @Autowired
  46. ICaseService caseService;
  47. @Autowired
  48. UploadService uploadService;
  49. @Value("${upload.query-path}")
  50. private String queryPath;
  51. @Autowired
  52. RedisUtil redisUtil;
  53. @Override
  54. public List<CaseVideo> getAllList(Integer folderId) {
  55. if(folderId == null){
  56. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  57. }
  58. QueryWrapper<CaseVideo> wrapper = new QueryWrapper<>();
  59. wrapper.lambda().eq(CaseVideo::getFolderId,folderId);
  60. wrapper.lambda().orderByAsc(CaseVideo::getSort);
  61. wrapper.lambda().orderByAsc(CaseVideo::getCreateTime);
  62. return this.list(wrapper);
  63. }
  64. @Override
  65. public CaseVideoFolder uploadAddVideo(MultipartFile[] files, Integer folderId,Integer caseId) throws IOException {
  66. if(files.length <=0 || caseId == null){
  67. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  68. }
  69. CaseEntity caseEntity = caseService.getById(caseId);
  70. if(caseEntity == null){
  71. throw new BusinessException(ResultCode.CASE_NOT_EXIST);
  72. }
  73. CaseVideoFolder videoFolder = videoFolderService.getByIdIfNotNew(folderId,caseId);
  74. if(videoFolder == null){
  75. throw new BusinessException(ResultCode.FOLDER_NOT_EXIST);
  76. }
  77. runThread(files,videoFolder,this);
  78. return videoFolder;
  79. }
  80. private void runThread(MultipartFile[] files,CaseVideoFolder videoFolder,ICaseVideoService caseVideoService){
  81. ((Runnable) () -> {
  82. String mergeVideoUrl = null;
  83. if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
  84. mergeVideoUrl = videoFolder.getVideoMergeUrl().replace(queryPath, "/home/");
  85. uploadToOssUtil.downFormAli(videoFolder.getVideoMergeUrl().replace(queryPath, ""), mergeVideoUrl);
  86. uploadService.deleteOssUrl(videoFolder.getVideoMergeUrl());
  87. }
  88. if (StringUtils.isNotBlank(videoFolder.getVideoMergeUrl())) {
  89. uploadService.deleteOssUrl(videoFolder.getVideoFolderCover());
  90. }
  91. caseVideoService.deleteByFolderId(videoFolder.getVideoFolderId());
  92. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "10");
  93. //替换文件夹中文件
  94. List<CaseVideo> videoList = new ArrayList<>();
  95. Integer sort = 1;
  96. LinkedHashSet<String> filePathSet = new LinkedHashSet<>();
  97. LinkedHashSet<String> filePathSetAll = new LinkedHashSet<>();
  98. for (MultipartFile file : files) {
  99. String ossPath = uploadService.uploadFile(file, true, String.format(FilePath.VIDEO_OSS_PATH, videoFolder.getVideoFolderId()) + "/", filePathSet);
  100. String suffixName = ossPath.substring(ossPath.lastIndexOf("."));
  101. CaseVideo caseVideo = new CaseVideo();
  102. caseVideo.setFolderId(videoFolder.getVideoFolderId());
  103. caseVideo.setVideoPath(ossPath);
  104. caseVideo.setVideoName(file.getName());
  105. caseVideo.setVideoCover(ossPath.replace(suffixName, ".jpg"));
  106. caseVideo.setSort(sort);
  107. videoList.add(caseVideo);
  108. sort++;
  109. }
  110. caseVideoService.saveBatch(videoList);
  111. if (videoList.size() <= 0) {
  112. return;
  113. }
  114. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "20");
  115. if (StringUtils.isNotBlank(mergeVideoUrl)) {
  116. filePathSetAll.add(mergeVideoUrl);
  117. }
  118. filePathSetAll.addAll(filePathSet);
  119. String mergeLocalName = VideoUtil.mergeVideo(filePathSetAll, FilePath.VIDEO_LOCAL_PATH);
  120. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "30");
  121. if (mergeLocalName == null) {
  122. updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
  123. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "-1");
  124. return;
  125. }
  126. String mergeLocalPath = FilePath.VIDEO_LOCAL_PATH + "/" + mergeLocalName;
  127. String ossKey = String.format(FilePath.VIDEO_OSS_PATH, videoFolder.getVideoFolderId()) + "/" + mergeLocalName;
  128. String mergeLocalPathImg = FilePath.VIDEO_LOCAL_PATH + "/" + mergeLocalName.replace(".mp4", ".jpg");
  129. String ossKeyImg = String.format(FilePath.VIDEO_OSS_PATH, videoFolder.getVideoFolderId()) + "/" + mergeLocalName.replace(".mp4", ".jpg");
  130. uploadToOssUtil.uploadOss(mergeLocalPath, ossKey);
  131. uploadToOssUtil.uploadOss(mergeLocalPathImg, ossKeyImg);
  132. if (!uploadToOssUtil.existKey(ossKey) && !uploadToOssUtil.existKey(ossKeyImg)) {
  133. updateCaseVideoStatus(videoFolder.getVideoFolderId(), -1);
  134. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "-1");
  135. return;
  136. }
  137. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "70");
  138. videoFolder.setVideoMergeUrl(queryPath + ossKey);
  139. videoFolder.setVideoFolderCover(queryPath + ossKeyImg);
  140. videoFolderService.updateById(videoFolder);
  141. // FileUtil.del(FilePath.VIDEO_LOCAL_PATH);
  142. redisUtil.set(RedisKeyUtil.mergerVideoKey + videoFolder.getVideoFolderId(), "100");
  143. updateCaseVideoStatus(videoFolder.getVideoFolderId(), 1);
  144. }).run();
  145. }
  146. private void updateCaseVideoStatus(Integer folderId, Integer status) {
  147. LambdaUpdateWrapper<CaseVideo> wrapper = new LambdaUpdateWrapper<>();
  148. wrapper.in(CaseVideo::getFolderId,folderId)
  149. .set(CaseVideo::getUploadStatus,status);
  150. this.update(wrapper);
  151. LambdaUpdateWrapper<CaseVideoFolder> wrapperFolder = new LambdaUpdateWrapper<>();
  152. wrapperFolder.eq(CaseVideoFolder::getVideoFolderId,folderId)
  153. .set(CaseVideoFolder::getUploadStatus,status);
  154. videoFolderService.update(wrapperFolder);
  155. }
  156. @Override
  157. public String uploadAddVideoProgress(Integer folderId) {
  158. String redisKey = RedisKeyUtil.mergerVideoKey+folderId;
  159. if(redisUtil.hasKey(redisKey)){
  160. return redisUtil.get(redisKey);
  161. }
  162. return "0";
  163. }
  164. @Override
  165. public void deleteByFolderId(Integer videoFolderId) {
  166. LambdaQueryWrapper<CaseVideo> wrapper = new LambdaQueryWrapper<>();
  167. wrapper.eq(CaseVideo::getFolderId,videoFolderId);
  168. List<CaseVideo> list = this.list(wrapper);
  169. if(list.size() <=0){
  170. return;
  171. }
  172. for (CaseVideo caseVideo : list) {
  173. this.delete(caseVideo.getVideoId());
  174. }
  175. }
  176. @Override
  177. public void delete(Integer videoId) {
  178. CaseVideo caseVideo = this.getById(videoId);
  179. this.removeById(videoId);
  180. uploadService.deleteOssUrl(caseVideo.getVideoPath());
  181. uploadService.deleteOssUrl(caseVideo.getVideoCover());
  182. }
  183. }