Browse Source

修改计算逻辑

tianboguang 3 năm trước cách đây
mục cha
commit
b960b1a58e

+ 1 - 1
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/constants/SysConstants.java

@@ -1,6 +1,6 @@
 package com.fdkankan.modeling.constants;
 
-import com.fdkankan.common.utils.FileUtils;
+import com.fdkankan.utils.utils.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;

+ 50 - 220
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/receiver/BuildSceneReceiver.java

@@ -1,30 +1,32 @@
 package com.fdkankan.modeling.receiver;
 
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.constant.ConstantFilePath;
-import com.fdkankan.common.constant.ConstantUrl;
-import com.fdkankan.common.utils.CreateObjUtil;
-import com.fdkankan.common.utils.FileUtil;
-import com.fdkankan.common.utils.FileUtils;
+import com.fdkankan.utils.constant.ConstantFilePath;
+import com.fdkankan.utils.constant.ConstantUrl;
+import com.fdkankan.mq.message.BuildSceneMqMessage;
+import com.fdkankan.utils.utils.CreateObjUtil;
+import com.fdkankan.utils.utils.FileUtil;
+import com.fdkankan.utils.utils.FileUtils;
 import com.fdkankan.modeling.constants.RedisKey;
 import com.fdkankan.modeling.constants.SysConstants;
-import com.fdkankan.modeling.entity.*;
+import com.fdkankan.modeling.entity.SceneFileBuild;
+import com.fdkankan.modeling.entity.ScenePro;
+import com.fdkankan.modeling.entity.SceneProExt;
+import com.fdkankan.modeling.entity.User;
 import com.fdkankan.modeling.push.PushMessageConfig;
 import com.fdkankan.modeling.service.*;
 import com.fdkankan.modeling.utils.ComputerUtil;
 import com.fdkankan.modeling.utils.DingDingUtils;
 import com.fdkankan.modeling.utils.PushMsgUtil;
+import com.fdkankan.oss.UploadUtils;
 import com.taobao.api.ApiException;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
 import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
-import org.apache.rocketmq.client.producer.DefaultMQProducer;
-import org.apache.rocketmq.common.message.Message;
 import org.apache.rocketmq.common.message.MessageExt;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -32,8 +34,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.client.RestTemplate;
-import com.fdkankan.utils.UploadUtils;
 
 import java.io.*;
 import java.security.InvalidKeyException;
@@ -64,13 +66,6 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
     private ISceneFileBuildService sceneFileBuildService;
 
     @Autowired
-    private ISceneProEditService sceneProEditService;
-
-
-    @Autowired
-    private ISceneProEditExtService sceneProEditExtService;
-
-    @Autowired
     private ISceneProExtService sceneProExtService;
 
     @Autowired
@@ -78,9 +73,6 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
 
     private RestTemplate restTemplate = new RestTemplate();
 
-    @Value("${main.url}")
-    private String mainUrl;
-
     @Value("${4dkk.laserService.host}")
     private String laserHost;
 
@@ -90,11 +82,6 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
     @Value("${oss.url.prefix}")
     private String prefixAli;
 
-    @Value("${scene.pro.mobile.show.url}")
-    private String sceneProNewUrl;
-
-    @Autowired
-    private DefaultMQProducer mqProducer;
 
     @Autowired
     private UploadUtils uploadUtils;
@@ -107,24 +94,23 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
             return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
         }
         MessageExt messageExt = msgExt.get(0);
-        Object object = JSON.parse(messageExt.getBody());
-        String msg = JSON.toJSONString(object);
-        log.info("开始处理消息,消息队列:{},消息内容:{}", consumeConcurrentlyContext.getMessageQueue().getTopic(), msg);
-        process(msg);
+        BuildSceneMqMessage message = JSONObject.parseObject(messageExt.getBody(), BuildSceneMqMessage.class);
+        log.info("开始处理消息,消息队列:{},消息内容:{}", consumeConcurrentlyContext.getMessageQueue().getTopic(),
+                JSONObject.toJSONString(message));
+        process(message);
         return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
     }
 
-    public void process(String content) {
+    public void process(BuildSceneMqMessage message) {
         final ExecutorService exec = Executors.newFixedThreadPool(1);
         Callable<String> call = (Callable<String>) () -> {
             //开始执行耗时操作
-            String[] strs = content.split(":;");
             try {
-                String key = RedisKey.SCENE_BUILDING + strs[4];
+                String key = RedisKey.SCENE_BUILDING + message.getSceneNum();
                 // 获取缓存锁,防止重复消费
                 Long building = redisTemplate.opsForValue().increment(key, 1);
                 if (building.compareTo(1L) != 0) {
-                    log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName, content);
+                    log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName, JSONObject.toJSONString(message));
                 } else {
                     redisTemplate.expire(key, Duration.of(SysConstants.modelTimeOut, ChronoUnit.HOURS));
                 }
@@ -132,24 +118,24 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
                 Thread.sleep(2000L);
                 try {
                     FileUtils.writeFile("/opt/hosts/running.txt", DateUtil.formatDateTime(new Date()));
-                    String tomcatLog = "scenenum:" + content + "\ntime:" + DateUtil.formatDateTime(new Date()) +
+                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
                             " action:create hostname:" + SysConstants.hostName;
                     //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
-                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + strs[4] + ".log", true);
+                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + ".log", true);
                     writer.write(tomcatLog);
                     writer.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
 
-                BuildSceneReceiver.this.buildScene(content);
+                buildScene(message);
                 redisTemplate.delete(key);
                 try {
                     FileUtils.deleteFile("/opt/hosts/running.txt");
-                    String tomcatLog = "scenenum:" + content + "\ntime:" + DateUtil.formatDateTime(new Date()) +
+                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
                             " action:delete hostname:" + SysConstants.hostName;
                     //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
-                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + strs[4] + "log", true);
+                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + "log", true);
                     writer.write(tomcatLog);
                     writer.close();
                 } catch (Exception e) {
@@ -157,8 +143,8 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
                 }
             } catch (Exception e) {
                 e.printStackTrace();
-                sceneProService.updateStatus(strs[4], -1);
-                BuildSceneReceiver.this.handFail("计算失败", content);
+                sceneProService.updateStatus(message.getSceneNum(), -1);
+                BuildSceneReceiver.this.handFail("计算失败", message);
             }
             log.info("场景生成好了***");
             return "success";
@@ -174,7 +160,7 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
             log.error(trace.toString());
             FileUtils.deleteFile("/opt/hosts/running.txt");
             future.cancel(true);
-            handFail("计算超时",content);
+            handFail("计算超时",message);
         } catch (Exception e) {
             e.printStackTrace();
             StringWriter trace=new StringWriter();
@@ -182,49 +168,41 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
             log.error(trace.toString());
             FileUtils.deleteFile("/opt/hosts/running.txt");
             future.cancel(true);
-            handFail("计算失败",content);
+            handFail("计算失败",message);
         }
 
     }
 
-    private void buildScene(String content){
+    private void buildScene(BuildSceneMqMessage message){
         String projectNum = null;
         SceneFileBuild sceneFileBuildEntity = null;
         ScenePro scene = null;
         SceneProExt sceneProExt = null;
         try{
-            String[] strs  = content.split(":;");
-
-            if(strs.length == 1){
+            if(StringUtils.equals(message.getIsStandardization(),"1")){
                 //表示标定算法
-                Map<String,String> map = ComputerUtil.computerCalibration(strs[0]);
+                ComputerUtil.computerCalibration(message.getPath());
                 return;
             }
 
-            String unicode = strs[0];
-            String path = strs[1];
-            String prefix = strs[2];
-            String imgsName = strs[3];
-            projectNum = strs[4];
-            String userName = strs[6];
+            String unicode = message.getUnicode();
+            String path = message.getPath();
+            String prefix = message.getPrefix();
+            String imgsName = message.getImgsName();
+            projectNum = message.getSceneNum();
+            String userName = message.getUserName();
             //不同的相机不同的方法
-            String cameraType = strs[7];
-            String algorithm = strs[8];
-            String fileId = strs[9];
-            String cameraName = strs[10];
+            String cameraType = message.getCameraType();
+            String algorithm = message.getAlgorithm();
+            String fileId = message.getFileId();
+            String cameraName = message.getCameraName();
             //0表示有4k图,1表示没有
-            String resolution = strs[11];
+            String resolution = message.getResolution();
 
             //判断调用V2还是V3版本的算法
-            String buildType = "V2";
-            if(strs.length >= 13){
-                buildType = strs[12];
-            }
+            String buildType = ObjectUtils.isEmpty(message.getBuildType()) ? "V2" : message.getBuildType();
+
 
-            String rebuild = "0";
-            if(strs.length >= 14){
-                rebuild = strs[13];
-            }
             log.info("执行数据库操作--前");
             sceneFileBuildEntity = sceneFileBuildService.findByFileId(fileId);
             log.info("执行数据库操作--后");
@@ -237,7 +215,6 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
 
             log.info("用的算法是:"+algorithm);
             log.info("用的相机是:"+ (Integer.parseInt(cameraType) < 4 ? "单球目" : "双球目(八目)"));
-            String isModel = strs[5];
             Map<String,String> map = new HashMap<>();
 
             //该场景使用的容量
@@ -295,7 +272,7 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
                 sceneProExt = sceneProExtService.lambdaQuery().eq(SceneProExt::getSceneProId, scene.getId()).getEntity();
                 if(scene == null){
                     log.info(projectNum + ":场景不存在");
-                    handFail("场景不存在",content);
+                    handFail("场景不存在",message);
                     return;
                 }
 
@@ -623,7 +600,7 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
                         log.info("激光转台相机 同步结束 :" + hotListJson);
                     }catch (Exception e){
                         e.printStackTrace();
-                        handFail("激光转台相机同步失败",content);
+                        handFail("激光转台相机同步失败",message);
                     }
                 }
             }
@@ -641,7 +618,7 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
             StringWriter trace=new StringWriter();
             e.printStackTrace(new PrintWriter(trace));
             log.error(trace.toString());
-            handFail("计算失败",content);
+            handFail("计算失败",message);
         }finally {
             try{
                 scene = sceneProService.findBySceneNum(projectNum);
@@ -676,156 +653,9 @@ public class BuildSceneReceiver implements MessageListenerConcurrently {
         }
     }
 
-    private void kanfangBuild(String content){
-
-        JSONObject json = JSONObject.parseObject(content);
-        String sceneName = json.getString("sceneName");
-        String sceneNum = json.getString("sceneNum");
-
-        // 获取缓存锁,防止重复消费
-        Long building = redisTemplate.opsForValue().increment(RedisKey.SCENE_BUILDING + sceneNum, 1);
-        if (building.compareTo(1L) != 0) {
-            log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName,content);
-            return;
-        }
-
-        int sceneScheme = json.getIntValue("sceneScheme");
-        long userId = json.getLong("userId");
-        String dataSource = json.getString("dataSource");
-        String queue = json.getString("callbackQueue");
-        log.info("sceneName: {}, sceneNum: {}, sceneScheme: {}, userId: {}, dataSource:{}, queue:{}",
-                sceneName, sceneNum, sceneScheme, userId, dataSource, queue);
-
-        JSONObject result = new JSONObject();
-        result.put("sceneNum", sceneNum);
-
-        try{
-            ScenePro scenePro = sceneProService.findBySceneNum(sceneNum);
-
-            if(scenePro == null){
-                scenePro = new ScenePro();
-                SceneProExt sceneProExt = new SceneProExt();
-
-                sceneProExt.setDataSource(dataSource);
-                scenePro.setSceneName(sceneName);
-                scenePro.setSceneCode(sceneNum);
-                scenePro.setUserId(userId);
-                scenePro.setSceneScheme(sceneScheme);
-                sceneProExt.setSceneStatus(0);
-                scenePro.setWebSite(mainUrl + sceneProNewUrl + sceneNum);
-                sceneProExt.setPayStatus(1);
-                scenePro.setBuildType("V3");
-                sceneProExt.setSceneSource(12);
-                scenePro.setSceneDec("<p>快速打造3D空间模型,让三维数字技术服务于生活。</p>");
-                sceneProService.save(scenePro);
-                sceneProExtService.save(sceneProExt);
-
-                SceneProEdit sceneEdit = new SceneProEdit();
-                SceneProEditExt sceneEditExt = new SceneProEditExt();
-                sceneEdit.setNeedKey(0);
-
-                sceneEdit.setProId(scenePro.getId());
-                sceneEditExt.setMapVisi(1);
-                sceneEditExt.setTourVisi(1);
-                sceneEditExt.setVrVisi(1);
-                sceneEditExt.setRulerVisi(1);
-                sceneEditExt.setCadImgVisi(1);
-                sceneEditExt.setPanoVisi(1);
-                sceneEditExt.setM2dVisi(1);
-                sceneEditExt.setM3dVisi(1);
-                sceneEditExt.setMeasureVisi(0);
-                sceneEdit.setFloorLogoSize(100);
-                sceneEdit.setCreateTime(new Date());
-                sceneProEditService.save(sceneEdit);
-                sceneProEditExtService.save(sceneEditExt);
-
-                //生成二维码logo
-                restTemplate.getForObject(mainUrl + "api/scene/createSketchQrLogo?sceneNum=" + sceneNum,String.class);
-            }else {
-
-                SceneProExt sceneProExt = sceneProExtService.lambdaQuery()
-                        .eq(SceneProExt::getSceneProId,scenePro.getId()).getEntity();
-
-                sceneProExt.setDataSource(dataSource);
-                scenePro.setSceneName(sceneName);
-                scenePro.setSceneCode(sceneNum);
-                scenePro.setUserId(userId);
-                scenePro.setSceneScheme(sceneScheme);
-                sceneProExt.setSceneStatus(0);
-                scenePro.setWebSite(mainUrl + sceneProNewUrl + sceneNum);
-                sceneProExt.setPayStatus(1);
-                scenePro.setBuildType("V3");
-                sceneProExt.setSceneSource(12);
-                sceneProService.updateById(scenePro);
-                sceneProExtService.updateById(sceneProExt);
-
-                SceneProEdit sceneEdit = sceneProEditService.lambdaQuery()
-                        .eq(SceneProEdit::getProId,scenePro.getId()).getEntity();
-
-                SceneProEditExt sceneProEditExt = sceneProEditExtService.lambdaQuery()
-                        .eq(SceneProEditExt::getProEditId,sceneEdit.getId()).getEntity();
-
-                sceneEdit.setNeedKey(0);
-
-                sceneEdit.setProId(scenePro.getId());
-                sceneEdit.setVersion(sceneEdit.getVersion() + 1);
-                sceneProEditExt.setImagesVersion(sceneProEditExt.getImagesVersion() + 1);
-                sceneEdit.setFloorEditVer(sceneEdit.getFloorEditVer() + 1);
-                sceneEdit.setFloorPublishVer(sceneEdit.getFloorPublishVer() + 1);
-                sceneEdit.setUpdateTime(new Date());
-                sceneProEditService.updateById(sceneEdit);
-                sceneProEditExtService.updateById(sceneProEditExt);
-            }
-
-
-            com.alibaba.fastjson.JSONObject scenejson = com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(scenePro));
-            FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+sceneNum+File.separator+"scene.json", scenejson.toString());
-
-            //计算模型并返回需要上传oss的文件集合
-            Map map = ComputerUtil.computer(sceneNum, dataSource, "V3");
-            uploadUtils.uploadMulFiles(map);
-
-            sceneProService.updateStatus(sceneNum, -2);
-
-            log.info("计算完成,发送mq通知123看房");
-
-            result.put("result", 1);
-            result.put("code", 0);
-            result.put("msg", "计算完成");
-            Message msg = new Message(queue,JSONObject.toJSONString(result).getBytes());
-            mqProducer.send(msg);
-        }catch (Exception e){
-            sceneProService.updateStatus(sceneNum, -1);
-
-            log.info("计算失败,发送mq通知123看房");
-
-            result.put("result", 0);
-            result.put("code", 500);
-            result.put("msg", "计算失败");
-
-            Message msg = new Message(queue,JSONObject.toJSONString(result).getBytes());
-            try {
-                mqProducer.send(msg);
-            } catch (Exception ee) {
-                ee.printStackTrace();
-            }
-            handFail("看房场景计算失败",dataSource,sceneNum);
-        }
-    }
-
-    private void handFail(String reason,String content){
-        String serverPath = "";
-        String num = "";
-        if(content.contains(":;")){
-            String[] strs  = content.split(":;");
-            serverPath = strs[1].substring(0,strs[1].lastIndexOf("/")+1).concat(strs[2]);
-            num = strs[4];
-        }else{
-            JSONObject json = JSONObject.parseObject(content);
-            num = json.getString("sceneNum");
-            serverPath = json.getString("dataSource");
-        }
-        handFail(reason,serverPath,num);
+    private void handFail(String reason,BuildSceneMqMessage message){
+        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
+        handFail(reason,serverPath,message.getSceneNum());
     }
 
     private void handFail(String reason,String serverPath,String num){

+ 4 - 4
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/utils/ComputerUtil.java

@@ -2,10 +2,10 @@ package com.fdkankan.modeling.utils;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.constant.ConstantFileName;
-import com.fdkankan.common.constant.ConstantFilePath;
-import com.fdkankan.common.utils.CreateObjUtil;
-import com.fdkankan.common.utils.FileUtils;
+import com.fdkankan.utils.constant.ConstantFileName;
+import com.fdkankan.utils.constant.ConstantFilePath;
+import com.fdkankan.utils.utils.CreateObjUtil;
+import com.fdkankan.utils.utils.FileUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 

+ 1 - 1
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/utils/DingDingUtils.java

@@ -4,7 +4,7 @@ import com.dingtalk.api.DefaultDingTalkClient;
 import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.OapiRobotSendRequest;
 import com.dingtalk.api.response.OapiRobotSendResponse;
-import com.fdkankan.common.utils.Base64Converter;
+import com.fdkankan.utils.utils.Base64Converter;
 import com.fdkankan.modeling.constants.SysConstants;
 import com.taobao.api.ApiException;
 import org.slf4j.Logger;

+ 1 - 1
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/utils/PushMsgUtil.java

@@ -1,6 +1,6 @@
 package com.fdkankan.modeling.utils;
 
-import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.utils.constant.ConstantFilePath;
 import com.google.auth.oauth2.GoogleCredentials;
 import com.google.firebase.FirebaseApp;
 import com.google.firebase.FirebaseOptions;