dengsixing il y a 1 an
Parent
commit
fe5d9f6a30

+ 5 - 0
src/main/java/com/fdkankan/modeling/bean/BuildSceneResultBean.java

@@ -51,6 +51,11 @@ public class BuildSceneResultBean {
      */
     private Long duration;
 
+    /**
+     * 1-java报错 2-主程算法报错  3-计算场景关联报错
+     */
+    private Integer errorType;
+
 
 
 

+ 46 - 16
src/main/java/com/fdkankan/modeling/receiver/RabbitMqListener.java

@@ -6,6 +6,7 @@ import com.fdkankan.common.constant.CommonOperStatus;
 import com.fdkankan.common.constant.ModelingBuildStatus;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.model.utils.ComputerUtil;
+import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.modeling.bean.BuildSceneResultBean;
 import com.fdkankan.modeling.constants.RedisKey;
 import com.fdkankan.modeling.constants.SysConstants;
@@ -38,10 +39,7 @@ import org.springframework.util.ObjectUtils;
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -155,22 +153,26 @@ public class RabbitMqListener {
                 message.getResultReceiverMqName() : queueModelingPost;
         buildSceneResult.setResultQueueName(resultQueueName);
         ModelingBuildStatus status = null;
-        Future<ModelingBuildStatus> future = null;
+        Integer errorType = null;
+        Future<Map<String, Object>> future = null;
         try {
             Map<String,Object> buildContext = new HashMap<>();
             //计算前准备
             preBuild(buildContext,message, buildLog);
             future = SysConstants.executorService.submit(() -> {
                 try {
-                    return buildScene(buildContext,message, buildSceneResult,buildLog);
+                    return buildScene(message, buildSceneResult,buildLog);
                 } catch (Exception e) {
                     log.error("服务实例:{} 构建异常:", SysConstants.hostName, e);
-                    e.printStackTrace();
-                    return ModelingBuildStatus.FAILED;
+                    Map<String, Object> result = new HashMap<>();
+                    result.put("status", ModelingBuildStatus.FAILED);
+                    result.put("errorType", 1);
+                    return result;
                 }
             });
-            status = future.get(SysConstants.modelTimeOut, TimeUnit.HOURS);
-
+            Map<String, Object> result = future.get(SysConstants.modelTimeOut, TimeUnit.HOURS);
+            status = (ModelingBuildStatus) result.get("status");
+            errorType = (Integer) result.get("errorType");
             //结束计时
             watch.stop();
             buildLog.setDuration(watch.getTime(TimeUnit.SECONDS));
@@ -194,12 +196,16 @@ public class RabbitMqListener {
         buildLog.setStatus(status.code());
         buildSceneResult.setCameraType(message.getCameraType());
         buildSceneResult.setBuildStatus(status);
+        buildSceneResult.setErrorType(errorType);
         //计算后处理
         afterBuild(message, buildSceneResult, buildLog);
 
     }
 
-    private ModelingBuildStatus buildScene(Map<String,Object> buildContext,BuildSceneCallMessage message, BuildSceneResultBean buildSceneResult,BuildLog logRecord) throws Exception{
+    private Map<String, Object> buildScene(BuildSceneCallMessage message, BuildSceneResultBean buildSceneResult,BuildLog logRecord) throws Exception{
+
+        Map<String, Object> result = new HashMap<>();
+
         //如果mq生产者在消息体中设置了结算结果mq队列名,就发到这个队列,否则就发送到默认队列
         String path = message.getPath();
         String num = message.getSceneNum();
@@ -245,10 +251,13 @@ public class RabbitMqListener {
             String resultsPath = path + File.separator + "results" + File.separator;
             if (!new File(resultsPath + "upload.json").exists()) {
                 log.error("未检测到计算结果文件:upload.json");
-                return ModelingBuildStatus.FAILED;
+                result.put("status", ModelingBuildStatus.FAILED);
+                result.put("errorType", 2);
+                return result;
             }
 
-            return ModelingBuildStatus.SUCCESS;
+            result.put("status", ModelingBuildStatus.SUCCESS);
+            return result;
         }
 
         Map<String, String> dataMap = buildService.getTypeString(cameraType, algorithm, resolution,dataJson);
@@ -264,10 +273,30 @@ public class RabbitMqListener {
         String resultsPath = path + File.separator + "results" + File.separator;
         if (!new File(resultsPath + "upload.json").exists()) {
             log.error("未检测到计算结果文件:upload.json");
-            return ModelingBuildStatus.FAILED;
+            result.put("status", ModelingBuildStatus.FAILED);
+            result.put("errorType", 2);
+            return result;
+        }
+
+        Object linkPanTargetListObj = message.getExt().get("linkPanTargetList");
+        if(Objects.nonNull(linkPanTargetListObj)){
+            List<String> linkPanTargetList = (List<String>) linkPanTargetListObj;
+            for (String target : linkPanTargetList) {
+                CreateObjUtil.build3dModel(target,null);
+
+                // 检测计算结果文件是否有生成
+                String linkPanoResultsPath = target + File.separator + "results" + File.separator;
+                if (!new File(linkPanoResultsPath + "upload.json").exists()) {
+                    log.error("未检测到场景关联计算结果文件:upload.json");
+                    result.put("status", ModelingBuildStatus.FAILED);
+                    result.put("errorType", 3);
+                    return result;
+                }
+            }
         }
-        log.info("八目上完oss结束修改数据:"+num);
-        return ModelingBuildStatus.SUCCESS;
+
+        result.put("status", ModelingBuildStatus.SUCCESS);
+        return result;
     }
 
     private void afterBuild(BuildSceneCallMessage message, BuildSceneResultBean buildSceneResult, BuildLog buildLog){
@@ -358,6 +387,7 @@ public class RabbitMqListener {
                 .computeTime(buildSceneResult.getDuration())
                 .path(buildSceneResult.getPath())
                 .hostName(SysConstants.hostName)
+                .errorType(buildSceneResult.getErrorType())
                 .build();
         buildResult.setBuildContext(message.getBuildContext());
         rabbitMqProducer.sendByWorkQueue(buildSceneResult.getResultQueueName(),buildResult);