소스 검색

支持圆周率计算

dengsixing 8 달 전
부모
커밋
5be3993f20

+ 7 - 1
src/main/java/com/fdkankan/contro/entity/ScenePlus.java

@@ -12,7 +12,7 @@ import java.util.Date;
  * 场景主表
  * 场景主表
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2022-03-16
  * @since 2022-03-16
  */
  */
 @Getter
 @Getter
@@ -98,6 +98,12 @@ public class ScenePlus implements Serializable {
     private Integer houseType;
     private Integer houseType;
 
 
     /**
     /**
+     * 第三方相机类型(yzl-圆周率)
+     */
+    @TableField("three_cam_type")
+    private String threeCamType;
+
+    /**
      * 创建时间
      * 创建时间
      */
      */
     @TableField("create_time")
     @TableField("create_time")

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

@@ -21,6 +21,7 @@ import com.fdkankan.contro.constant.UserEditDataType;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.*;
+import com.fdkankan.contro.util.HttpUtilExt;
 import com.fdkankan.fyun.config.FYunFileConfig;
 import com.fdkankan.fyun.config.FYunFileConfig;
 import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
@@ -159,10 +160,15 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         boolean success = false;
         boolean success = false;
         String num = message.getSceneNum();
         String num = message.getSceneNum();
         String batchId = (String) message.getExt().get("batchId");
         String batchId = (String) message.getExt().get("batchId");
+        String threeCamType = (String) message.getExt().get("threeCamType");
         try {
         try {
 
 
             //如果场景原始资源上传批次id不为空,则需要下载批次文件上传到oss目录
             //如果场景原始资源上传批次id不为空,则需要下载批次文件上传到oss目录
-            this.downloadOrigFile(batchId, message.getPath());
+            if(StrUtil.isNotEmpty(threeCamType) && "yzl".equals(threeCamType)){
+                this.downloadOrigFile4Yzl(batchId, message.getPath());
+            }else{
+                this.downloadOrigFile(batchId, message.getPath());
+            }
 
 
             //重新计算时需要删除文件夹,否知使用缓存
             //重新计算时需要删除文件夹,否知使用缓存
             if(new File(message.getPath() + File.separator + "results").exists()){
             if(new File(message.getPath() + File.separator + "results").exists()){
@@ -272,6 +278,50 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         }
         }
     }
     }
 
 
+    private void downloadOrigFile4Yzl(String batchId, String dataSource){
+        if(StrUtil.isEmpty(batchId)){
+            return;
+        }
+
+        OrigFileUpload sceneUpData = origFileUploadService.getByBatchIdAndFileName(batchId, "scene_up_data.txt");
+        String sceneUpDataPath = dataSource + "/" + "scene_up_data.txt";
+        HttpUtilExt.downloadFileAndCheck(sceneUpData.getFileUrl(), sceneUpDataPath, 60000);
+        String sceneUpDataStr = FileUtil.readUtf8String(sceneUpDataPath);
+        JSONArray fileJsonArray = JSON.parseArray(sceneUpDataStr);
+        Map<String, String> fileMap = fileJsonArray.stream().collect(Collectors.toMap(v -> ((JSONObject) v).getString("fileName"), v -> ((JSONObject) v).getString("filePath")));
+
+        List<OrigFileUpload> fileList = origFileUploadService.getByBatchId(batchId);
+        if(CollUtil.isEmpty(fileList)){
+            return;
+        }
+        String homePath = "/oss/4dkankan/" + SceneUtil.getHomePath(dataSource);
+
+
+        for (OrigFileUpload origFileUpload : fileList) {
+            String relativeFilePath = fileMap.get(origFileUpload.getFileName());
+            if(StrUtil.isEmpty(relativeFilePath)){
+                continue;
+            }
+            int times = 0;
+            String filePath = homePath.concat(relativeFilePath);
+            do{
+                try {
+                    ++times;
+                    HttpUtil.downloadFile(origFileUpload.getFileUrl(), new File(filePath), 10 * 60 * 1000);
+                    if(FileUtil.exist(filePath)){
+                        break;
+                    }
+                }catch (Exception e){
+                    log.info("原始文件第{}次下载失败,fileUrl:{}, filePath:{}", origFileUpload.getFileUrl(), filePath);
+                }
+            }while (times < 4);
+
+            if(!FileUtil.exist(filePath)){
+                throw new RuntimeException("原始文件下载失败,fileUrl:" + origFileUpload.getFileUrl() + ", filePath:" + filePath);
+            }
+        }
+    }
+
     private String getOssPath(String path) {
     private String getOssPath(String path) {
         String ossPath = ConstantFilePath.OSS_PREFIX
         String ossPath = ConstantFilePath.OSS_PREFIX
                 + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
                 + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")

+ 3 - 1
src/main/java/com/fdkankan/contro/service/IOrigFileUploadService.java

@@ -11,12 +11,14 @@ import java.util.List;
  * 场景原始文件上传明细 服务类
  * 场景原始文件上传明细 服务类
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2023-11-23
  * @since 2023-11-23
  */
  */
 public interface IOrigFileUploadService extends IService<OrigFileUpload> {
 public interface IOrigFileUploadService extends IService<OrigFileUpload> {
 
 
     List<OrigFileUpload> getByBatchId(String batchId);
     List<OrigFileUpload> getByBatchId(String batchId);
 
 
+    OrigFileUpload getByBatchIdAndFileName(String batchId, String fileName);
+
 
 
 }
 }

+ 11 - 1
src/main/java/com/fdkankan/contro/service/impl/OrigFileUploadServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.contro.service.impl;
 package com.fdkankan.contro.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.contro.entity.OrigFileUpload;
 import com.fdkankan.contro.entity.OrigFileUpload;
 import com.fdkankan.contro.mapper.IOrigFileUploadMapper;
 import com.fdkankan.contro.mapper.IOrigFileUploadMapper;
@@ -14,7 +15,7 @@ import java.util.List;
  * 场景原始文件上传明细 服务实现类
  * 场景原始文件上传明细 服务实现类
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2023-11-23
  * @since 2023-11-23
  */
  */
 @Service
 @Service
@@ -24,4 +25,13 @@ public class OrigFileUploadServiceImpl extends ServiceImpl<IOrigFileUploadMapper
     public List<OrigFileUpload> getByBatchId(String batchId) {
     public List<OrigFileUpload> getByBatchId(String batchId) {
         return this.list(new LambdaQueryWrapper<OrigFileUpload>().eq(OrigFileUpload::getBatchId, batchId));
         return this.list(new LambdaQueryWrapper<OrigFileUpload>().eq(OrigFileUpload::getBatchId, batchId));
     }
     }
+
+    @Override
+    public OrigFileUpload getByBatchIdAndFileName(String batchId, String fileName) {
+        List<OrigFileUpload> list = this.list(new LambdaQueryWrapper<OrigFileUpload>().eq(OrigFileUpload::getBatchId, batchId).orderByDesc(OrigFileUpload::getId));
+        if(CollUtil.isEmpty(list)){
+            return null;
+        }
+        return list.get(0);
+    }
 }
 }

+ 11 - 8
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -28,6 +28,7 @@ import com.fdkankan.contro.httpclient.MyClient;
 import com.fdkankan.contro.enums.CameraTypeEnum;
 import com.fdkankan.contro.enums.CameraTypeEnum;
 import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
 import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.service.*;
+import com.fdkankan.contro.util.HttpUtilExt;
 import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.contro.vo.ScenePlusVO;
 import com.fdkankan.contro.vo.ScenePlusVO;
 import com.fdkankan.contro.vo.SendCallAlgorithmParam;
 import com.fdkankan.contro.vo.SendCallAlgorithmParam;
@@ -982,6 +983,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         log.info("场景记录添加到数据库:"+projectNum);
         log.info("场景记录添加到数据库:"+projectNum);
         //type=0为新生成场景,其余为重新计算场景
         //type=0为新生成场景,其余为重新计算场景
 
 
+        if(camType == 5){//圆周率
+            scenePlus.setThreeCamType("yzl");
+        }
+
         SceneEditInfo sceneEditInfo = new SceneEditInfo();
         SceneEditInfo sceneEditInfo = new SceneEditInfo();
         SceneEditInfoExt sceneEditInfoExt = new SceneEditInfoExt();
         SceneEditInfoExt sceneEditInfoExt = new SceneEditInfoExt();
         SceneEditControls sceneEditControls = new SceneEditControls();
         SceneEditControls sceneEditControls = new SceneEditControls();
@@ -1651,6 +1656,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         mqMessage.getExt().put("deleteExtras", true);
         mqMessage.getExt().put("deleteExtras", true);
         mqMessage.getExt().put("customUserId", customUserId);
         mqMessage.getExt().put("customUserId", customUserId);
         mqMessage.getExt().put("gps", jsonObject.getString("gps"));
         mqMessage.getExt().put("gps", jsonObject.getString("gps"));
+        mqMessage.getExt().put("threeCamType", scenePlusVO.getThreeCamType());
 
 
         if(uploadType.equals("single")){//场景上传模式(single-细小文件上传, zip-压缩包上传)
         if(uploadType.equals("single")){//场景上传模式(single-细小文件上传, zip-压缩包上传)
             OrigFileUploadBatch condition = new OrigFileUploadBatch();
             OrigFileUploadBatch condition = new OrigFileUploadBatch();
@@ -2334,16 +2340,13 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         }
         }
 
 
         if(fileName.equals("config.json")){
         if(fileName.equals("config.json")){
-            HttpUtil.downloadFile(filePath, sendCallAlgorithmPath.concat(uuid).concat("/config.json"));
-            if(!FileUtil.exist(sendCallAlgorithmPath.concat(uuid).concat("/config.json"))){
-                throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage("config.json"));
-            }
+            HttpUtilExt.downloadFileAndCheck(filePath, sendCallAlgorithmPath.concat(uuid).concat("/config.json"), 300000);
         }
         }
         if(fileName.equals("data.fdage")){
         if(fileName.equals("data.fdage")){
-            HttpUtil.downloadFile(filePath, sendCallAlgorithmPath.concat(uuid).concat("/data.fdage"));
-            if(!FileUtil.exist(sendCallAlgorithmPath.concat(uuid).concat("/data.fdage"))){
-                throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage("data.fdage"));
-            }
+            HttpUtilExt.downloadFileAndCheck(filePath, sendCallAlgorithmPath.concat(uuid).concat("/data.fdage"), 300000);
+        }
+        if(fileName.equals("scene_up_data.txt")){
+            HttpUtilExt.downloadFileAndCheck(filePath, sendCallAlgorithmPath.concat(uuid).concat("/scene_up_data.txt"), 300000);
         }
         }
 
 
         return ResultData.ok();
         return ResultData.ok();

+ 30 - 0
src/main/java/com/fdkankan/contro/util/HttpUtilExt.java

@@ -0,0 +1,30 @@
+package com.fdkankan.contro.util;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+
+@Slf4j
+public class HttpUtilExt extends HttpUtil {
+
+    public static void downloadFileAndCheck(String url, String localPath, int timeout){
+        for (int i = 0; i < 5; i++){
+            try {
+                downloadFile(url, new File(localPath), timeout);
+                if(FileUtil.exist(localPath)){
+                    return;
+                }
+            }catch (Exception e){
+                log.warn("第{}次文件下载失败,url{}", i+1, url);
+            }
+        }
+        if(!FileUtil.exist(localPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4002.code(), ErrorCode.FAILURE_CODE_4002.formatMessage(FileUtil.extName(localPath)));
+        }
+    }
+
+}

+ 2 - 0
src/main/java/com/fdkankan/contro/vo/ScenePlusVO.java

@@ -132,4 +132,6 @@ public class ScenePlusVO {
 
 
     private String recStatus;
     private String recStatus;
 
 
+    private String threeCamType;
+
 }
 }