浏览代码

生成floorplan.json

dsx 2 年之前
父节点
当前提交
b9b20e8231

+ 14 - 0
src/main/java/com/fdkankan/contro/mq/service/ICommonService.java

@@ -0,0 +1,14 @@
+package com.fdkankan.contro.mq.service;
+
+public interface ICommonService {
+
+    /**
+     * 上传计算结果文件
+     * @param num
+     * @param dataSource
+     * @param version
+     */
+    public void uploadBuildResultData(String num, String dataSource, String version);
+
+    public void uploadFloorplanJson(String num, String dataSource) throws Exception;
+}

+ 6 - 1
src/main/java/com/fdkankan/contro/mq/service/impl/BuildObjServiceImpl.java

@@ -10,6 +10,7 @@ import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.entity.SceneProEdit;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
+import com.fdkankan.contro.mq.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
@@ -72,10 +73,12 @@ public class BuildObjServiceImpl implements IBuildSceneService {
     @Autowired
     private ISceneProEditService sceneProEditService;
 
-
     @Autowired
     private IScenePlusService scenePlusService;
 
+    @Autowired
+    private ICommonService commonService;
+
     @Override
     public void buildScenePre(BuildSceneCallMessage message) {
         boolean success = false;
@@ -219,6 +222,8 @@ public class BuildObjServiceImpl implements IBuildSceneService {
 
         fdkkLaserService.pushBuildStatusToLaserSystem(projectNum, laserObjFilePath + "/laserData/mesh");
 
+        //生成floorplan.json
+        commonService.uploadFloorplanJson(projectNum, laserObjFilePath);
 
         if(!ObjectUtils.isEmpty(scenePro)){
             LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<ScenePro>()

+ 9 - 1
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -19,6 +19,7 @@ import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.bean.SceneJsonBean;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
+import com.fdkankan.contro.mq.service.ICommonService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.vo.SceneEditControlsVO;
 import com.fdkankan.fyun.config.FYunFileConfig;
@@ -30,6 +31,7 @@ import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.enums.ModelTypeEnums;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.model.utils.CreateObjUtil;
+import com.fdkankan.model.utils.FloorPlanUserUtil;
 import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.push.config.PushMessageConfig;
 import com.fdkankan.push.utils.PushMsgUtil;
@@ -118,6 +120,9 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
     private ICompanyService companyService;
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
+    @Autowired
+    private ICommonService commonService;
+
 
     @Override
     public void buildScenePre(BuildSceneCallMessage message) {
@@ -292,6 +297,9 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             boolean existHouseType = this.uploadHouseTypeJson(sceneCode, scenePlusExt.getDataSource());
             scenePlus.setHouseType(existHouseType ? CommonStatus.YES.code().intValue() : CommonStatus.NO.code().intValue());
 
+            //生成floorpan.json
+            commonService.uploadFloorplanJson(sceneCode, scenePlusExt.getDataSource());
+
             //重置异步操作记录
             this.removeSceneAsynOperLog(sceneCode);
 
@@ -471,7 +479,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         if(!new File("/mnt/4Dkankan/scene/data" + File.separator + "data" + projectNum).exists()){
             FileUtil.mkdir("/mnt/4Dkankan/scene/data" + File.separator + "data" + projectNum);
         }
-        map.put(resultsPath + "floorplan.json", dataViewPath + "floor.json");
+//        map.put(resultsPath + "floorplan.json", dataViewPath + "floor.json");
         map.put(resultsPath + "floorplan_cad.json", dataViewPath + "floorplan_cad.json");
         map.put(path + File.separator + "capture/stitch_params.txt", dataViewPath + "stitch_params.txt");
         map.put(path + File.separator + "capture/Up.xml", dataViewPath + "Up.xml");

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

@@ -398,7 +398,7 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
         log.info("数据转换完成:" + projectNum);
 
         FileUtil.touch("/mnt/4Dkankan/scene/data" + File.separator + "data" + projectNum);
-        map.put(resultsPath + "floorplan.json", dataViewPath + "floor.json");
+//        map.put(resultsPath + "floorplan.json", dataViewPath + "floor.json");
         map.put(resultsPath + "floorplan_cad.json", dataViewPath + "floorplan_cad.json");
         map.put(path + File.separator + "capture/stitch_params.txt", dataViewPath + "stitch_params.txt");
         map.put(path + File.separator + "capture/Up.xml", dataViewPath + "Up.xml");

+ 96 - 0
src/main/java/com/fdkankan/contro/mq/service/impl/CommonServiceImpl.java

@@ -0,0 +1,96 @@
+package com.fdkankan.contro.mq.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.contro.mq.service.ICommonService;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.model.utils.FloorPlanUserUtil;
+import com.fdkankan.model.utils.SceneUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class CommonServiceImpl implements ICommonService {
+
+    @Autowired
+    private FYunFileServiceInterface fYunFileServiceInterface;
+
+
+    @Override
+    public void uploadBuildResultData(String num, String dataSource, String version) {
+
+        Map<String, String> uploadMap = new HashMap<>();
+
+        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
+
+        //上传caches/images
+        String localCachesImagePath = dataSource + "/caches/images/";
+        String ossCachesImagePath = ossResultPath + "caches/images/";
+        //先清除旧的全景图
+        fYunFileServiceInterface.deleteFolder(ossCachesImagePath);
+        if(FileUtil.exist(localCachesImagePath)){
+            List<String> imagesList = FileUtil.listFileNames(localCachesImagePath);
+            if(CollUtil.isNotEmpty(imagesList)){
+                String ossVisionPath = String.format(UploadFilePath.IMG_VIEW_PATH, num) + "vision.txt";
+                String visionPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "vision.txt";
+                fYunFileServiceInterface.downloadFile(ossVisionPath, visionPath);
+                List<String> panoramaImageList = SceneUtil.getPanoramaImageList(visionPath);
+                imagesList.stream().forEach(fileName -> {
+                    if (panoramaImageList.contains(fileName)) {
+                        String srcPath = localCachesImagePath + fileName;
+                        String ossPath = ossCachesImagePath + fileName;
+                        uploadMap.put(srcPath, ossPath);
+                    }
+                });
+            }
+        }
+
+        //上传project.json
+        String localProjectJsonPath = dataSource + "/project.json";
+        String ossProjectJsonPath = ossResultPath + "project.json";
+        if(FileUtil.exist(localProjectJsonPath)){
+            uploadMap.put(localProjectJsonPath, ossProjectJsonPath);
+        }
+
+        //上传data.json
+        String localDataJsonPath = dataSource + "/data.json";
+        String ossDataJsonPath = ossResultPath + "data.json";
+        if(FileUtil.exist(localDataJsonPath)){
+            uploadMap.put(localDataJsonPath, ossDataJsonPath);
+        }
+
+        //开始上传
+        fYunFileServiceInterface.uploadMulFiles(uploadMap);
+    }
+
+    @Override
+    public void uploadFloorplanJson(String num, String dataSource) throws Exception{
+        String floorPlanCardFilePath = dataSource + File.separator + "results/floorplan_cad.json";
+        if (!new File(floorPlanCardFilePath).exists()) {
+            log.error("floorplan_cad.json 文件不存在,文件路径:{}", floorPlanCardFilePath);
+            throw new Exception("floorplan_cad.json 文件不存在,文件路径:" + floorPlanCardFilePath);
+        }
+        JSONObject json = FloorPlanUserUtil.createFloorPlanUserJson(floorPlanCardFilePath);
+        if(Objects.isNull(json)){
+            log.error("生成floorplan.json失败,cadPath:", floorPlanCardFilePath);
+            throw new Exception("生成floorplan.json失败,cadPath:" + floorPlanCardFilePath);
+
+        }
+        String hourseTypeJsonPath = String.format(UploadFilePath.USER_VIEW_PATH, num) + "floorplan.json";
+        fYunFileServiceInterface.uploadFile(json.toJSONString().getBytes(), hourseTypeJsonPath);
+        hourseTypeJsonPath = String.format(UploadFilePath.USER_EDIT_PATH, num) + "floorplan.json";
+        fYunFileServiceInterface.uploadFile(json.toJSONString().getBytes(), hourseTypeJsonPath);
+    }
+}