浏览代码

3dtiles算法改造

dengsixing 2 年之前
父节点
当前提交
b8a912ea38

+ 23 - 21
src/main/java/com/fdkankan/contro/mq/service/impl/BuildObjServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ModelKind;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.entity.ScenePro;
@@ -159,33 +160,34 @@ public class BuildObjServiceImpl implements IBuildSceneService {
         }
 
         String path = message.getPath();
+        String laserObjFilePath = path;
         String projectNum = message.getBuildContext().get("sceneNum").toString();
         ScenePro scenePro = sceneProService.getByNum(projectNum);
-        String imagesPath = String.format(UploadFilePath.IMG_VIEW_PATH, projectNum);
-        String dataPath = String.format(UploadFilePath.DATA_VIEW_PATH, projectNum);
-        //标记激光场景是微服务上线后拍摄或是上线前拍摄(v3-代表上线前拍摄,v4-上线后拍摄),上线前拍摄的场景需要上传到v3目录,通过升级接口进行文件拷贝
         String version = "v4";
-        if(Objects.nonNull(scenePro)){
+        String ossImagePath = String.format(UploadFilePath.IMG_VIEW_PATH,  projectNum);
+        String ossDataPath = String.format(UploadFilePath.DATA_VIEW_PATH,  projectNum);
+        //如果是微服务上线之前的存量场景且未生成过obj(未升级过),需要上传到v3的目录,在函数最后调用升级接口进行文件拷贝
+        if(Objects.nonNull(scenePro) && scenePro.getIsUpgrade() != CommonStatus.YES.code().intValue()){
+            ossImagePath = String.format(ConstantFilePath.IMAGE_PATH_FORMAT, projectNum);
+            ossDataPath = String.format(ConstantFilePath.DATA_PATH_FORMAT, projectNum);
             version = "v3";
-            imagesPath = String.format(ConstantFilePath.IMAGE_PATH_FORMAT, projectNum);
-            dataPath = String.format(ConstantFilePath.DATA_PATH_FORMAT, projectNum);
         }
-        String laserObjFilePath = path;
-        String resultsPath = laserObjFilePath + File.separator + "results" + File.separator;
+        //上传obj
+        String resultsPath = path + File.separator + "results" + File.separator;
         if(this.modelKind.equals(ModelKind.DAM.code())){
-            CreateObjUtil.convertTxtToDam(laserObjFilePath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
-            CreateObjUtil.convertDamToLzma(laserObjFilePath + File.separator + "results/");
-            CreateObjUtil.convertTxtToDam(laserObjFilePath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
-            File file = new File(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma");
+            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+            CreateObjUtil.convertDamToLzma(path + File.separator + "results/");
+            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+            File file = new File(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma");
             while (!file.exists()) {
                 Thread.sleep(60000);
             }
-            fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", imagesPath + ConstantFileName.modelUUID + "_50k.dam.lzma");
-            fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", imagesPath + ConstantFileName.modelUUID + "_50k.dam");
+            fYunFileService.uploadFile(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", ossImagePath + ConstantFileName.modelUUID + "_50k.dam.lzma");
+            fYunFileService.uploadFile(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", ossImagePath + ConstantFileName.modelUUID + "_50k.dam");
         }
         if(this.modelKind.equals(ModelKind.THREE_D_TILE.code())){
             String threedtilesPath = resultsPath + ModelKind.THREE_D_TILE.code();
-            String oss3dtilesPath = imagesPath + ModelKind.THREE_D_TILE.code();
+            String oss3dtilesPath = ossImagePath + ModelKind.THREE_D_TILE.code();
             List<String> list = FileUtils.list(new File(threedtilesPath));
             if(CollUtil.isEmpty(list)){
                 log.error("3dtiles目录异常,3dtiles地址:{}", new File(path + File.separator + "results" + File.separator + ModelKind.THREE_D_TILE.code()));
@@ -193,9 +195,6 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             }
             //上传3dtiles文件
             fYunFileService.uploadFileByCommand(threedtilesPath, oss3dtilesPath);
-            //上传mesh文件
-            fYunFileService.deleteFolder(dataPath + "mesh");
-            fYunFileService.uploadFileByCommand(resultsPath + "mesh", dataPath + "mesh");
         }
 
         String texPath = laserObjFilePath + File.separator + "results" + File.separator + "tex";
@@ -205,13 +204,13 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             for (File textureFile : texFile.listFiles()) {
                 if(textureFile.getName().endsWith(".jpg")){
                     fYunFileService.uploadFile(textureFile.getAbsolutePath(),
-                            String.format(UploadFilePath.IMG_VIEW_PATH,  projectNum) + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/"+textureFile.getName());
+                        ossImagePath + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/"+textureFile.getName());
                 }
             }
         }
 
         fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + "tex/texture1.jpg",
-                String.format(UploadFilePath.IMG_VIEW_PATH,  projectNum) + "/" + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/texture1.jpg");
+                ossImagePath + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/texture1.jpg");
 
         // 拷贝结果
         log.info("开始拷贝obj文件");
@@ -219,6 +218,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
 
         File meshFolder = new File(laserObjFilePath + "/results/mesh");
 
+        //上传mesh文件
         for (File meshFile : meshFolder.listFiles()) {
             fYunFileService.uploadFile(meshFile.getAbsolutePath(), String.format(UploadFilePath.DATA_VIEW_PATH,  projectNum) + "mesh/" + meshFile.getName());
         }
@@ -235,7 +235,9 @@ public class BuildObjServiceImpl implements IBuildSceneService {
         }
 
         // 如果未升级V4,则升级V4
-        fdkkV4Service.upgradeToV4(projectNum);
+        if("v3".equals(version)){
+            fdkkV4Service.upgradeToV4(projectNum);
+        }
     }
 
 }

+ 53 - 13
src/main/java/com/fdkankan/contro/mq/service/impl/BuildV3SceneServiceImpl.java

@@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.ExpiredStatus;
+import com.fdkankan.common.constant.ModelKind;
 import com.fdkankan.common.constant.PayStatus;
 import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.common.util.FileUtils;
@@ -66,6 +67,9 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
     @Value("${model.type:#{null}}")
     private String modelSceneKind;
 
+    @Value("${model.modelKind:3dtiles}")
+    private String modelKind;
+
     @Autowired
     private RabbitMqProducer mqProducer;
 
@@ -213,17 +217,23 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
             Map<String,String> damFileHeaders = new HashMap<>();
             damFileHeaders.put("Content-Encoding","gzip");
 
-            if (!fYunFileService.getFyunType().equals(FYunTypeEnum.LOCAL.code())) {
-                // dam 文件设置请求头
-                uploadFiles.entrySet().stream().filter(entry -> FileNameUtil.extName(entry.getKey()).equals("dam"))
+            if(modelKind.equals(ModelKind.DAM.code())) {
+                if (!fYunFileService.getFyunType().equals(FYunTypeEnum.LOCAL.code())) {
+                    // dam 文件设置请求头
+                    uploadFiles.entrySet().stream()
+                        .filter(entry -> FileNameUtil.extName(entry.getKey()).equals("dam"))
                         .filter(entry -> new File(entry.getKey()).exists())
                         .forEach(entry -> {
                             // gzip压缩
-                            FileUtil.writeBytes(ZipUtil.gzip(new File(entry.getKey())), entry.getKey() + ".gzip");
+                            FileUtil.writeBytes(ZipUtil.gzip(new File(entry.getKey())),
+                                entry.getKey() + ".gzip");
                             // 重命名
-                            FileUtil.rename(new File(entry.getKey() + ".gzip"), entry.getKey(), true);
-                            fYunFileService.uploadFile(entry.getKey(), entry.getValue(), damFileHeaders);
+                            FileUtil
+                                .rename(new File(entry.getKey() + ".gzip"), entry.getKey(), true);
+                            fYunFileService
+                                .uploadFile(entry.getKey(), entry.getValue(), damFileHeaders);
                         });
+                }
             }
 
             //生成houseTypejson并上传
@@ -327,13 +337,39 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
         }
 
 
-        if ((fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1)
-                || (!ObjectUtils.isEmpty(cameraType) && (!cameraType.equals(14)))) {
-            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
-            CreateObjUtil.convertDamToLzma(path + File.separator + "results/");
-            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
-            map.put(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", imagesPath + ConstantFileName.modelUUID + "_50k.dam.lzma");
-            map.put(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", imagesPath + ConstantFileName.modelUUID + "_50k.dam");
+//        if ((fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1)
+//                || (!ObjectUtils.isEmpty(cameraType) && (!cameraType.equals(14)))) {
+//            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+//            CreateObjUtil.convertDamToLzma(path + File.separator + "results/");
+//            CreateObjUtil.convertTxtToDam(path + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+//            map.put(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", imagesPath + ConstantFileName.modelUUID + "_50k.dam.lzma");
+//            map.put(path + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", imagesPath + ConstantFileName.modelUUID + "_50k.dam");
+//        }
+        //这里适配旧算法和新算法,生成obj|上传3dtiles
+        if (fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1
+            || (!ObjectUtils.isEmpty(cameraType) && (!cameraType.equals(14)))){
+            if(this.modelKind.equals(ModelKind.DAM.code())){
+                CreateObjUtil.convertTxtToDam(resultsPath + "tex" + File.separator + "modeldata.txt", resultsPath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+                CreateObjUtil.convertDamToLzma(resultsPath + File.separator + "results/");
+                CreateObjUtil.convertTxtToDam(resultsPath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", resultsPath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+                File file = new File(resultsPath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma");
+                while (!file.exists()) {
+                    Thread.sleep(60000);
+                }
+                fYunFileService.uploadFile(resultsPath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", imagesPath + ConstantFileName.modelUUID + "_50k.dam.lzma");
+                fYunFileService.uploadFile(resultsPath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", imagesPath + ConstantFileName.modelUUID + "_50k.dam");
+            }
+            if(this.modelKind.equals(ModelKind.THREE_D_TILE.code())){
+                String threedtilesPath = resultsPath + ModelKind.THREE_D_TILE.code();
+                String oss3dtilesPath = imagesPath + ModelKind.THREE_D_TILE.code();
+                List<String> list = FileUtils.list(new File(threedtilesPath));
+                if(CollUtil.isEmpty(list)){
+                    log.error("3dtiles目录异常,3dtiles地址:{}", new File(path + File.separator + "results" + File.separator + ModelKind.THREE_D_TILE.code()));
+                    throw new Exception("3dtiles目录异常");
+                }
+                //上传3dtiles文件
+                fYunFileService.uploadFileByCommand(threedtilesPath, oss3dtilesPath);
+            }
         }
 
         CreateObjUtil.convertTxtToVisionmodeldata(resultsPath + "vision.txt", resultsPath + "vision.modeldata");
@@ -354,6 +390,10 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
 
     }
 
+    private void uploadObj(String num, String path) throws Exception {
+
+    }
+
     private JSONObject getFdageData(String dataFdagePath) {
         log.info("dataFdagePath 文件路径 :{}", dataFdagePath);
         String data = FileUtils.readFile(dataFdagePath);

+ 0 - 5
src/main/java/com/fdkankan/contro/service/impl/FdkkV4Service.java

@@ -38,11 +38,6 @@ public class FdkkV4Service {
     public void upgradeToV4(String num){
         // 如果场景在旧表中存在,则需要升级,否则不需要升级
         ScenePro scenePro = sceneProService.getByNum(num);
-        if(ObjectUtils.isEmpty(scenePro)){
-            log.error("scene_pro 表中不存在该记录,退出升级!");
-            return;
-        }
-
         String url = mainUrl + String.format(UPGRADE_TO_V4,num);
         log.info("v3场景升级v4,url:{}",url);
         ResponseEntity<Result> responseEntity = restTemplate.getForEntity(url, Result.class);