Selaa lähdekoodia

Merge remote-tracking branch 'origin/feature-local-jg' into feature-local-jg

dsx 2 vuotta sitten
vanhempi
commit
9c1787bc99

+ 1 - 0
src/main/java/com/fdkankan/scene/constant/ConstantFileLocPath.java

@@ -6,5 +6,6 @@ package com.fdkankan.scene.constant;
  */
 public class ConstantFileLocPath {
     public static final String SCENE_DATA_PATH_V4 = "/scene_v4/%s/data/";
+    public static final String SCENE_USER_PATH_V4 = "/scene_v4/%s/user/";
 
 }

+ 2 - 1
src/main/java/com/fdkankan/scene/oss/OssUtil.java

@@ -13,6 +13,7 @@ import org.springframework.util.Base64Utils;
 import java.io.File;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystemException;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.stream.Collectors;
@@ -365,7 +366,7 @@ public class OssUtil {
     }
 
 
-    public void deleteObject(String keyName) {
+    public void deleteObject(String keyName) throws FileSystemException {
         if (FdkkLaserConfig.isBucket()) {
             if (FdkkLaserConfig.isLocalization()) {
                 minioOssTemplate.deleteObject(keyName);

+ 9 - 2
src/main/java/com/fdkankan/scene/service/impl/BoxModelServiceImpl.java

@@ -17,6 +17,7 @@ import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.ComputerUtil;
 import com.fdkankan.scene.bean.BoxModelBean;
+import com.fdkankan.scene.constant.ConstantFileLocPath;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
@@ -36,6 +37,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.FileSystemException;
 import java.util.*;
 
 /**
@@ -76,7 +78,8 @@ public class BoxModelServiceImpl implements IBoxModelService {
         if(!FileUtils.checkFileSizeIsLimit(file.getSize(), 5, "M")){
             throw new BusinessException(ErrorCode.FAILURE_CODE_7023, "5M");
         }
-        String path = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "boxModel/" + sid + "/";
+        String path = String.format(scenePlusExt.getDataSource()+ ConstantFileLocPath.SCENE_USER_PATH_V4, num)+ "boxModel/" + sid + "/";
+
         String zipPath = path + file.getOriginalFilename();
         String srcPath = path + "data/";
         String glbPath = path + sid + ".glb";
@@ -192,7 +195,11 @@ public class BoxModelServiceImpl implements IBoxModelService {
             //删除资源文件
             if(CollUtil.isNotEmpty(deleteFile))
                 deleteFile.stream().forEach(key -> {
-                    ossUtil.deleteObject(key);
+                    try{
+                        ossUtil.deleteObject(key);
+                    }catch (FileSystemException e){
+
+                    }
                 });
         }else{
             //更新

+ 6 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneAsynOperLogServiceImpl.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.scene.vo.SceneAsynOperLogParamVO;
 import com.fdkankan.web.response.ResultData;
 import java.io.IOException;
+import java.nio.file.FileSystemException;
 import java.util.Calendar;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -105,7 +106,11 @@ public class SceneAsynOperLogServiceImpl extends ServiceImpl<ISceneAsynOperLogMa
 
         deleteList.parallelStream().forEach(item -> {
             if(StrUtil.isNotEmpty(item.getUrl())){
-                ossUtil.deleteObject(item.getUrl());
+                try{
+                    ossUtil.deleteObject(item.getUrl());
+                }catch (FileSystemException e){
+
+                }
             }
         });
 

+ 1 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneDownloadLogServiceImpl.java

@@ -135,6 +135,7 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
                     new LambdaUpdateWrapper<SceneDownloadLog>()
                             .eq(SceneDownloadLog::getSceneNum,num)
                             .set(SceneDownloadLog::getDownloadUrl,downLoadProgressBean.getUrl())
+                            .set(SceneDownloadLog::getStatus,1)
             );
             downLoadProgressBean.setUrl(this.publicUrl+":"+serviceConfig.getServerPort()+"/profile" +downLoadProgressBean.getUrl());
         }

+ 22 - 5
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -3,6 +3,7 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -29,6 +30,7 @@ import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneEditInfoMapper;
 import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.*;
+import com.fdkankan.scene.util.MergeVideoUtil;
 import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.response.ResultData;
 import com.google.common.collect.Lists;
@@ -42,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystemException;
 import java.util.*;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -210,7 +213,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
 
         //发布马赛克列表
-//        sceneJson.setMosaicList(this.getMosaicList(num));
+        sceneJson.setMosaicList(this.getMosaicList(num));
 
         //处理热点数据,生成hot.json
         this.publicHotData(num, sceneEditInfo, bucket);
@@ -233,7 +236,13 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
         //删除发布数据中的user目录
         String publicUserPath = String.format(UploadFilePath.USER_VIEW_PATH, num);
-        ossUtil.deleteObject(publicUserPath);
+        try{
+            ossUtil.deleteObject(publicUserPath);
+        }catch (IORuntimeException e){
+            if (e.getMessage().contains("另一个程序正在使用此文件,进程无法访问")){
+                throw new BusinessException(ErrorCode.FAILURE_CODE_5071);
+            }
+        }
 
         //复制编辑目录到发布目录
         String editPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
@@ -1916,7 +1925,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //删除oss文件
         String imgEditPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
         thumbNameList.stream().forEach(thumbName->{
-            ossUtil.deleteObject(imgEditPath + "panorama_edit/" + thumbName);
+            try{
+                ossUtil.deleteObject(imgEditPath + "panorama_edit/" + thumbName);
+            }catch (FileSystemException e){
+
+            }
         });
 
     }
@@ -2422,9 +2435,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     private void transferToFlv(String num, String fileName, String bucket) throws Exception {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
 
         String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-        String localImagesPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
+        String localImagesPath = String.format(scenePlusExt.getDataSource()+ConstantFileLocPath.SCENE_DATA_PATH_V4, num);
         String localFilePath = localImagesPath + fileName;
 
         File targetFile = new File(localImagesPath);
@@ -2442,11 +2458,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         ossUtil.downloadFile(filePath, localImagesPath + fileName);
 
         //视频格式转换
-        CreateObjUtil.mp4ToFlv(localFilePath, localFilePath.replace("mp4", "flv"));
+        MergeVideoUtil.ffmpegFormatFlv(localFilePath, localFilePath.replace("mp4", "flv"));
 
         //上传
         String flvFileName = fileName.replace("mp4", "flv");
         ossUtil.uploadFile(userEditPath+flvFileName, localFilePath.replace("mp4", "flv"), false);
+        FileUtil.del(localFilePath);
     }
 
     @Override

+ 1 - 0
src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java

@@ -319,6 +319,7 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         //生成编辑显示控制表
         SceneEditControls sceneEditControls = new SceneEditControls();
         sceneEditControls.setEditInfoId(sceneEditInfo.getId());
+        sceneEditControls.setShowMap(0);
         sceneEditControlsService.save(sceneEditControls);
         sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
 

+ 22 - 1
src/main/java/com/fdkankan/scene/util/MergeVideoUtil.java

@@ -110,7 +110,28 @@ public class MergeVideoUtil {
         }
         return true;
     }
-
+    /**
+     * @param sourceFile 原文件路径
+     * @param thumbFile   目标文件路径
+     * @param thumbWidth  宽度
+     * @param thumbHigh   高度
+     * @return ffmpeg -i bb.mp4 -y -vframes 1 -vf scale=100:100/a thumb.jpg
+     */
+    public static boolean ffmpegFormatFlv(String sourceFile, String targetFile) {
+        String cmd = MergeVideoUtil.ffmpeg + "  -i " + sourceFile + " -c:v copy  -c:a copy  " + targetFile + " -y";
+        try {
+            MergeVideoUtil.execCommand(cmd);
+        } catch (IOException e) {
+            e.printStackTrace();
+            MergeVideoUtil.log.error(" 转换flv失败-{}", e.getMessage());
+            return false;
+        }
+        File file = new File(targetFile);
+        if (!file.exists()) {
+            return false;
+        }
+        return true;
+    }
     public static Boolean mergeVideo(List<String> fromVideoFileList, String newVideoFile) {
         try {
             List<String> voidTS = new ArrayList<>();

+ 4 - 4
src/main/resources/application-standAloneProd.yml

@@ -107,12 +107,12 @@ download:
     exe-name: start-browser.bat
     exe-content: | # | 表示不转义特殊字符
       taskkill /f /t /im http.exe
-      start http://127.0.0.1:9000/spg.html?m=%s
-      http.exe -nc -p 9000 -r wwwroot
+      start http://127.0.0.1:5001/spg.html?m=%s
+      http.exe -nc -p 5001 -r wwwroot
     exe-content-v3: | # | 表示不转义特殊字符
       taskkill /f /t /im http.exe
-      start http://127.0.0.1:9000/spc.html?m=%s
-      http.exe -nc -p 9000 -r wwwroot
+      start http://127.0.0.1:5001/spc.html?m=%s
+      http.exe -nc -p 5001 -r wwwroot
 url:
   v3:
     getInfo: