192.168.9.165 1 mese fa
parent
commit
40d4316a83

+ 9 - 0
src/main/java/com/fdkankan/scene/AppListener.java

@@ -2,6 +2,7 @@ package com.fdkankan.scene;
 
 
 
 
 import cn.hutool.system.SystemUtil;
 import cn.hutool.system.SystemUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +26,8 @@ public class AppListener implements ApplicationRunner {
     FdkkLaserConfig fdkkLaserConfig;
     FdkkLaserConfig fdkkLaserConfig;
     @Resource
     @Resource
     private WebApplicationContext applicationContext;
     private WebApplicationContext applicationContext;
+    @Autowired
+    private RedisUtil redisUtil;
 
 
     @Override
     @Override
     public void run(ApplicationArguments args) {
     public void run(ApplicationArguments args) {
@@ -43,6 +46,12 @@ public class AppListener implements ApplicationRunner {
                         shutdownApplication();
                         shutdownApplication();
                         break;
                         break;
                     }
                     }
+//                    if (redisUtil.hasKey("QUIT_JOB")) {
+//                        System.out.println("收到推出通知,准备退出 SpringBoot 服务...");
+//                        cache.delete("");
+//                        shutdownApplication();
+//                        break;
+//                    }
                     Thread.sleep(5000);
                     Thread.sleep(5000);
                 } catch (Exception e) {
                 } catch (Exception e) {
                     e.printStackTrace();
                     e.printStackTrace();

+ 12 - 10
src/main/java/com/fdkankan/scene/constant/CmdConstant.java

@@ -4,6 +4,8 @@ package com.fdkankan.scene.constant;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 
 
+import java.io.File;
+
 
 
 /**
 /**
  * Created by owen on 2020/12/31 0031 14:22
  * Created by owen on 2020/12/31 0031 14:22
@@ -23,14 +25,14 @@ public class CmdConstant {
      * @target oss目录名字
      * @target oss目录名字
      * @mergeCode 合并的场景码
      * @mergeCode 合并的场景码
      */
      */
-    public final static String OSSUTIL_UPLOAD_DIR = fdkkLaserConfig.buildCallPath + "ossupload.sh @uploadDir @target";
+    public final static String OSSUTIL_UPLOAD_DIR = fdkkLaserConfig.buildCallPath + File.separator + "ossupload.sh @uploadDir @target";
 
 
-    public final static String OSSUTIL_RM_DIR = fdkkLaserConfig.buildCallPath + "ossrm.sh @target";
+    public final static String OSSUTIL_RM_DIR = fdkkLaserConfig.buildCallPath + File.separator + "ossrm.sh @target";
 
 
     // MINIO 上传文件夹命令
     // MINIO 上传文件夹命令
-    public final static String MINIO_UTIL_UPLOAD_DIR = fdkkLaserConfig.buildCallPath + "minioupload.sh @uploadDir/ @target";
+    public final static String MINIO_UTIL_UPLOAD_DIR = fdkkLaserConfig.buildCallPath + File.separator + "minioupload.sh @uploadDir/ @target";
 
 
-    public final static String MINIO_UTIL_RM_DIR = fdkkLaserConfig.buildCallPath + "miniorm.sh  @target";
+    public final static String MINIO_UTIL_RM_DIR = fdkkLaserConfig.buildCallPath + File.separator + "miniorm.sh  @target";
 
 
     public final static String MK_LINK_DIR = "sudo ln -s /J  @Target @Link";
     public final static String MK_LINK_DIR = "sudo ln -s /J  @Target @Link";
 
 
@@ -41,16 +43,16 @@ public class CmdConstant {
 
 
 
 
     //生成模型的命令
     //生成模型的命令
-    public static final String BUILD_MODEL_COMMAND = fdkkLaserConfig.buildCallPath + "Launcher.sh  @inPath";
-    public static final String BUILD_MODEL_COMMAND_WIN = fdkkLaserConfig.buildCallPath + "Launcher.bat @inPath";
+    public static final String BUILD_MODEL_COMMAND = fdkkLaserConfig.buildCallPath + File.separator + "Launcher.sh  @inPath";
+    public static final String BUILD_MODEL_COMMAND_WIN = fdkkLaserConfig.buildCallPath + File.separator + "Launcher.bat @inPath";
 
 
 
 
-    public final static String OBJ2_TILES = fdkkLaserConfig.buildCallPath + "Obj2Tiles.sh @inPath";
-    public final static String OBJ2_TILES_WIN = fdkkLaserConfig.buildCallPath + "Obj2Tiles.bat @inPath";
+    public final static String OBJ2_TILES = fdkkLaserConfig.buildCallPath + File.separator + "Obj2Tiles.sh @inPath";
+    public final static String OBJ2_TILES_WIN = fdkkLaserConfig.buildCallPath + File.separator + "Obj2Tiles.bat @inPath";
 
 
 
 
-    public final static String POTREE_CONVERTER = fdkkLaserConfig.buildCallPath + "PotreeConverter.sh @param @inPath @outPath";
-    public final static String POTREE_CONVERTER_WIN = fdkkLaserConfig.buildCallPath + "PotreeConverter.bat @param @inPath @outPath";
+    public final static String POTREE_CONVERTER = fdkkLaserConfig.buildCallPath + File.separator + "PotreeConverter.sh @param @inPath @outPath";
+    public final static String POTREE_CONVERTER_WIN = fdkkLaserConfig.buildCallPath + File.separator + "PotreeConverter.bat @param @inPath @outPath";
 
 
 //    public final static String Potree_Converter = fdkkLaserConfig.buildCallPath + "PotreeConverter.sh layout_detect @in @out";
 //    public final static String Potree_Converter = fdkkLaserConfig.buildCallPath + "PotreeConverter.sh layout_detect @in @out";
 //    public final static String Potree_Converter_win = fdkkLaserConfig.buildCallPath + "PotreeConverter.bat layout_detect @in @out";
 //    public final static String Potree_Converter_win = fdkkLaserConfig.buildCallPath + "PotreeConverter.bat layout_detect @in @out";

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

@@ -369,9 +369,13 @@ public class OssUtil {
         return FileUtil.readUtf8String(File.separator + pathKey);
         return FileUtil.readUtf8String(File.separator + pathKey);
     }
     }
     public List<String> listFiles(String prefix, String pathKey) {
     public List<String> listFiles(String prefix, String pathKey) {
+        if(!prefix.endsWith(File.separator)){
+            prefix = prefix.concat(File.separator);
+        }
+        String finalPrefix = prefix;
         return FileUtil.loopFiles(
         return FileUtil.loopFiles(
                 FdkkLaserConfig.getProfile(prefix) + File.separator + pathKey).stream().map(file->{
                 FdkkLaserConfig.getProfile(prefix) + File.separator + pathKey).stream().map(file->{
-            return file.getAbsolutePath().replace(FdkkLaserConfig.getProfile(prefix) + File.separator, "");
+            return file.getAbsolutePath().replace(FdkkLaserConfig.getProfile(finalPrefix), "");
         }).collect(Collectors.toList());
         }).collect(Collectors.toList());
     }
     }
 
 

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

@@ -1275,7 +1275,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
 
 
-        CmdBuildUtil.BuildModelCommand(fdkkLaserConfig.buildCallPath, target);
+        CmdBuildUtil.BuildModelCommand(target);
 
 
         String uploadJsonPath= target + File.separator + "results" +File.separator+"upload.json";
         String uploadJsonPath= target + File.separator + "results" +File.separator+"upload.json";
         Thread.sleep(2000);
         Thread.sleep(2000);
@@ -2095,7 +2095,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
         }
         //下载data.fdage
         //下载data.fdage
         FileUtil.copy(path.concat(File.separator).concat("capture").concat(File.separator).concat("data.fdage"), capturePath.concat(File.separator).concat("data.fdage"), true);
         FileUtil.copy(path.concat(File.separator).concat("capture").concat(File.separator).concat("data.fdage"), capturePath.concat(File.separator).concat("data.fdage"), true);
-        CmdBuildUtil.BuildModelCommand(fdkkLaserConfig.buildCallPath, target);
+        CmdBuildUtil.BuildModelCommand(target);
 
 
         //读取upload文件,获取需要上传的文件
         //读取upload文件,获取需要上传的文件
         JSONArray array = ComputerUtil.getUploadArray(resultPath + "/upload.json", this.maxCheckTimes, this.waitTime);
         JSONArray array = ComputerUtil.getUploadArray(resultPath + "/upload.json", this.maxCheckTimes, this.waitTime);

+ 36 - 7
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -26,6 +26,7 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.util.CmdBuildUtil;
 import com.fdkankan.scene.util.CmdBuildUtil;
+import com.fdkankan.scene.util.SystemUtil;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.model.utils.ComputerUtil;
 import com.fdkankan.model.utils.ComputerUtil;
 import com.fdkankan.model.utils.ConvertUtils;
 import com.fdkankan.model.utils.ConvertUtils;
@@ -927,7 +928,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             sceneAsynOperLogService.save(sceneAsynOperLog);
             sceneAsynOperLogService.save(sceneAsynOperLog);
             try {
             try {
                 //调用算法,不同的类型调用不同的算法
                 //调用算法,不同的类型调用不同的算法
-                CmdBuildUtil.BuildModelCommand(fdkkLaserConfig.buildCallPath, path);
+                CmdBuildUtil.BuildModelCommand(path);
 
 
                 //算法计算完后,生成压缩文件,上传到oss
                 //算法计算完后,生成压缩文件,上传到oss
                 uploadFileofterBuildDamModel(path, filePath, num, bucket);
                 uploadFileofterBuildDamModel(path, filePath, num, bucket);
@@ -1059,7 +1060,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             try {
             try {
                 //调用算法
                 //调用算法
                 log.info("上传3dtiles模型开始, num:{}, targetPath:{}", num, path);
                 log.info("上传3dtiles模型开始, num:{}, targetPath:{}", num, path);
-                CmdBuildUtil.Obj2Tiles(fdkkLaserConfig.buildCallPath, path);
+                CmdBuildUtil.Obj2Tiles(path);
                 log.info("上传3dtiles模型结束, num:{}, targetPath:{}", num, path);
                 log.info("上传3dtiles模型结束, num:{}, targetPath:{}", num, path);
 
 
                 //检测计算结果
                 //检测计算结果
@@ -1331,18 +1332,46 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     private String downloadModel43dtiles(String num, String bucket, ScenePlusExt scenePlusExt, SceneEditInfo sceneEditInfo){
     private String downloadModel43dtiles(String num, String bucket, ScenePlusExt scenePlusExt, SceneEditInfo sceneEditInfo){
 
 
         //下载mesh到本地
         //下载mesh到本地
-        String meshOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "mesh/";
-        String meshLocalPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num);
+        String meshOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "mesh" + File.separator;
+        String meshLocalPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "mesh" + File.separator;
         String zipName = num + "_mesh.zip";
         String zipName = num + "_mesh.zip";
         String zipFilePath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + zipName;
         String zipFilePath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + zipName;
+        List<String> keys = ossUtil.listFiles(bucket, meshOssPath);
         //下载
         //下载
-        ossUtil.downloadFile(bucket, meshOssPath, meshLocalPath);
+        //下载
+        keys.stream().filter(v->{
+            if((v.contains("lod_") && !v.contains("lod_0")) || v.endsWith(File.separator)){
+                return false;
+            }
+            return true;
+        }).forEach(v->{
+            ossUtil.downloadFile(bucket, v, v.replace(SystemUtil.transPath(meshOssPath), meshLocalPath));
+        });
+        String meshJsonPath = meshLocalPath + "mesh.json";
+        if(FileUtil.exist(meshJsonPath)){
+            JSONObject meshJson = JSON.parseObject(FileUtil.readUtf8String(meshJsonPath));
+            JSONArray floors = meshJson.getJSONArray("floors");
+            for (Object floor : floors) {
+                JSONObject floorObj = (JSONObject)floor;
+                JSONArray lods = floorObj.getJSONArray("lods");
+                List<Object> list = lods.stream().filter(v -> {
+                    JSONObject lodObj = (JSONObject) v;
+                    String name = lodObj.getString("name");
+                    if ("lod_0".equals(name)) {
+                        return true;
+                    }
+                    return false;
+                }).collect(Collectors.toList());
+                floorObj.put("lods", list);
+            }
+            FileUtil.writeUtf8String(meshJson.toJSONString(), meshJsonPath);
+        }
         //打包
         //打包
-        ZipUtil.zip(meshLocalPath.concat("mesh") ,zipFilePath);
+        ZipUtil.zip(meshLocalPath ,zipFilePath);
         //上传压缩包
         //上传压缩包
         ossUtil.uploadFile(bucket,"downloads/extras/" + zipName, zipFilePath, false);
         ossUtil.uploadFile(bucket,"downloads/extras/" + zipName, zipFilePath, false);
         //删除本地文件
         //删除本地文件
-        FileUtil.del(meshLocalPath.concat("mesh"));
+        FileUtil.del(meshLocalPath);
         FileUtil.del(zipFilePath);
         FileUtil.del(zipFilePath);
         String url = "downloads/extras/" + zipName;
         String url = "downloads/extras/" + zipName;
         return url;
         return url;

+ 4 - 4
src/main/java/com/fdkankan/scene/util/CmdBuildUtil.java

@@ -53,7 +53,7 @@ public class CmdBuildUtil {
         }
         }
     }
     }
 
 
-    public static void BuildModelCommand(String buildCallPath, String inPath) {
+    public static void BuildModelCommand(String inPath) {
         String buildModelCommandCmd = "";
         String buildModelCommandCmd = "";
         if (CmdBuildUtil.OS.isLinux()) {
         if (CmdBuildUtil.OS.isLinux()) {
             buildModelCommandCmd = BASH + CmdConstant.BUILD_MODEL_COMMAND
             buildModelCommandCmd = BASH + CmdConstant.BUILD_MODEL_COMMAND
@@ -61,21 +61,21 @@ public class CmdBuildUtil {
             CmdUtils.callLineSh(buildModelCommandCmd);
             CmdUtils.callLineSh(buildModelCommandCmd);
 
 
         } else {
         } else {
-            buildModelCommandCmd = buildCallPath + File.separator + CmdConstant.BUILD_MODEL_COMMAND_WIN
+            buildModelCommandCmd = CmdConstant.BUILD_MODEL_COMMAND_WIN
                     .replace("@inPath", inPath);
                     .replace("@inPath", inPath);
             CmdUtils.callLineWin(buildModelCommandCmd);
             CmdUtils.callLineWin(buildModelCommandCmd);
 
 
         }
         }
     }
     }
 
 
-    public static void Obj2Tiles(String buildCallPath, String inPath) {
+    public static void Obj2Tiles(String inPath) {
         String checkLaserCmd = "";
         String checkLaserCmd = "";
         if (CmdBuildUtil.OS.isLinux()) {
         if (CmdBuildUtil.OS.isLinux()) {
             checkLaserCmd = BASH + CmdConstant.OBJ2_TILES
             checkLaserCmd = BASH + CmdConstant.OBJ2_TILES
                     .replace("@inPath", inPath);
                     .replace("@inPath", inPath);
             CmdUtils.callLineSh(checkLaserCmd);
             CmdUtils.callLineSh(checkLaserCmd);
         } else {
         } else {
-            checkLaserCmd = buildCallPath + File.separator + CmdConstant.OBJ2_TILES_WIN
+            checkLaserCmd = CmdConstant.OBJ2_TILES_WIN
                     .replace("@inPath", inPath);
                     .replace("@inPath", inPath);
             CmdUtils.callLineWin(checkLaserCmd);
             CmdUtils.callLineWin(checkLaserCmd);
 
 

+ 11 - 0
src/main/java/com/fdkankan/scene/util/SystemUtil.java

@@ -0,0 +1,11 @@
+package com.fdkankan.scene.util;
+
+import java.io.File;
+
+public class SystemUtil {
+
+    public static String transPath(String path) {
+        return path.replace("/", File.separator);
+    }
+
+}