소스 검색

Merge branch 'e57' into release

dengsixing 11 달 전
부모
커밋
b2b6c503f7
18개의 변경된 파일407개의 추가작업 그리고 68개의 파일을 삭제
  1. 4 1
      src/main/java/com/fdkankan/contro/entity/SceneBuildProcessLog.java
  2. 10 10
      src/main/java/com/fdkankan/contro/mq/listener/AbstrackBuildSceneListener.java
  3. 121 0
      src/main/java/com/fdkankan/contro/mq/listener/BuildE57Listener.java
  4. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/BuildIntermitSceneListener.java
  5. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/BuildObjListener.java
  6. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/BuildSceneListener.java
  7. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/BuildSceneProcessLogListener.java
  8. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/BuildV3SceneListener.java
  9. 2 2
      src/main/java/com/fdkankan/contro/mq/listener/IBuildSceneListener.java
  10. 185 0
      src/main/java/com/fdkankan/contro/mq/service/impl/BuildE57SceneServiceImpl.java
  11. 1 0
      src/main/java/com/fdkankan/contro/mq/service/impl/BuildIntermitSceneServiceImpl.java
  12. 1 0
      src/main/java/com/fdkankan/contro/mq/service/impl/BuildObjServiceImpl.java
  13. 2 0
      src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java
  14. 2 0
      src/main/java/com/fdkankan/contro/mq/service/impl/BuildV3SceneServiceImpl.java
  15. 2 0
      src/main/java/com/fdkankan/contro/service/IBuildSceneDTService.java
  16. 3 3
      src/main/java/com/fdkankan/contro/service/ISceneBuildProcessLogService.java
  17. 21 21
      src/main/java/com/fdkankan/contro/service/impl/BuildSceneDTServiceImpl.java
  18. 43 21
      src/main/java/com/fdkankan/contro/service/impl/SceneBuildProcessLogServiceImpl.java

+ 4 - 1
src/main/java/com/fdkankan/contro/entity/SceneBuildProcessLog.java

@@ -15,7 +15,7 @@ import lombok.Setter;
  * 场景计算流程状态表
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-01-28
  */
 @Getter
@@ -77,5 +77,8 @@ public class SceneBuildProcessLog implements Serializable {
     @TableLogic(value = "A", delval = "I")
     private String recStatus;
 
+    @TableField("biz_type")
+    private String bizType;
+
 
 }

+ 10 - 10
src/main/java/com/fdkankan/contro/mq/listener/AbstrackBuildSceneListener.java

@@ -32,7 +32,7 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
     private ICommonService commonService;
 
     @Override
-    public void preHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService) throws IOException {
+    public void preHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService, String bizType) throws IOException {
         // 添加消息幂等处理
         String messageId = message.getMessageProperties().getMessageId();
         if(!ObjectUtils.isEmpty(messageId)){
@@ -57,21 +57,21 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
                 buildSceneMessage.getBuildContext().put("sceneNum",buildSceneMessage.getSceneNum());
             }
             //记录日志
-            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.WAITING.code(), null);
+            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, bizType);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.WAITING.code(), null, bizType);
             buildSceneService.buildScenePre(buildSceneMessage);
             commonService.saveMqSendLog(num, buildSceneMessage);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.SUCCESS.code(), null);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.SUCCESS.code(), null, bizType);
         }catch (Exception e){
             log.error("场景计算前置处理出错,num=" + num, e);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000));
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueName, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000), bizType);
         }
         log.info("准备场景计算资源完成,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
     }
 
     @Override
-    public void postHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService) throws Exception {
+    public void postHandle(Channel channel, String queueName, Message message, IBuildSceneService buildSceneService, String bizType) throws Exception {
         // 添加消息幂等处理
         String messageId = message.getMessageProperties().getMessageId();
         if(!ObjectUtils.isEmpty(messageId)){
@@ -89,13 +89,13 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
         BuildSceneResultMqMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
         String num = buildSceneMessage.getBuildContext().get("sceneNum").toString();
         try {
-            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.WAITING.code(), null);
+            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, bizType);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.WAITING.code(), null, bizType);
             buildSceneService.buildScenePost(buildSceneMessage);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.SUCCESS.code(), null);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.SUCCESS.code(), null, bizType);
         }catch (Exception e){
             log.error("场景计算结果处理出错,num=" + num, e);
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000));
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueName, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000), bizType);
         }
         log.info("场景计算结果处理完成,队列名:{},id:{},消息体:{}", queueName, messageId, msg);
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

+ 121 - 0
src/main/java/com/fdkankan/contro/mq/listener/BuildE57Listener.java

@@ -0,0 +1,121 @@
+package com.fdkankan.contro.mq.listener;
+
+import cn.hutool.core.exceptions.ExceptionUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.CommonOperStatus;
+import com.fdkankan.contro.constant.RedisConstants;
+import com.fdkankan.contro.mq.service.impl.BuildE57SceneServiceImpl;
+import com.fdkankan.contro.service.ICommonService;
+import com.fdkankan.contro.service.ISceneBuildProcessLogService;
+import com.fdkankan.model.constants.SceneBuildProcessType;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+
+@Slf4j
+@Component
+public class BuildE57Listener{
+
+    @Value("${queue.modeling.e57.modeling-pre:e57-modeling-pre}")
+    private String queueModelingPre;
+
+    @Value("${queue.modeling.e57.modeling-post:e57-modeling-post}")
+    private String queueModelingPost;
+
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+
+    @Autowired
+    private ISceneBuildProcessLogService sceneBuildProcessLogService;
+    @Autowired
+    private ICommonService commonService;
+    @Autowired
+    private BuildE57SceneServiceImpl buildSceneService;
+
+
+    /**
+     * 场景计算前置资源准备处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.modeling.e57.modeling-pre:e57-modeling-pre}"),
+            concurrency = "${maxThread.modeling.modeling-pre}"
+    )
+    public void buildScenePreHandler(Channel channel, Message message) throws Exception {
+        String messageId = message.getMessageProperties().getMessageId();
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        HashMap<String, Object> map = JSON.parseObject(msg, HashMap.class);
+        String num = (String) map.get("num");
+        map.put("bizType", "e57");
+
+        log.info("开始准备e57计算资源,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
+        BuildSceneCallMessage buildSceneMessage = new BuildSceneCallMessage();
+        buildSceneMessage.setSceneNum(num);
+        buildSceneMessage.setExt(map);
+        buildSceneMessage.setBuildType("V3");
+        try {
+            if(ObjectUtils.isEmpty(buildSceneMessage.getBuildContext())){
+                buildSceneMessage.setBuildContext(new HashMap<>());
+            }
+            if(!ObjectUtils.isEmpty(buildSceneMessage.getSceneNum())){
+                buildSceneMessage.getBuildContext().put("sceneNum",buildSceneMessage.getSceneNum());
+            }
+            //记录日志
+            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, "e57");
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.WAITING.code(), null, "e57");
+            buildSceneService.buildScenePre(buildSceneMessage);
+            commonService.saveMqSendLog(num, buildSceneMessage);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.SUCCESS.code(), null,"e57");
+        }catch (Exception e){
+            log.error("e57计算前置处理出错,num=" + num, e);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.PRE.code(), queueModelingPre, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000), "e57");
+        }
+        log.info("准备e57计算资源完成,队列名:{},id:{},消息体:{}", queueModelingPre, messageId, msg);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+    /**
+     * 场景计算后置结果处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.modeling.e57.modeling-post:e57-modeling-post}"),
+            concurrency = "${maxThread.modeling.modeling-post}"
+    )
+    public void buildScenePostHandler(Channel channel, Message message) throws Exception {
+        String messageId = message.getMessageProperties().getMessageId();
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("场景计算完成,开始处理e57计算结果,队列名:{},id:{},消息体:{}", queueModelingPost, messageId, msg);
+        BuildSceneResultMqMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
+        String num = buildSceneMessage.getBuildContext().get("sceneNum").toString();
+        try {
+            sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, "e57");
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.WAITING.code(), null, "e57");
+            buildSceneService.buildScenePost(buildSceneMessage);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.SUCCESS.code(), null, "e57");
+        }catch (Exception e){
+            log.error("场景计算结果处理出错,num=" + num, e);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.POST.code(), queueModelingPost, CommonOperStatus.FAILD.code(), ExceptionUtil.stacktraceToString(e, 3000), "e57");
+        }
+        log.info("场景计算结果处理完成,队列名:{},id:{},消息体:{}", queueModelingPost, messageId, msg);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
+    }
+}

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/BuildIntermitSceneListener.java

@@ -34,7 +34,7 @@ public class BuildIntermitSceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-pre}"
     )
     public void buildScenePreHandler(Channel channel, Message message) throws Exception {
-        preHandle(channel,queueModelingPre,message,buildSceneService);
+        preHandle(channel,queueModelingPre,message,buildSceneService, "intermit");
     }
 
     /**
@@ -48,7 +48,7 @@ public class BuildIntermitSceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-post}"
     )
     public void buildScenePostHandler(Channel channel, Message message) throws Exception {
-        postHandle(channel,queueModelingPost,message,buildSceneService);
+        postHandle(channel,queueModelingPost,message,buildSceneService, "intermit");
 
     }
 }

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/BuildObjListener.java

@@ -44,7 +44,7 @@ public class BuildObjListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-pre}"
     )
     public void buildObjScenePreHandler(Channel channel, Message message) throws Exception {
-        preHandle(channel, queueObjModelingPre, message, buildObjService);
+        preHandle(channel, queueObjModelingPre, message, buildObjService,"obj");
     }
 
 
@@ -60,7 +60,7 @@ public class BuildObjListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-post}"
     )
     public void buildObjScenePostHandler(Channel channel, Message message) throws Exception {
-        postHandle(channel, queueObjModelingPost, message, buildObjService);
+        postHandle(channel, queueObjModelingPost, message, buildObjService, "obj");
 
     }
 }

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/BuildSceneListener.java

@@ -33,7 +33,7 @@ public class BuildSceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-pre}"
     )
     public void buildScenePreHandler(Channel channel, Message message) throws Exception {
-        preHandle(channel,queueModelingPre,message,buildSceneService);
+        preHandle(channel,queueModelingPre,message,buildSceneService, "standard");
     }
 
     /**
@@ -47,7 +47,7 @@ public class BuildSceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-post}"
     )
     public void buildScenePostHandler(Channel channel, Message message) throws Exception {
-        postHandle(channel,queueModelingPost,message,buildSceneService);
+        postHandle(channel,queueModelingPost,message,buildSceneService, "standard");
 
     }
 }

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/BuildSceneProcessLogListener.java

@@ -48,7 +48,7 @@ public class BuildSceneProcessLogListener{
             int buildStatus = buildSceneMessage.getBuildStatus();
             //新的计算开始,需要将之前的记录置为失效
             if(buildStatus == ModelingBuildStatus.CALCULATING.code()){
-                sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(),queueModelingCall);
+                sceneBuildProcessLogService.clearSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(),queueModelingCall, buildSceneMessage.getBizType());
                 status = CommonOperStatus.WAITING.code();
             }else{
                 if(buildStatus != ModelingBuildStatus.SUCCESS.code()){
@@ -56,7 +56,7 @@ public class BuildSceneProcessLogListener{
                     reason = ModelingBuildStatus.get(buildStatus).message();
                 }
             }
-            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(), queueModelingCall, status, reason);
+            sceneBuildProcessLogService.saveSceneBuildProcessLog(num, SceneBuildProcessType.CALL.code(), queueModelingCall, status, reason, buildSceneMessage.getBizType());
         }catch (Exception e){
             log.error("场景计算流程状态日志记录出错, num="+num, e);
         }finally {

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/BuildV3SceneListener.java

@@ -33,7 +33,7 @@ public class BuildV3SceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-pre}"
     )
     public void buildScenePreHandler(Channel channel, Message message) throws Exception {
-        preHandle(channel,queueModelingPre,message,buildSceneService);
+        preHandle(channel,queueModelingPre,message,buildSceneService, "standard");
     }
 
     /**
@@ -47,7 +47,7 @@ public class BuildV3SceneListener extends AbstrackBuildSceneListener {
             concurrency = "${maxThread.modeling.modeling-post}"
     )
     public void buildScenePostHandler(Channel channel, Message message) throws Exception {
-        postHandle(channel,queueModelingPost,message,buildSceneService);
+        postHandle(channel,queueModelingPost,message,buildSceneService, "standard");
 
     }
 }

+ 2 - 2
src/main/java/com/fdkankan/contro/mq/listener/IBuildSceneListener.java

@@ -7,6 +7,6 @@ import org.springframework.amqp.core.Message;
 import java.io.IOException;
 
 public interface IBuildSceneListener {
-    void preHandle(Channel channel,String queueName, Message message, IBuildSceneService buildSceneService) throws IOException;
-    void postHandle(Channel channel,String queueName, Message message,IBuildSceneService buildSceneService) throws Exception;
+    void preHandle(Channel channel,String queueName, Message message, IBuildSceneService buildSceneService, String bizType) throws IOException;
+    void postHandle(Channel channel,String queueName, Message message,IBuildSceneService buildSceneService, String bizType) throws Exception;
 }

+ 185 - 0
src/main/java/com/fdkankan/contro/mq/service/impl/BuildE57SceneServiceImpl.java

@@ -0,0 +1,185 @@
+package com.fdkankan.contro.mq.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ZipUtil;
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.common.constant.CommonSuccessStatus;
+import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePlusExt;
+import com.fdkankan.contro.mq.service.IBuildSceneService;
+import com.fdkankan.contro.service.*;
+import com.fdkankan.fyun.config.FYunFileConfig;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/20
+ **/
+@Slf4j
+@Service
+@RefreshScope
+public class BuildE57SceneServiceImpl implements IBuildSceneService {
+    public static final String logUrlFormat = "**algorithm-log**: [%sbuild_log/%s/e57/console.log](%sbuild_log/%s/e57/console.log)";
+
+    @Value("${queue.modeling.e57.modeling-post}")
+    private String queueModelingPost;
+    @Value("${model.type:#{null}}")
+    private String modelType;
+    @Value("${env:gn}")
+    private String env;
+    @Value("#{'${build.scene.post.not-delete-nas-nums:}'.split(',')}")
+    private List<String> notDeleteNasNumList;
+    @Value("${queue.application.laser.e57-modeling-done:e57-modeling-done}")
+    private String queueE57ModelingDone;
+    @Autowired
+    private RabbitMqProducer mqProducer;
+    @Resource
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private FYunFileConfig fYunFileConfig;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private IBuildSceneDTService buildSceneDTService;
+    @Autowired
+    private ICommonService commonService;
+    @Autowired
+    private ISceneColdStorageService sceneColdStorageService;
+    @Autowired
+    private IntermitSceneService intermitSceneService;
+
+    @Override
+    public void buildScenePre(BuildSceneCallMessage message) throws Exception{
+        String num = message.getSceneNum();
+        try {
+            ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+            ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+            String dataSource = scenePlusExt.getDataSource();
+            String path = dataSource + "_e57";
+            message.setPath(dataSource);
+
+            //根据相机类型,组装资源路径
+            //下载资源到本地
+            this.downLoadSource(message, path);
+
+            //发送mq,就进行计算
+            message.setPath(path);
+            message.setResultReceiverMqName(queueModelingPost);
+            message.setBizType("e57");
+
+            log.info("e57计算资源准备结束,场景码:{}", message.getSceneNum());
+
+        }catch (Exception e){
+            log.error("e57计算前置处理出错,num"+num, e);
+            buildSceneDTService.handBaseFail("e57计算资源准备异常!", message.getPath(), message.getSceneNum(), "计算控制服务器");
+            throw e;
+        }
+    }
+
+    private String getOssPath(String path) {
+        String ossPath = ConstantFilePath.OSS_PREFIX
+                + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
+                .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "");
+        if (!ossPath.endsWith("/")) {
+            ossPath = ossPath.concat("/");
+        }
+        return ossPath;
+    }
+
+    @Override
+    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path){
+        String ossPath = getOssPath(buildSceneMqMessage.getPath());
+        fYunFileService.downloadFileByCommand(path + "/capture", ossPath);
+
+        //下载点位校准文件
+        //上传点位校准相关文件(小)
+        String localExtraPath = path + "/extras/vision_edit.txt";
+        String ossExtras = String.format(UploadFilePath.scene_result_data_path, buildSceneMqMessage.getSceneNum()) + "extras";
+        List<String> extras = fYunFileService.listRemoteFiles(ossExtras);
+        log.info("key:{}, list:{}", ossExtras, JSON.toJSONString(extras));
+        if(CollUtil.isNotEmpty(extras)){
+            extras.parallelStream().forEach(key->{
+                fYunFileService.downloadFile(key, localExtraPath);
+            });
+        }
+    }
+
+    @Override
+    public void buildScenePost(BuildSceneResultMqMessage message) throws Exception {
+        String num = message.getBuildContext().get("sceneNum").toString();
+        String path = message.getPath();
+        String bucket = (String)message.getExt().get("bucket");
+        String bizId = (String)message.getExt().get("bizId");
+        String ossKeyFormat = (String)message.getExt().get("ossKey");
+        try {
+            // 上传计算日志
+            //如果是重复计算,没有走到计算逻辑,不需要上传日志文件
+            log.info("开始上传计算日志");
+            String buildLogPath = String.format(UploadFilePath.BUILD_LOG_PATH, num) + "e57/";
+            fYunFileService.uploadFile(path + File.separator + "console.log", buildLogPath + "console.log");
+            log.info("计算日志上传完成");
+            Map<String, Object> laserMqContent = new HashMap<>();
+            laserMqContent.put("num", num);
+            laserMqContent.put("bizId", bizId);
+            if (!message.getBuildSuccess()) {
+
+                //发送mq通知激光系统
+                laserMqContent.put("status", CommonSuccessStatus.FAIL.code());
+                mqProducer.sendByWorkQueue(queueE57ModelingDone, laserMqContent);
+
+                // 发送钉钉消息,计算失败
+                String logUrl = String.format(logUrlFormat,fYunFileConfig.getHost(),num,fYunFileConfig.getHost(),num);
+                buildSceneDTService.handModelFail("计算失败", message.getPath(), num, message.getHostName(), logUrl);
+                return;
+            }
+
+            //压缩e57
+            String localPath = path + "/results/laserData/laser.e57";
+            String zipPath = path + "/results/laserData/laser-e57.zip";
+            String ossKey = String.format(ossKeyFormat, num, num);
+            ZipUtil.zip(localPath, zipPath);
+            fYunFileService.uploadFileByCommand(bucket,zipPath, ossKey);
+
+            //发送mq通知激光系统
+            laserMqContent.put("status", CommonSuccessStatus.SUCCESS.code());
+            mqProducer.sendByWorkQueue(queueE57ModelingDone, laserMqContent);
+
+            try {
+                FileUtil.del(path);
+            }catch (Exception e){
+                log.error("删除计算目录失败,path:{}", path);
+            }
+
+            log.info("e57场景计算结果处理结束,场景码:{}", num);
+        }catch (Exception e){
+            log.error("e57场景计算结果处理出错,num"+num, e);
+            buildSceneDTService.handBaseFail("e57场景计算结果处理出错!", message.getPath(), num, "计算控制服务器");
+            throw e;
+        }
+    }
+
+}

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

@@ -111,6 +111,7 @@ public class BuildIntermitSceneServiceImpl implements IBuildSceneService {
 
             //发送mq,就进行计算
             message.setResultReceiverMqName(queueModelingPost);
+            message.setBizType("intermit");
 
             log.info("场景计算资源准备结束,场景码:{}", message.getSceneNum());
 

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

@@ -144,6 +144,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             message.setResolution(jsonObject.getString("resolution"));
             message.setPath(laserObjFilePath);
             message.setResultReceiverMqName(queueObjModelingPost);
+            message.setBizType("obj");
 
             success = true;
 

+ 2 - 0
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -212,6 +212,8 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 ext.put("128G", 1);
             }
 
+            message.setBizType("standard");
+
             log.info("场景计算资源准备结束,场景码:{}", message.getSceneNum());
 
         }catch (Exception e){

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

@@ -162,6 +162,8 @@ public class BuildV3SceneServiceImpl implements IBuildSceneService {
 
             message.setResultReceiverMqName(queueV3ModelingPost);
 
+            message.setBizType("standard");
+
             log.info("场景计算资源准备结束,场景码:{}", message.getSceneNum());
 
         }catch (Exception e){

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

@@ -12,6 +12,8 @@ public interface IBuildSceneDTService {
 
     void handModelFail(String reason, String serverPath, String num, String hostName);
 
+    void handModelFail(String reason, String serverPath, String num, String hostName, String logUrl);
+
     void handBaseFail(String reason, String serverPath, String num, String hostName);
 
 }

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

@@ -8,13 +8,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * 场景计算流程状态表 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-01-28
  */
 public interface ISceneBuildProcessLogService extends IService<SceneBuildProcessLog> {
 
-    public void clearSceneBuildProcessLog(String num, String process, String queueName);
+    public void clearSceneBuildProcessLog(String num, String process, String queueName, String bizType);
 
-    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason);
+    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason, String bizType);
 
 }

+ 21 - 21
src/main/java/com/fdkankan/contro/service/impl/BuildSceneDTServiceImpl.java

@@ -46,30 +46,30 @@ public class BuildSceneDTServiceImpl implements IBuildSceneDTService {
 
     @Override
     public void handModelFail(String reason, String serverPath, String num, String hostName) {
-        CompletableFuture.runAsync(() -> {
-            try {
-                log.info("开始发送钉钉消息");
-                String logPath = String.format(contentExt,fYunFileConfig.getHost(),num,fYunFileConfig.getHost(),num);
-                log.info("发送钉钉消息,content:{}", logPath);
-                String content = String.format(this.DINGTALK_MSG_PATTERN, this.mainUrl, hostName, reason, num, serverPath) + logPath;
-                log.info("发送钉钉消息,content:{}", content);
-                dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
-            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
-                log.error("发送钉钉消息失败", apiException);
-            }
-        });
+        String logPath = String.format(contentExt,fYunFileConfig.getHost(),num,fYunFileConfig.getHost(),num);
+        this.handModelFail(reason, serverPath, num, hostName, logPath);
+    }
+
+    @Override
+    public void handModelFail(String reason, String serverPath, String num, String hostName, String logPath) {
+        try {
+            log.info("发送钉钉消息,content:{}", logPath);
+            String content = String.format(this.DINGTALK_MSG_PATTERN, this.mainUrl, hostName, reason, num, serverPath) + logPath;
+            log.info("发送钉钉消息,content:{}", content);
+            dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
+        } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
+            log.error("发送钉钉消息失败", apiException);
+        }
     }
 
     @Override
     public void handBaseFail(String reason, String serverPath, String num, String hostName) {
-        CompletableFuture.runAsync(() -> {
-            try {
-                String content = String.format(this.DINGTALK_MSG_PATTERN, this.mainUrl, hostName, reason, num, serverPath);
-                log.info("发送钉钉消息,content:{}", content);
-                dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
-            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
-                log.error("发送钉钉消息失败", apiException);
-            }
-        });
+        try {
+            String content = String.format(this.DINGTALK_MSG_PATTERN, this.mainUrl, hostName, reason, num, serverPath);
+            log.info("发送钉钉消息,content:{}", content);
+            dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
+        } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
+            log.error("发送钉钉消息失败", apiException);
+        }
     }
 }

+ 43 - 21
src/main/java/com/fdkankan/contro/service/impl/SceneBuildProcessLogServiceImpl.java

@@ -1,12 +1,15 @@
 package com.fdkankan.contro.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.contro.entity.SceneBuildProcessLog;
 import com.fdkankan.contro.mapper.ISceneBuildProcessLogMapper;
 import com.fdkankan.contro.service.ISceneBuildProcessLogService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.Objects;
 
 /**
@@ -14,37 +17,56 @@ import java.util.Objects;
  * 场景计算流程状态表 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-01-28
  */
+@Slf4j
 @Service
 public class SceneBuildProcessLogServiceImpl extends ServiceImpl<ISceneBuildProcessLogMapper, SceneBuildProcessLog> implements ISceneBuildProcessLogService {
 
 
     @Override
-    public void clearSceneBuildProcessLog(String num, String process, String queueName) {
-        this.remove(new LambdaQueryWrapper<SceneBuildProcessLog>()
-                .eq(SceneBuildProcessLog::getNum, num)
-                .eq(SceneBuildProcessLog::getProcess, process)
-                .eq(SceneBuildProcessLog::getQueueName, queueName));
+    public void clearSceneBuildProcessLog(String num, String process, String queueName, String bizType) {
+        try {
+            LambdaQueryWrapper<SceneBuildProcessLog> wrapper = new LambdaQueryWrapper<SceneBuildProcessLog>()
+                    .eq(SceneBuildProcessLog::getNum, num)
+                    .eq(SceneBuildProcessLog::getProcess, process);
+            if(StrUtil.isNotEmpty(bizType)){
+                wrapper.eq(SceneBuildProcessLog::getBizType, bizType);
+            }
+            this.remove(wrapper);
+        }catch (Exception e){
+            log.error("清楚计算流程日志报错", e);
+        }
     }
 
     @Override
-    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason) {
-
-        SceneBuildProcessLog log = this.getOne(new LambdaQueryWrapper<SceneBuildProcessLog>()
-                .eq(SceneBuildProcessLog::getNum, num)
-                .eq(SceneBuildProcessLog::getProcess,process)
-                .eq(SceneBuildProcessLog::getQueueName, queueName));
-        if(Objects.isNull(log)){
-            log = new SceneBuildProcessLog();
+    public void saveSceneBuildProcessLog(String num, String process, String queueName, int status, String reason, String bizType) {
+        try {
+            LambdaQueryWrapper<SceneBuildProcessLog> wrapper = new LambdaQueryWrapper<SceneBuildProcessLog>()
+                    .eq(SceneBuildProcessLog::getNum, num)
+                    .eq(SceneBuildProcessLog::getProcess, process)
+                    .eq(SceneBuildProcessLog::getQueueName, queueName);
+            if(StrUtil.isNotEmpty(bizType)){
+                wrapper.eq(SceneBuildProcessLog::getBizType, bizType);
+            }
+
+            SceneBuildProcessLog log = this.getOne(wrapper);
+            if(Objects.isNull(log)){
+                log = new SceneBuildProcessLog();
+            }
+            log.setNum(num);
+            log.setProcess(process);
+            log.setProcess(process);
+            log.setQueueName(queueName);
+            log.setState(status);
+            log.setReason(reason);
+            log.setUpdateTime(new Date());
+            log.setBizType(bizType);
+            this.saveOrUpdate(log);
+        }catch (Exception e){
+            log.error("保存计算流程日志报错", e);
         }
-        log.setNum(num);
-        log.setProcess(process);
-        log.setProcess(process);
-        log.setQueueName(queueName);
-        log.setState(status);
-        log.setReason(reason);
-        this.saveOrUpdate(log);
+
     }
 }