Selaa lähdekoodia

Merge branch 'master' of http://192.168.0.115:3000/lyhzzz/4dkankan-center-user

lyhzzz 2 vuotta sitten
vanhempi
commit
1170c72974

+ 16 - 0
src/main/java/com/fdkankan/ucenter/controller/SceneController.java

@@ -3,8 +3,10 @@ package com.fdkankan.ucenter.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.Get;
 import com.dtflys.forest.annotation.Get;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -110,6 +112,20 @@ public class SceneController {
 
 
     /**
     /**
      *
      *
+     * 激光场景生成obj文件
+     */
+    @PostMapping(value = "/generateObjFile")
+    public Result generateObjFile(@RequestBody SceneParam requestScene) throws Exception{
+        String num = requestScene.getSceneNum();
+        if (StringUtils.isEmpty(num)) {
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        sceneProService.generateObjFile(num);
+        return Result.success();
+    }
+
+    /**
+     *
      * 场景升级进度查询接口
      * 场景升级进度查询接口
      */
      */
     @GetMapping("/getUpgradeToV4Progress")
     @GetMapping("/getUpgradeToV4Progress")

+ 5 - 0
src/main/java/com/fdkankan/ucenter/entity/ScenePro.java

@@ -227,5 +227,10 @@ public class ScenePro implements Serializable {
     @TableField("is_upgrade")
     @TableField("is_upgrade")
     private Integer isUpgrade;
     private Integer isUpgrade;
 
 
+    /**
+     * 是否生成过OBJ
+     */
+    @TableField("is_obj")
+    private Integer isObj;
 
 
 }
 }

+ 3 - 6
src/main/java/com/fdkankan/ucenter/httpClient/client/LaserClient.java

@@ -1,14 +1,9 @@
 package com.fdkankan.ucenter.httpClient.client;
 package com.fdkankan.ucenter.httpClient.client;
 
 
-import com.dtflys.forest.annotation.Address;
-import com.dtflys.forest.annotation.Header;
-import com.dtflys.forest.annotation.JSONBody;
-import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.*;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.httpClient.address.LaserAddressSource;
 import com.fdkankan.ucenter.httpClient.address.LaserAddressSource;
-import com.fdkankan.ucenter.vo.response.SceneNumVo;
 
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -42,4 +37,6 @@ public interface LaserClient {
     @Post("/laser/4dage/scene/cooperation/cameraSave")
     @Post("/laser/4dage/scene/cooperation/cameraSave")
     Result cooperationCameraSave(@JSONBody List<Map<String, String> >param);
     Result cooperationCameraSave(@JSONBody List<Map<String, String> >param);
 
 
+    @Get("/laser/init/${0}")
+    Result getSceneByNum(String num);
 }
 }

+ 11 - 2
src/main/java/com/fdkankan/ucenter/httpClient/service/LaserService.java

@@ -28,9 +28,9 @@ import java.util.Map;
 public class LaserService {
 public class LaserService {
 
 
     @Resource
     @Resource
-    LaserClient laserClient;
+    private LaserClient laserClient;
     @Autowired
     @Autowired
-    IUserService userService;
+    private IUserService userService;
     /**
     /**
      * 根据用户获取激光相机数量
      * 根据用户获取激光相机数量
      * @param token
      * @param token
@@ -103,4 +103,13 @@ public class LaserService {
         }
         }
         laserClient.cooperationCameraSave(params);
         laserClient.cooperationCameraSave(params);
     }
     }
+
+    public JSONObject getSceneByNum(String num) {
+        Result result = laserClient.getSceneByNum(num);
+        if(result.getCode() != HttpStatus.OK.value()){
+            log.error("获取激光转台场景失败!");
+            return null;
+        }
+        return JSONObject.parseObject(JSONObject.toJSONString(result.getData()));
+    }
 }
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/ISceneProService.java

@@ -73,5 +73,7 @@ public interface ISceneProService extends IService<ScenePro> {
 
 
     String setDataSource(String preDataSource,Integer sceneSource) throws Exception;
     String setDataSource(String preDataSource,Integer sceneSource) throws Exception;
 
 
+    void generateObjFile(String num);
+
     void updateDbViewCount(String num, String count);
     void updateDbViewCount(String num, String count);
 }
 }

+ 91 - 37
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.SceneConstant;
 import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.constant.SceneKind;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.JwtUtil;
@@ -20,30 +23,11 @@ import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.constant.CameraConstant;
 import com.fdkankan.ucenter.constant.CameraConstant;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.constant.LoginConstant;
-import com.fdkankan.ucenter.entity.CameraDetail;
-import com.fdkankan.ucenter.entity.Folder;
-import com.fdkankan.ucenter.entity.SceneEditInfo;
-import com.fdkankan.ucenter.entity.ScenePlus;
-import com.fdkankan.ucenter.entity.ScenePlusExt;
-import com.fdkankan.ucenter.entity.ScenePro;
-import com.fdkankan.ucenter.entity.SceneProEdit;
-import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.httpClient.service.LaserService;
 import com.fdkankan.ucenter.httpClient.service.LaserService;
 import com.fdkankan.ucenter.mapper.ISceneProMapper;
 import com.fdkankan.ucenter.mapper.ISceneProMapper;
-import com.fdkankan.ucenter.service.ICameraDetailService;
-import com.fdkankan.ucenter.service.IFolderSceneService;
-import com.fdkankan.ucenter.service.IFolderService;
-import com.fdkankan.ucenter.service.IScene3dNumService;
-import com.fdkankan.ucenter.service.ISceneCooperationService;
-import com.fdkankan.ucenter.service.ISceneCopyLogService;
-import com.fdkankan.ucenter.service.ISceneEditInfoService;
-import com.fdkankan.ucenter.service.IScenePlusExtService;
-import com.fdkankan.ucenter.service.IScenePlusService;
-import com.fdkankan.ucenter.service.ISceneProEditService;
-import com.fdkankan.ucenter.service.ISceneProService;
-import com.fdkankan.ucenter.service.ISceneService;
-import com.fdkankan.ucenter.service.IUserIncrementService;
-import com.fdkankan.ucenter.service.IUserService;
+import com.fdkankan.ucenter.mapper.ISceneUpgradeMapper;
+import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
@@ -82,37 +66,43 @@ import org.springframework.util.ObjectUtils;
 public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
 public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
 
 
     @Autowired
     @Autowired
-    IUserService userService;
+    private IUserService userService;
     @Autowired
     @Autowired
-    ISceneCooperationService sceneCooperationService;
+    private ISceneCooperationService sceneCooperationService;
     @Autowired
     @Autowired
-    IScenePlusService scenePlusService;
+    private IScenePlusService scenePlusService;
     @Autowired
     @Autowired
-    ISceneService sceneService;
+    private ISceneService sceneService;
     @Autowired
     @Autowired
-    LaserService fdkkLaserService;
+    private LaserService fdkkLaserService;
     @Resource
     @Resource
     private FYunFileServiceInterface fYunFileService;
     private FYunFileServiceInterface fYunFileService;
     @Autowired
     @Autowired
-    IUserIncrementService userIncrementService;
+    private IUserIncrementService userIncrementService;
     @Autowired
     @Autowired
-    IScenePlusExtService scenePlusExtService;
+    private IScenePlusExtService scenePlusExtService;
     @Autowired
     @Autowired
-    ICameraDetailService cameraDetailService;
+    private ICameraDetailService cameraDetailService;
     @Autowired
     @Autowired
-    IFolderService folderService;
+    private IFolderService folderService;
     @Autowired
     @Autowired
-    IFolderSceneService folderSceneService;
+    private IFolderSceneService folderSceneService;
     @Autowired
     @Autowired
-    ISceneCopyLogService sceneCopyLogService;
+    private ISceneCopyLogService sceneCopyLogService;
     @Autowired
     @Autowired
-    IScene3dNumService scene3dNumService;
+    private IScene3dNumService scene3dNumService;
     @Autowired
     @Autowired
-    ISceneProEditService sceneProEditService;
+    private ISceneProEditService sceneProEditService;
     @Autowired
     @Autowired
-    ISceneEditInfoService sceneEditInfoService;
+    private ISceneEditInfoService sceneEditInfoService;
     @Autowired
     @Autowired
-    RedisUtil redisUtil;
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private ISceneUpgradeMapper sceneUpgradeMapper;
+
+    @Autowired
+    private ICameraService cameraService;
 
 
     @Value("${main.url}")
     @Value("${main.url}")
     private String mainUrl;
     private String mainUrl;
@@ -123,6 +113,12 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     @Value("${scene.pro.new.url}")
     @Value("${scene.pro.new.url}")
     private String sceneProNewUrl;
     private String sceneProNewUrl;
 
 
+    @Value("${queue.modeling.obj.modeling-pre}")
+    private String queueObjModelingPre;
+
+    @Autowired
+    private RabbitMqProducer mqProducer;
+
     @Override
     @Override
     public HashMap<String, SceneNumVo> findSceneNumber(String token) {
     public HashMap<String, SceneNumVo> findSceneNumber(String token) {
         User user = userService.getByUserName(JwtUtil.getUsername(token));
         User user = userService.getByUserName(JwtUtil.getUsername(token));
@@ -783,4 +779,62 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         MatrixToImageWriterUtil.createQRCode(basePath + num + "&lang=en", ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+num+"_en.png", false,null);
         MatrixToImageWriterUtil.createQRCode(basePath + num + "&lang=en", ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+num+"_en.png", false,null);
 
 
     }
     }
+
+    @Override
+    public void generateObjFile(String num) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePro::getNum,num).eq(ScenePro::getRecStatus,"A");
+        ScenePro sceneProEntity = this.getOne(wrapper);
+
+        if(ObjectUtils.isEmpty(sceneProEntity)){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
+        }
+
+        if(sceneProEntity.getSceneSource().intValue() != 4){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3003, "只能操作激光场景");
+        }
+
+        // 拷贝文件
+        String path = sceneProEntity.getDataSource();
+        if (!new File(path + "/caches/reconstruction/final.bin").exists()
+                || !new File(path + "/caches/reconstruction/chunk.json").exists()
+                || !new File(path + "/caches/images").exists()
+                || !new File(path + "/caches/depthmap").exists()
+                || !new File(path + "/caches/depthmap_csc").exists()
+                || !new File(path + "/caches/panorama.json").exists()
+                || !new File(path + "/results/laserData/laser.ply").exists()) {
+            log.error("生成obj缺少必要文件,生成失败!");
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5038, SceneConstant.FAILURE_MSG_5038);
+        }
+
+        // 获取最新的场景名称
+        JSONObject sceneInfo = fdkkLaserService.getSceneByNum(sceneProEntity.getNum());
+        LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper
+                .set(ScenePro::getStatus, 0)
+                .set(ScenePro::getIsObj, 1)
+                .set(ScenePro::getSceneName, sceneInfo.getString("title"))
+                .eq(ScenePro::getNum, sceneProEntity.getNum());
+        this.update(updateWrapper);
+
+        //同步到scenePlus、scenePlus
+        sceneUpgradeMapper.deleteScenePlus(sceneProEntity.getId());
+        sceneUpgradeMapper.transferScenePlus(sceneProEntity.getId());
+        sceneUpgradeMapper.deleteScenePlusExt(sceneProEntity.getId());
+        String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code(): SceneKind.TILES.code();
+        sceneUpgradeMapper.transferScenePlusExt(sceneProEntity.getId(), sceneKind);
+
+        log.info("开始发送激光场景生成obj mq消息");
+
+
+        Camera camera = cameraService.getById(sceneProEntity.getCameraId());
+        // 发送MQ
+        BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
+        mqMsg.setSceneNum(sceneProEntity.getNum());
+        mqMsg.setUserId(sceneProEntity.getUserId());
+        mqMsg.setAlgorithm(sceneProEntity.getAlgorithm());
+        mqMsg.setBuildType(sceneProEntity.getBuildType());
+        mqMsg.setDataSource(sceneProEntity.getDataSource());
+        mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
+    }
 }
 }