dengsixing 5 mesiacov pred
rodič
commit
c99a6361e0

+ 10 - 4
src/main/java/com/fdkankan/contro/controller/SceneFileController.java

@@ -4,9 +4,12 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneSource;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.service.IAppCameraFailLogService;
 import com.fdkankan.contro.service.ISceneFileBuildService;
+import com.fdkankan.contro.service.IScenePlusService;
 import com.fdkankan.contro.service.ISceneUploadCountService;
 import com.fdkankan.contro.vo.ReportFailLogVO;
 import com.fdkankan.contro.vo.ResponseSceneFile;
@@ -21,10 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 场景文件上传模块
@@ -45,6 +45,8 @@ public class SceneFileController{
 
     @Autowired
     private IAppCameraFailLogService appCameraFailLogService;
+    @Autowired
+    private IScenePlusService scenePlusService;
 
 
     /**
@@ -96,6 +98,10 @@ public class SceneFileController{
                                    @RequestParam(value = "force",defaultValue = "false") Boolean force ,
                                    @RequestParam(value = "deleteExtras",defaultValue = "true") Boolean deleteExtras,
                                    @RequestParam(value = "from", defaultValue = "api") String from) throws IOException {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(Objects.nonNull(scenePlus) && scenePlus.getSceneSource() == SceneSource.E57.code()){
+            return sceneFileBuildService.rebuildSceneE57(num,force,deleteExtras, from);
+        }
         return sceneFileBuildService.rebuildScene(num,force,deleteExtras, from);
     }
 

+ 9 - 0
src/main/java/com/fdkankan/contro/mq/listener/BuildReverseE57Listener.java

@@ -22,6 +22,7 @@ import org.springframework.util.ObjectUtils;
 
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.Map;
 
 @Slf4j
 @Component
@@ -56,7 +57,9 @@ public class BuildReverseE57Listener {
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         HashMap<String, Object> map = JSON.parseObject(msg, HashMap.class);
         String num = (String) map.get("num");
+        Integer rebuild = (Integer) map.get("rebuild");
         map.put("bizType", "reverseE57");
+        map.put("rebuild", rebuild);
 
         log.info("开始准备上传e57计算资源,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
         BuildSceneCallMessage buildSceneMessage = new BuildSceneCallMessage();
@@ -84,6 +87,12 @@ public class BuildReverseE57Listener {
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
     }
 
+    public static void main(String[] args) {
+        Map<String, Object> map = new HashMap<>();
+        Boolean a = (Boolean) map.get("a");
+        System.out.println(a);
+    }
+
     /**
      * 场景计算后置结果处理
      * @param channel

+ 23 - 2
src/main/java/com/fdkankan/contro/mq/service/impl/BuildReverseE57SceneServiceImpl.java

@@ -28,6 +28,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.SceneUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
@@ -91,17 +92,37 @@ public class BuildReverseE57SceneServiceImpl implements IBuildSceneService {
     @Override
     public void buildScenePre(BuildSceneCallMessage message) throws Exception{
         String num = message.getSceneNum();
+        Integer rebuild = (Integer)message.getExt().get("rebuild");
+        Boolean deleteExtras = (Boolean)message.getExt().get("deleteExtras");
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         try {
             String dataSource = scenePlusExt.getDataSource();
+            String homePath = SceneUtil.getHomePath(dataSource);
             message.setPath(dataSource);
+            String homeKey = homePath + "input.e57";
+            String key = null;
+            if(Objects.isNull(rebuild) || rebuild == CommonStatus.NO.code().intValue()){
+                String path = (String)message.getExt().get("path");
+                //复制原始资源到home目录
+                fYunFileService.copyFileInBucket(path, homeKey);
+                key = homeKey;
+            }else{
+                key = homeKey;
+            }
 
-            String key = (String)message.getExt().get("path");
+            //删除点位校准数据
+            if (message.getExt().containsKey("deleteExtras")
+                    && (Boolean) message.getExt().get("deleteExtras")) {
+                String extras = String.format(UploadFilePath.scene_result_data_path, num).concat("extras");
+                if(CollUtil.isNotEmpty(fYunFileService.listRemoteFiles(extras))){
+                    fYunFileService.deleteFolder(extras);
+                }
+            }
 
             //下载资源到本地
             String destPath = dataSource + "/capture/";
-            fYunFileService.downloadFileByCommand(destPath, key);
+            fYunFileService.downloadFileByCommand(destPath, homeKey);
             List<File> files = FileUtil.loopFiles(dataSource + "/capture/");
             files.stream().forEach(file->{
                 if(file.getAbsolutePath().endsWith(".e57")){

+ 2 - 0
src/main/java/com/fdkankan/contro/service/IFdkkLaserService.java

@@ -31,4 +31,6 @@ public interface IFdkkLaserService {
     void cloudPointBuild(String sceneCode, String visionEditFilePath);
 
     void sendE57ToLaser(ScenePlus scenePlus, ScenePlusExt scenePlusExt, String path);
+
+    void sendRebuildE57ToLaser(ScenePlus scenePlus);
 }

+ 2 - 0
src/main/java/com/fdkankan/contro/service/ISceneFileBuildService.java

@@ -28,6 +28,8 @@ public interface ISceneFileBuildService extends IService<SceneFileBuild> {
 
     ResultData rebuildScene(String num,Boolean force,Boolean deleteExtras, String from) throws IOException;
 
+    ResultData rebuildSceneE57(String num,Boolean force,Boolean deleteExtras, String from) throws IOException;
+
     ResultData copyDataAndBuild(String sourceBucet,String dataSource,String sceneVer) throws Exception;
 
     ResultData uploadLiguang(String num, String snCode, String ossPath) throws Exception;

+ 8 - 0
src/main/java/com/fdkankan/contro/service/impl/IFdkkLaserServiceImpl.java

@@ -245,6 +245,14 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         }
     }
 
+    public void sendRebuildE57ToLaser(ScenePlus scenePlus) {
+        User user = userService.getById(scenePlus.getUserId());
+        Map<String, Object> params = new HashMap<>();
+        params.put("sceneCode", scenePlus.getNum());
+        params.put("status", SceneStatus.wait.code());
+        rabbitMqProducer.sendByWorkQueue("laser-e57-update-scene", params);
+    }
+
     public String syncBuildResult4E57(String dataSource) {
         log.info("激光转台相机构建结果 同步 请求 ");
         try {

+ 63 - 1
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -1317,7 +1317,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             throw new BusinessException(ErrorCode.FAILURE_CODE_5072);
         }
 
-
         //激光场景校验是否能够计算
         this.checkJgCanBuild(scenePro);
 
@@ -1435,6 +1434,69 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         return ResultData.ok();
     }
 
+    @Override
+    public ResultData rebuildSceneE57(String num,Boolean force,Boolean deleteExtras, String from) throws IOException {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        if (scenePlus.getSceneStatus() == 0 && (ObjectUtils.isEmpty(force) || !force)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
+        }
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        //复制出来的场景不支持重算
+        List<SceneCopyLog> sceneCopyLogs = sceneCopyLogService. listByNewNum(num);
+        if(CollUtil.isNotEmpty(sceneCopyLogs)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5071);
+        }
+
+        //查询场景是否处于冻结状态,如果已冻结,不允许重算
+        SceneColdStorage sceneColdStorage = sceneColdStorageService.getOne(new LambdaQueryWrapper<SceneColdStorage>().eq(SceneColdStorage::getNum, num).eq(SceneColdStorage::getState, 1));
+        if(Objects.nonNull(sceneColdStorage)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5074);
+        }
+
+        String path = scenePlusExt.getDataSource();
+        String buildType = scenePlusExt.getBuildType();
+
+        String e57FileKey = SceneUtil.getHomePath(path) + "input.e57";
+        if(fYunFileService.fileExist(e57FileKey)){
+            return ResultData.error(ErrorCode.FAILURE_CODE_5074);
+        }
+
+        //重算的场景,先移除该场景对应的容量
+        String statusJsonOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json";
+        JSONObject statusJson = JSONObject.parseObject(fYunFileService.getFileContent(String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json"));
+        if(ObjectUtils.isEmpty(statusJson)){
+            statusJson = new JSONObject();
+        }
+        //临时将-2改成1,app还没完全更新
+        statusJson.put("status", SceneStatus.wait.code());
+        fYunFileService.uploadFile(statusJson.toJSONString().getBytes(StandardCharsets.UTF_8),statusJsonOssPath);
+
+        scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
+                .eq(ScenePlus::getNum, num));
+
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("num", num);
+        params.put("rebuild", 1);
+        params.put("deleteExtras", deleteExtras);
+        fdkkLaserService.sendRebuildE57ToLaser(scenePlus);
+        rabbitMqProducer.sendByWorkQueue("reverseE57-modeling-pre", params);
+
+        //记录日志表
+        SceneRebuildLog rebuildLog = new SceneRebuildLog();
+        rebuildLog.setNum(num);
+        rebuildLog.setSource(from);
+        sceneRebuildLogService.save(rebuildLog);
+
+        return ResultData.ok();
+    }
+
     /**
      * 由于算法不支持2022年三月份前的激光场景计算,这里需要校验是否是能计算,不能就退出重算
      * @return