Selaa lähdekoodia

修改激光、obj 场景构建逻辑

tianboguang 2 vuotta sitten
vanhempi
commit
0b332c7f85

+ 97 - 0
src/main/java/com/fdkankan/contro/common/Result.java

@@ -0,0 +1,97 @@
+package com.fdkankan.contro.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 通用返回类
+ *
+ * @author
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Result<T> implements Serializable {
+    private static final long serialVersionUID = -1491499610244557029L;
+    public static final String SUCCESS_MSG = "操作成功";
+    public static int CODE_SUCCESS = 0;
+    public static int CODE_FAILURE = -1;
+    public static String[] NOOP = new String[]{};
+
+    /**
+     * 处理状态:0: 成功, 1: 失败
+     */
+    private int code;
+    /**
+     * 消息
+     */
+    private String msg;
+    /**
+     * 返回数据
+     */
+    private T data;
+    /**
+     * 处理成功,并返回数据
+     *
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(Object data) {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, data);
+    }
+    /**
+     * 处理成功
+     *
+     * @return data
+     */
+    public static Result success() {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, NOOP);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result success(String msg) {
+        return new Result(CODE_SUCCESS, msg, NOOP);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg  消息
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(String msg, Object data) {
+        return new Result(CODE_SUCCESS, msg, data);
+    }
+    /**
+     * 处理失败,并返回数据(一般为错误信息)
+     *
+     * @param code 错误代码
+     * @param msg  消息
+     * @return data
+     */
+    public static Result failure(int code, String msg) {
+        return new Result(code, msg, NOOP);
+    }
+    /**
+     * 处理失败
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result failure(String msg) {
+        return failure(CODE_FAILURE, msg);
+    }
+
+    @Override
+    public String toString() {
+        return "JsonResult [code=" + code + ", msg=" + msg + ", data="
+                + data + "]";
+    }
+}

+ 56 - 7
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneObjPostServiceImpl.java

@@ -3,12 +3,16 @@ package com.fdkankan.contro.mq.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.mq.service.IBuildScenePostService;
-import com.fdkankan.contro.service.IScenePlusService;
+import com.fdkankan.contro.service.IFdkkLaserService;
+import com.fdkankan.contro.service.ISceneProService;
 import com.fdkankan.contro.service.impl.FdkkV4Service;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFileName;
 import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,8 +36,10 @@ public class BuildSceneObjPostServiceImpl implements IBuildScenePostService {
     private FYunFileServiceInterface fYunFileService;
 
     @Autowired
-    private IScenePlusService scenePlusService;
+    private ISceneProService sceneProService;
 
+    @Autowired
+    private IFdkkLaserService fdkkLaserService;
 
     @Autowired
     private FdkkV4Service fdkkV4Service;
@@ -42,6 +48,7 @@ public class BuildSceneObjPostServiceImpl implements IBuildScenePostService {
     public void buildScenePost(BuildSceneResultMqMessage message) throws Exception {
         // 去除 OnlyExportMeshObj
         String path = message.getPath();
+        String projectNum = message.getSceneCode();
         String dataFdagePath = path + File.separator + "capture" + File.separator + "data.fdage";
         log.info("dataFdagePath 文件路径 :{}", dataFdagePath);
         String data = FileUtils.readFile(dataFdagePath);
@@ -55,11 +62,53 @@ public class BuildSceneObjPostServiceImpl implements IBuildScenePostService {
         fYunFileService.uploadFile(path + File.separator + "capture" + File.separator + "data.fdage",
                 ConstantFilePath.OSS_PREFIX + path.replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage");
 
-        LambdaUpdateWrapper<ScenePlus> updateWrapper = new LambdaUpdateWrapper<ScenePlus>()
-                .set(ScenePlus::getSceneStatus, -2).eq(ScenePlus::getNum, message.getSceneCode());
-        scenePlusService.update(updateWrapper);
+
+        String laserObjFilePath = path + "_laser_obj";
+        CreateObjUtil.convertTxtToDam(laserObjFilePath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+        CreateObjUtil.convertDamToLzma(laserObjFilePath + File.separator + "results");
+        CreateObjUtil.convertTxtToDam(laserObjFilePath + File.separator + "results" + File.separator + "tex" + File.separator + "modeldata.txt", laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam");
+        File file = new File(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma");
+        while (!file.exists()) {
+            Thread.sleep(60000);
+        }
+
+        fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam.lzma", "images/images" + projectNum + "/" + ConstantFileName.modelUUID + "_50k.dam.lzma");
+        fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + ConstantFileName.modelUUID + "_50k.dam", "images/images" + projectNum + "/" + ConstantFileName.modelUUID + "_50k.dam");
+
+        String texPath = laserObjFilePath + File.separator + "results" + File.separator + "tex";
+
+        File texFile = new File(texPath);
+        if(texFile.exists()){
+            for (File textureFile : texFile.listFiles()) {
+                if(textureFile.getName().endsWith(".jpg")){
+                    fYunFileService.uploadFile(textureFile.getAbsolutePath(), "images/images" +
+                            projectNum + "/" + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/"+textureFile.getName());
+                }
+            }
+        }
+
+        fYunFileService.uploadFile(laserObjFilePath + File.separator + "results" + File.separator + "tex/texture1.jpg", "images/images" +
+                projectNum + "/" + ConstantFileName.modelUUID + "_50k_texture_jpg_high1/texture1.jpg");
+
+        // 拷贝结果
+        log.info("开始拷贝obj文件");
+        FileUtils.copyFolderAllFiles(laserObjFilePath + "/results/mesh", laserObjFilePath + "/laserData/mesh/", true);
+
+        File meshFolder = new File(laserObjFilePath + "/results/mesh");
+
+        for (File meshFile : meshFolder.listFiles()) {
+            fYunFileService.uploadFile(meshFile.getAbsolutePath(), String.format(UploadFilePath.DATA_VIEW_PATH,  projectNum) + "mesh/" + meshFile.getName());
+        }
+
+        fdkkLaserService.pushBuildStatusToLaserSystem(projectNum, laserObjFilePath + "/laserData/mesh");
+
+        LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<ScenePro>()
+                .set(ScenePro::getStatus, -2).eq(ScenePro::getNum, projectNum);
+        sceneProService.update(updateWrapper);
+
+        ScenePro scenePro = sceneProService.getByNum(projectNum);
 
         // 如果未升级V4,则升级V4
-        fdkkV4Service.upgradeToV4(ScenePlus.getIsUpgrade().equals(1), scene.getNum());
+        fdkkV4Service.upgradeToV4(scenePro);
     }
 }

+ 14 - 3
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneObjPreServiceImpl.java

@@ -1,8 +1,6 @@
 package com.fdkankan.contro.mq.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.util.DateExtUtil;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.contro.mq.service.IBuildScenePreService;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
@@ -10,6 +8,7 @@ import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 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;
@@ -17,7 +16,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.io.File;
-import java.util.Calendar;
 
 /**
  * <p>
@@ -75,6 +73,19 @@ public class BuildSceneObjPreServiceImpl implements IBuildScenePreService {
             //下载资源到本地
             this.downLoadSource(message, laserObjFilePath);
 
+            String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
+
+            Long cameraType = 10L;
+            //根据videoVersion判断是V2还是V3版本的算法和页面
+            if(jsonObject.containsKey("videoVersion") && StringUtil.isNotEmpty(jsonObject.getString("videoVersion"))){
+                if(jsonObject.getIntValue("videoVersion") >= 4){
+                    cameraType = 11L;
+                }
+            }
+            message.setCameraType(cameraType.toString());
+            message.setUnicode(unicode);
+            message.setResolution(jsonObject.getString("resolution"));
+
             message.setDataSource(laserObjFilePath);
 
             message.setResultReceiverMqName(queueObjModelingPost);

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

@@ -17,4 +17,6 @@ public interface IFdkkLaserService {
 
     void syncBuildResult(ScenePlus scenePlus, ScenePlusExt scenePlusExt);
 
+    void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath);
+
 }

+ 0 - 66
src/main/java/com/fdkankan/contro/service/impl/FdkkLaserService.java

@@ -1,66 +0,0 @@
-package com.fdkankan.contro.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.model.Result;
-import com.fdkankan.common.util.DateUtil;
-import com.fdkankan.entity.SceneProEntity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.util.ObjectUtils;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@Service
-public class FdkkLaserService {
-    private static final Logger log = LoggerFactory.getLogger(FdkkLaserService.class);
-
-    private final String SAVE_SCENE_URL_TEMPLATE="/laser/init/%s/saveOrEdit";
-    private final String ENABLE_COOPERATION_CAMERA_URL="/laser/4dage/scene/cooperation/cameraSave";
-    private final String EDIT_LASER_BUILD_STATUS_URL="/laser/4dage/scene/editBuildStatus";
-
-    @Value("${4dkk.laserService.host}")
-    private String laserHost;
-
-    @Autowired
-    private ISceneProService sceneProService;
-
-    private RestTemplate restTemplate = new RestTemplate();
-
-    public void updateSceneStatus(String sceneCode, int sceneStatus, String path){
-        String url = laserHost + String.format(SAVE_SCENE_URL_TEMPLATE,sceneCode);
-        Map<String,Object> params = new HashMap<>();
-        params.put("sceneCode", sceneCode);
-        params.put("status", sceneStatus);
-        SceneProEntity sceneProEntity = sceneProService.findBySceneNum(sceneCode);
-        params.put("createTime", DateUtil.date2String(sceneProEntity.getCreateTime(),null));
-        if(!ObjectUtils.isEmpty(path)){
-            params.put("path", path);
-        }
-        log.info("自研激光转台相机同步,url:{},params:{}",url, JSONObject.toJSONString(params));
-        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
-        log.info("自研激光转台相机同步,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
-        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
-            log.error("激光场景状态同步失败!");
-        }
-    }
-
-    public void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath) {
-        String url = laserHost + EDIT_LASER_BUILD_STATUS_URL;
-        Map<String,String> params = new HashMap<>();
-        params.put("sceneCode",projectNum);
-        params.put("objPath",laserObjFilePath);
-        log.info("激光系统同步BuildStatus,url:{},params:{}",ENABLE_COOPERATION_CAMERA_URL, JSONObject.toJSONString(params));
-        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
-        log.info("激光系统同步BuildStatus,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
-        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
-            log.error("激光系统同步BuildStatus");
-        }
-    }
-}

+ 17 - 35
src/main/java/com/fdkankan/contro/service/impl/FdkkV4Service.java

@@ -1,12 +1,10 @@
 package com.fdkankan.contro.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.base.constant.SceneConstant;
-import com.fdkankan.common.exception.BaseRuntimeException;
-import com.fdkankan.common.model.Result;
-import com.fdkankan.entity.SceneProEditEntity;
-import com.fdkankan.entity.SceneProEntity;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.contro.common.Result;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.service.ISceneProService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,14 +14,11 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
-import java.util.Map;
-
 @Service
 public class FdkkV4Service {
     private static final Logger log = LoggerFactory.getLogger(FdkkV4Service.class);
 
-    private final String UPGRADE_TO_V4="/service-v3/scene/upgradeToV4";
+    private final String UPGRADE_TO_V4="/api/user/scene?num=%s";
 
     @Value("${4dkk.v4Service.host}")
     private String v4Host;
@@ -32,32 +27,20 @@ public class FdkkV4Service {
 
     @Autowired
     private ISceneProService sceneProService;
-    @Autowired
-    private ISceneProEditService sceneProEditService;
 
     /**
      * 场景升级
-     * @param reUpgrade  默认已升级过的场景不允许重复升级,如果为true,则强制重新升级
-     * @param num 场景码
+     * @param scenePro  升级的场景信息
      * @return
      * @throws Exception
      */
-    public Result upgradeToV4(boolean reUpgrade, String num) throws Exception{
-        String url = v4Host + UPGRADE_TO_V4;
-        SceneProEntity sceneProEntity = sceneProService.findBySceneNum(num);
-        if(sceneProEntity == null){
-            throw new BaseRuntimeException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
-        }
-        SceneProEditEntity sceneProEditEntity = sceneProEditService.findByProId(sceneProEntity.getId());
-        Map<String,Object> params = new HashMap<>();
-        params.put("reUpgrade", reUpgrade);
-        params.put("scenePro", JSON.toJSONString(sceneProEntity));
-        params.put("sceneProEdit", JSON.toJSONString(sceneProEditEntity));
-        log.info("v3场景升级v4,url:{},params:{}",url, JSONObject.toJSONString(params));
-        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url, params, Result.class);
-        log.info("v3场景升级v4,url:{},params:{},结果,{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+    public void upgradeToV4(ScenePro scenePro){
+        String url = v4Host + String.format(UPGRADE_TO_V4,scenePro.getNum());
+        log.info("v3场景升级v4,url:{}",url);
+        ResponseEntity<Result> responseEntity = restTemplate.getForEntity(url, Result.class);
+        log.info("v3场景升级v4,url:{},结果,{}",url, JSONObject.toJSONString(responseEntity.getBody()));
         if(responseEntity.getStatusCode() != HttpStatus.OK){
-            return Result.failure("场景升级失败,请稍后再试!");
+            log.error("场景升级失败,请稍后再试!");
         }
         Integer code = responseEntity.getBody().getCode();
         if(code != 0){
@@ -67,15 +50,14 @@ public class FdkkV4Service {
             }else if(code == 7020){
                 msg = "场景已升级,不能重复升级";
             }
-            return Result.failure(code, msg);
+            log.error(msg);
+            return;
         }
 
-        sceneProEntity.setStatus(0);
         //修改场景状态为升级中
-        sceneProEntity.setIsUpgrade(2);
-        sceneProService.update(sceneProEntity);
-
-        return Result.success();
+        LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(ScenePro::getStatus,0).set(ScenePro::getIsUpgrade,2).eq(ScenePro::getNum,scenePro.getNum());
+        sceneProService.update(wrapper);
     }
 
 }

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

@@ -25,12 +25,16 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
 
 @Service
 @Slf4j
 public class IFdkkLaserServiceImpl implements IFdkkLaserService {
 
     private final String UPDATE_SCENE_STATUS_URL_TEMPLATE="/indoor/%s/scene/useStatus/%s";
+    private final String UPGRADE_TO_V4="/api/user/scene?num=%s";
+    private final String EDIT_LASER_BUILD_STATUS_URL="/laser/4dage/scene/editBuildStatus";
     private final String DISABLE_COOPERATION_SCENE_URL="/laser/4dage/scene/cooperation/disable";
     private final String ENABLE_COOPERATION_CAMERA_URL="/laser/4dage/scene/cooperation/cameraSave";
     private final String GET_LASER_SCENE_USER_URL="/laser/4dage/getSceneNum";
@@ -116,4 +120,18 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
         }
     }
 
+    @Override
+    public void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath) {
+        String url = laserHost + EDIT_LASER_BUILD_STATUS_URL;
+        Map<String,String> params = new HashMap<>();
+        params.put("sceneCode",projectNum);
+        params.put("objPath",laserObjFilePath);
+        log.info("激光系统同步BuildStatus,url:{},params:{}",ENABLE_COOPERATION_CAMERA_URL, JSONObject.toJSONString(params));
+        ResponseEntity<com.fdkankan.contro.common.Result> responseEntity = restTemplate.postForEntity(url,params, com.fdkankan.contro.common.Result.class);
+        log.info("激光系统同步BuildStatus,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
+            log.error("激光系统同步BuildStatus");
+        }
+    }
+
 }