Jelajahi Sumber

修改计算逻辑

tianboguang 2 tahun lalu
induk
melakukan
d831024f3a

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

@@ -7,9 +7,11 @@ import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
+import org.springframework.util.ObjectUtils;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
 
 @Slf4j
 public class AbstrackBuildSceneListener implements IBuildSceneListener {
@@ -21,6 +23,12 @@ public class AbstrackBuildSceneListener implements IBuildSceneListener {
         log.info("开始准备场景计算资源,队列名:{},id:{},消息体:{}", queueName, correlationId, msg);
         BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        if(ObjectUtils.isEmpty(buildSceneMessage.getBuildContext())){
+            buildSceneMessage.setBuildContext(new HashMap<>());
+        }
+        if(!ObjectUtils.isEmpty(buildSceneMessage.getSceneNum())){
+            buildSceneMessage.getBuildContext().put("sceneNum",buildSceneMessage.getSceneNum());
+        }
         buildSceneService.buildScenePre(buildSceneMessage);
         log.info("准备场景计算资源完成,队列名:{},id:{},消息体:{}", queueName, correlationId, msg);
     }

+ 22 - 19
src/main/java/com/fdkankan/contro/mq/service/impl/BuildObjServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.mq.service.IBuildSceneService;
+import com.fdkankan.contro.service.IBuildSceneDTService;
 import com.fdkankan.contro.service.IFdkkLaserService;
 import com.fdkankan.contro.service.ISceneProService;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
@@ -16,7 +17,6 @@ import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
-import jodd.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -58,16 +58,20 @@ public class BuildObjServiceImpl implements IBuildSceneService {
     @Autowired
     private FdkkV4Service fdkkV4Service;
 
+    @Autowired
+    private IBuildSceneDTService buildSceneDTService;
+
     @Override
     public void buildScenePre(BuildSceneCallMessage message) {
         boolean success = false;
         try {
+            String path = message.getPath();
             //根据相机类型,组装资源路径
-            String laserObjFilePath = message.getDataSource() + "_laser_obj";
+            String laserObjFilePath = path + "_laser_obj";
             log.info("开始生成OBJ文件,路径:{}", laserObjFilePath);
 
             FileUtils.delAllFile(laserObjFilePath);
-            String path = message.getDataSource();
+
             //获取解压后的资源的data.fdage中的数据
             File folderPath = new File(path);
             fYunFileService.downloadFile(ConstantFilePath.OSS_PREFIX + path.replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage", path + "/capture/");
@@ -91,13 +95,11 @@ public class BuildObjServiceImpl implements IBuildSceneService {
             //下载资源到本地
             this.downLoadSource(message, laserObjFilePath);
 
-            String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
-
             message.setCameraType("14");
-            message.setUnicode(unicode);
             message.setResolution(jsonObject.getString("resolution"));
 
-            message.setDataSource(laserObjFilePath);
+            message.setPath(laserObjFilePath);
+            message.getBuildContext().put("previousPath",path);
 
             message.setResultReceiverMqName(queueObjModelingPost);
 
@@ -113,8 +115,7 @@ public class BuildObjServiceImpl implements IBuildSceneService {
         }finally {
             //如果前置处理失败,发送钉钉消息
             if(!success){
-                String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-//            buildSceneDTService.handFail("场景计算前置处理出错", serverPath, message.getSceneNum(), BuildScenePreServiceImpl.hostName, null);
+                buildSceneDTService.handFail("生成OBJ场景资源准备异常", message.getPath(), message.getSceneNum(), "计算控制服务器", null);
             }
 
         }
@@ -122,21 +123,23 @@ public class BuildObjServiceImpl implements IBuildSceneService {
 
     @Override
     public void downLoadSource(BuildSceneCallMessage message,String path) throws Exception{
-        FileUtils.copyFile(message.getDataSource() + "/caches/reconstruction/final.bin", path + "/caches/reconstruction/final.bin", true);
-        FileUtils.copyFile(message.getDataSource() + "/caches/reconstruction/chunk.json", path + "/caches/reconstruction/chunk.json", true);
-        FileUtils.copyDirectiory(message.getDataSource() + "/caches/images", path + "/caches/images");
-
-        FileUtils.copyDirectiory(message.getDataSource() + "/caches/depthmap_csc", path + "/caches/depthmap_csc");
-        FileUtils.copyDirectiory(message.getDataSource() + "/caches/depthmap_vis", path + "/caches/depthmap_vis");
-        FileUtils.copyDirectiory(message.getDataSource() + "/caches/depthmap", path + "/caches/depthmap");
-        FileUtils.copyFile(message.getDataSource() + "/caches/panorama.json", path + "/caches/panorama.json", true);
-        FileUtils.copyFile(message.getDataSource() + "/results/laserData/laser.ply", path + "/results/laserData/laser.ply", true);
+
+        String prevoisPath = message.getBuildContext().get("previousPath").toString();
+        FileUtils.copyFile(prevoisPath + "/caches/reconstruction/final.bin", path + "/caches/reconstruction/final.bin", true);
+        FileUtils.copyFile(prevoisPath + "/caches/reconstruction/chunk.json", path + "/caches/reconstruction/chunk.json", true);
+        FileUtils.copyDirectiory(prevoisPath + "/caches/images", path + "/caches/images");
+
+        FileUtils.copyDirectiory(prevoisPath + "/caches/depthmap_csc", path + "/caches/depthmap_csc");
+        FileUtils.copyDirectiory(prevoisPath + "/caches/depthmap_vis", path + "/caches/depthmap_vis");
+        FileUtils.copyDirectiory(prevoisPath + "/caches/depthmap", path + "/caches/depthmap");
+        FileUtils.copyFile(prevoisPath + "/caches/panorama.json", path + "/caches/panorama.json", true);
+        FileUtils.copyFile(prevoisPath + "/results/laserData/laser.ply", path + "/results/laserData/laser.ply", true);
     }
 
     @Override
     public void buildScenePost(BuildSceneResultMqMessage message) throws Exception {
         String path = message.getPath();
-        String projectNum = message.getSceneCode();
+        String projectNum = message.getBuildContext().get("sceneNum").toString();
 
         String laserObjFilePath = path;
         CreateObjUtil.convertTxtToDam(laserObjFilePath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");

+ 15 - 36
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -60,11 +60,6 @@ import java.util.stream.Collectors;
 @Service
 public class BuildSceneServiceImpl implements IBuildSceneService {
 
-    @Value("${main.url}")
-    private String mainUrl;
-    @Value("${scene.pro.new.url}")
-    private String sceneProNewUrl;
-
     @Value("${queue.modeling.modeling-call}")
     private String queueModelingCall;
 
@@ -73,9 +68,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
     @Autowired
     private FYunFileServiceInterface fYunFileService;
-
-    @Autowired
-    private ISceneFileBuildService sceneFileBuildService;
     @Autowired
     private ICameraDetailService cameraDetailService;
     @Autowired
@@ -101,15 +93,19 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
     @Autowired
     private IFdkkLaserService fdkkLaserService;
 
+
+    @Autowired
+    private IBuildSceneDTService buildSceneDTService;
+
     @Override
     public void buildScenePre(BuildSceneCallMessage message) {
         boolean success = false;
         try {
             //根据相机类型,组装资源路径
-            String path = message.getDataSource();
-
             //下载资源到本地
-            this.downLoadSource(message, path);
+            this.downLoadSource(message, message.getPath());
+
+            message.getBuildContext().put("cameraType",message.getCameraType());
 
             //发送mq,就进行计算
             mqProducer.sendByWorkQueue(queueModelingCall, message);
@@ -123,8 +119,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         }finally {
             //如果前置处理失败,发送钉钉消息
             if(!success){
-                String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-//            buildSceneDTService.handFail("场景计算前置处理出错", serverPath, message.getSceneNum(), BuildScenePreServiceImpl.hostName, null);
+                buildSceneDTService.handFail("场景计算资源准备异常!", message.getPath(), message.getSceneNum(), "计算控制服务器", null);
             }
 
         }
@@ -144,9 +139,8 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
     @Override
     public void buildScenePost(BuildSceneResultMqMessage message) throws Exception {
-        Integer cameraType = Integer.parseInt(message.getCameraType());
-        String sceneCode = message.getSceneCode();
-        String fileId = message.getFileId();
+        Integer cameraType = Integer.parseInt(message.getBuildContext().get("cameraType").toString());
+        String sceneCode = message.getBuildContext().get("sceneNum").toString();
         Long computeTime = message.getComputeTime();
 
         String path = message.getPath();
@@ -154,9 +148,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
         Boolean buildSuccess = message.getBuildSuccess();
         JSONObject fdageData = getFdageData(path + File.separator + "capture" +File.separator+"data.fdage");
         Integer videoVersion = fdageData.getInteger("videoVersion");
-
-
-        String prefix = message.getPrefix();
         try {
             // 上传计算日志
             //如果是重复计算,没有走到计算逻辑,不需要上传日志文件
@@ -170,12 +161,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
                         .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
                         .eq(ScenePlus::getNum, sceneCode));
-
-                SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
-                if (Objects.nonNull(sceneFileBuild)) {
-                    sceneFileBuild.setBuildStatus(BuildStatus.fail.code());
-                    sceneFileBuildService.updateById(sceneFileBuild);
-                }
                 throw new RuntimeException("建模失败!");
             }
 
@@ -197,7 +182,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             JSONObject videosJson = this.getVideosJson(path, videoVersion, sceneCode, cameraType);
 
             //写入数据库
-            ScenePlus scenePlus = this.updateDbPlus(sceneCode, space, videosJson.toJSONString(), computeTime, fileId,fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1);
+            ScenePlus scenePlus = this.updateDbPlus(sceneCode, space, videosJson.toJSONString(), computeTime,fdageData.containsKey("exportMeshObj") && fdageData.getIntValue("exportMeshObj") == 1);
             ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
 
             //变更容量,arrearCap为true时,代表容量不足
@@ -268,7 +253,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
 
             CreateObjUtil.deleteFile(path.replace(ConstantFilePath.BUILD_MODEL_PATH, "/") + "/capture");
 
-            log.info("场景计算结果处理结束,场景码:{}", message.getSceneCode());
+            log.info("场景计算结果处理结束,场景码:{}", sceneCode);
 
         }catch (Exception e){
             String errorMsg = "场景计算结果处理出错!";
@@ -278,8 +263,8 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 errorMsg = "场景构建失败!";
             }
             //发送钉钉
-            String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(prefix);
-//            buildSceneDTService.handFail(errorMsg, serverPath, sceneCode, BuildScenePreServiceImpl.hostName, BuildScenePreServiceImpl.contentExt);
+            String serverPath = message.getPath();
+            buildSceneDTService.handFail(errorMsg, serverPath, sceneCode, message.getHostName(), null);
         }
     }
 
@@ -646,7 +631,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
                 .set(ScenePlusExt::getAlgorithmTime, Calendar.getInstance().getTime()));
     }
 
-    private ScenePlus updateDbPlus(String num, Long space, String videosJson, Long computeTime, String fileId,boolean isObj){
+    private ScenePlus updateDbPlus(String num, Long space, String videosJson, Long computeTime,boolean isObj){
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         List<ScenePlus> list = scenePlusService.list(new LambdaQueryWrapper<ScenePlus>()
@@ -664,12 +649,6 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             .set(ScenePlus::getUpdateTime, new Date())
             .set(ScenePlus::getPayStatus, PayStatus.PAY.code()));
 
-        SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
-        if(sceneFileBuild != null){
-            sceneFileBuild.setBuildStatus(BuildStatus.success.code());
-            sceneFileBuildService.updateById(sceneFileBuild);
-        }
-
         scenePlusExt.setSpace(space);
         scenePlusExt.setComputeTime(computeTime.toString());
         scenePlusExt.setAlgorithmTime(new Date());

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

@@ -41,10 +41,10 @@ public class BuildSceneDTServiceImpl implements IBuildSceneDTService {
     private String environment;
 
     @Override
-    public void handFail(String reason, String serverPath, String num, String hostName, String contentExt) {
+    public void handFail(String reason, String serverPath, String num, String hostName, String message) {
         CompletableFuture.runAsync(() -> {
             try {
-                String contentFormat = StrUtil.isBlank(contentExt) ? this.DINGTALK_MSG_PATTERN : this.DINGTALK_MSG_PATTERN +  contentExt;
+                String contentFormat = StrUtil.isBlank(message) ? this.DINGTALK_MSG_PATTERN : this.DINGTALK_MSG_PATTERN +  contentExt;
                 String content = String.format(contentFormat, this.environment, hostName, reason, num, serverPath, num, num);
                 log.info("发送钉钉消息,content:{}", content);
                 dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");

+ 7 - 48
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -3,77 +3,33 @@ package com.fdkankan.contro.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.BooleanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.CameraConstant;
-import com.fdkankan.common.constant.CommonStatus;
-import com.fdkankan.common.constant.ConstantUrl;
-import com.fdkankan.common.constant.ErrorCode;
-import com.fdkankan.common.constant.RecStatus;
-import com.fdkankan.common.constant.SceneStatus;
+import com.fdkankan.common.constant.*;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DateExtUtil;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.SnowflakeIdGenerator;
-import com.fdkankan.contro.entity.Camera;
-import com.fdkankan.contro.entity.CameraDetail;
-import com.fdkankan.contro.entity.Company;
-import com.fdkankan.contro.entity.SSOUser;
-import com.fdkankan.contro.entity.SceneCooperation;
-import com.fdkankan.contro.entity.SceneEditControls;
-import com.fdkankan.contro.entity.SceneEditInfo;
-import com.fdkankan.contro.entity.SceneEditInfoExt;
-import com.fdkankan.contro.entity.SceneFileBuild;
-import com.fdkankan.contro.entity.ScenePlus;
-import com.fdkankan.contro.entity.ScenePlusExt;
-import com.fdkankan.contro.entity.ScenePro;
-import com.fdkankan.contro.entity.SceneResourceCamera;
-import com.fdkankan.contro.entity.SceneResourceCooperation;
+import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
-import com.fdkankan.contro.service.ICameraDetailService;
-import com.fdkankan.contro.service.ICameraService;
-import com.fdkankan.contro.service.ICompanyService;
-import com.fdkankan.contro.service.IFdkkLaserService;
-import com.fdkankan.contro.service.IScene3dNumService;
-import com.fdkankan.contro.service.ISceneCooperationService;
-import com.fdkankan.contro.service.ISceneEditControlsService;
-import com.fdkankan.contro.service.ISceneEditInfoExtService;
-import com.fdkankan.contro.service.ISceneEditInfoService;
-import com.fdkankan.contro.service.ISceneFileBuildService;
-import com.fdkankan.contro.service.IScenePlusExtService;
-import com.fdkankan.contro.service.IScenePlusService;
-import com.fdkankan.contro.service.ISceneProService;
-import com.fdkankan.contro.service.ISceneResourceCameraService;
-import com.fdkankan.contro.service.ISceneResourceCooperationService;
-import com.fdkankan.contro.service.IUserService;
+import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.contro.vo.ScenePlusVO;
 import com.fdkankan.fyun.config.FYunFileConfig;
-import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.image.MatrixToImageWriterUtil;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
-import com.fdkankan.model.utils.ComputerUtil;
-import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.web.config.FileRouteConfig;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.util.RSAEncrypt;
-import java.io.File;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
@@ -82,6 +38,9 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.io.File;
+import java.util.*;
+
 /**
  * <p>
  * 场景文件建模表 服务实现类
@@ -955,7 +914,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         mqMsg.setAlgorithm(algorithm);
         mqMsg.setResolution(String.valueOf(resolution));
         mqMsg.setBuildType(buildType);
-        mqMsg.setDataSource(dataSource);
+        mqMsg.setPath(dataSource);
         mqMsg.setCreateTime(DateUtil.format(Calendar.getInstance().getTime(), DateExtUtil.dateStyle));
         return mqMsg;
     }