lyhzzz преди 1 година
родител
ревизия
b49353fb5e

+ 2 - 0
src/main/java/com/fdkankan/manage_jp/common/ResultCode.java

@@ -37,6 +37,8 @@ public enum ResultCode  {
 
     MAIN_CONTRACTOR_USER_ERROR(5020, "总承包商不存在"),
     CLOD_STORAGE_ERROR(5021, "归档失败,场景未计算完成"),
+    GENERATE_OBJ_ERROR_TYPE(5022, "只能操作激光场景"),
+    GENERATE_OBJ_ERROR(5023, "当前场景不支持 生成OBJ"),
 
 
     ;

+ 14 - 0
src/main/java/com/fdkankan/manage_jp/controller/SceneProController.java

@@ -107,5 +107,19 @@ public class SceneProController extends BaseController{
 
         return Result.success();
     }
+
+
+    /**
+     *
+     * 激光场景生成obj文件
+     */
+    @PostMapping(value = "/generateObjFile")
+    public Result generateObjFile(@RequestBody SceneParam requestScene) throws Exception{
+        if (StringUtils.isEmpty(requestScene.getNum())) {
+            throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
+        }
+        sceneProService.generateObjFile(requestScene.getNum());
+        return Result.success();
+    }
 }
 

+ 3 - 0
src/main/java/com/fdkankan/manage_jp/httpClient/client/LaserClient.java

@@ -81,4 +81,7 @@ public interface LaserClient {
      */
     @Post("/laser/4dage/scene/camera/toBind")
     Result toBind(@JSONBody SSToBind param) ;
+
+    @Get("/laser/init/${0}")
+    Result getSceneByNum(String num);
 }

+ 16 - 0
src/main/java/com/fdkankan/manage_jp/httpClient/service/LaserService.java

@@ -99,6 +99,13 @@ public class LaserService {
         params.put("status", status);
         return laserClient.updateStatus( params);
     }
+    public Result updateBuildObjStatus(String num,Integer status) {
+        //生成OBJ状态,0,未生成 1完成,2计算中
+        Map<String,Object> params = new HashMap<>();
+        params.put("sceneCode", num);
+        params.put("buildObjStatus", status);
+        return laserClient.updateStatus( params);
+    }
     public void toBind(List<String> snCodes,Boolean bind,String phone) {
         try {
             SSToBind param = new SSToBind();
@@ -254,4 +261,13 @@ public class LaserService {
         }
         return map;
     }
+
+    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()));
+    }
 }

+ 27 - 0
src/main/java/com/fdkankan/manage_jp/mapper/ISceneUpgradeMapper.java

@@ -0,0 +1,27 @@
+package com.fdkankan.manage_jp.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 文件夹表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ISceneUpgradeMapper {
+
+    public void transferScenePlus(String num);
+
+    public void transferScenePlusExt(@Param("num") String num, @Param("scenePlusId") Long scenePlusId, @Param("sceneKind") String sceneKind);
+
+    public void deleteScenePlus(String num);
+
+    public void deleteScenePlusExt(Long scenePlusId);
+
+
+
+}

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

@@ -37,4 +37,6 @@ public interface ISceneProService extends IService<ScenePro> {
     void updateTitleByNum(String sceneNum, String sceneNewTitle);
 
     HashMap<String, ScenePro> getByNumList(List<String> numList);
+
+    void generateObjFile(String num);
 }

+ 85 - 0
src/main/java/com/fdkankan/manage_jp/service/impl/SceneProServiceImpl.java

@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.constant.SceneKind;
 import com.fdkankan.common.constant.SceneVersionType;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.JwtUtil;
@@ -21,6 +23,7 @@ import com.fdkankan.manage_jp.entity.*;
 import com.fdkankan.manage_jp.exception.BusinessException;
 import com.fdkankan.manage_jp.httpClient.service.LaserService;
 import com.fdkankan.manage_jp.mapper.ISceneProMapper;
+import com.fdkankan.manage_jp.mapper.ISceneUpgradeMapper;
 import com.fdkankan.manage_jp.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.manage_jp.util.GenerateNumUtil;
@@ -28,6 +31,8 @@ import com.fdkankan.manage_jp.util.SceneResourcePath;
 import com.fdkankan.manage_jp.util.SnowflakeIdGenerator;
 import com.fdkankan.manage_jp.vo.request.SceneParam;
 import com.fdkankan.manage_jp.vo.response.SceneVo;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -35,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.io.File;
 import java.util.*;
@@ -78,6 +84,13 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     IUserRoleService userRoleService;
     @Autowired
     ITmColdStorageService tmColdStorageService;
+    @Autowired
+    private RabbitMqProducer mqProducer;
+    @Value("${queue.modeling.obj.modeling-pre}")
+    private String queueObjModelingPre;
+    @Autowired
+    private ISceneUpgradeMapper sceneUpgradeMapper;
+
 
     @Override
     public Long getCountByUserIds(List<Long> userIds) {
@@ -298,4 +311,76 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         updateWrapper.set(ScenePro::getLaserTitle,sceneNewTitle);
         this.update(updateWrapper);
     }
+
+    @Override
+    public void generateObjFile(String num) {
+
+        ScenePro sceneProEntity = this.getByNum(num);
+        ScenePlus scenePlusEntity = scenePlusService.getByNum(num);
+        if(ObjectUtils.isEmpty(sceneProEntity) && ObjectUtils.isEmpty(scenePlusEntity)){
+            throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
+        }
+        laserService.updateBuildObjStatus(num,2);
+
+        Integer sceneSource = sceneProEntity == null ? scenePlusEntity.getSceneSource() : sceneProEntity.getSceneSource();
+        if(sceneSource != 4){
+            throw new BusinessException(ResultCode.GENERATE_OBJ_ERROR_TYPE);
+        }
+        String path = null;
+        ScenePlusExt scenePlusExt = null;
+        if(scenePlusEntity != null){
+             scenePlusExt = scenePlusExtService.getByPlusId(scenePlusEntity.getId());
+            if(scenePlusExt == null){
+                throw new BusinessException(ResultCode.SCENE_ERROR);
+            }
+            path = scenePlusExt.getDataSource();
+        }else {
+            path = sceneProEntity.getDataSource();
+        }
+        String ossPath = path.replace("/mnt/data","home")+"/data.fdage";
+        if(!fYunFileServiceInterface.fileExist(ossPath)){
+            throw new BusinessException(ResultCode.GENERATE_OBJ_ERROR);
+        }
+        // 获取最新的场景名称
+        JSONObject sceneInfo = laserService.getSceneByNum(num);
+        if(sceneProEntity == null){
+            sendMqMsg(num,scenePlusExt.getAlgorithm(),scenePlusExt.getBuildType(),scenePlusExt.getDataSource());
+            return;
+        }
+
+        LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper
+                .set(ScenePro::getStatus, 0)
+                .set(ScenePro::getIsObj, 1)
+                .set(ScenePro::getIsUpgrade, 2)   //   升级中
+                .set(ScenePro::getSceneName, sceneInfo.getString("title"))
+                .eq(ScenePro::getNum, sceneProEntity.getNum());
+        this.update(updateWrapper);
+
+        //同步到scenePlus、scenePlus
+        //同步到scenePlus、scenePlus
+        ScenePlus scenePlus = scenePlusService.getByNum(num);
+        if(Objects.nonNull(scenePlus)){
+            sceneUpgradeMapper.deleteScenePlus(num);
+            sceneUpgradeMapper.deleteScenePlusExt(scenePlus.getId());
+        }
+        sceneUpgradeMapper.transferScenePlus(num);
+        scenePlus = scenePlusService.getByNum(num);
+        String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code();
+        sceneUpgradeMapper.transferScenePlusExt(num, scenePlus.getId(), sceneKind);
+
+        sendMqMsg(sceneProEntity.getNum(),sceneProEntity.getAlgorithm(),sceneProEntity.getBuildType(),sceneProEntity.getDataSource());
+    }
+
+
+    public void sendMqMsg(String num ,String algorithm,String buildType,String dataSource) {
+        log.info("开始发送激光场景生成obj mq消息");
+        // 发送MQ
+        BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
+        mqMsg.setSceneNum(num);
+        mqMsg.setAlgorithm(algorithm);
+        mqMsg.setBuildType(buildType);
+        mqMsg.setPath(dataSource);
+        mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
+    }
 }

+ 116 - 0
src/main/resources/mapper/manage_jp/SceneUpgradeMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.manage_jp.mapper.ISceneUpgradeMapper">
+
+  <insert id="transferScenePlus" parameterType="java.lang.String">
+    INSERT INTO t_scene_plus (
+    `num`,
+    `user_id`,
+    `camera_id`,
+    `phone_id`,
+    `title`,
+    `description`,
+    `scene_status`,
+    `scene_source`,
+    `pay_status`,
+    `scene_type`,
+    `recommend`,
+    `create_time`,
+    `update_time`,
+    `rec_status`
+  )
+  SELECT
+    p.`num`,
+    p.`user_id`,
+    p.`camera_id`,
+    p.`phone_id`,
+    p.`scene_name`,
+    p.`scene_dec`,
+    p.`status`,
+    p.`scene_source`,
+    p.`pay_status`,
+    p.`scene_type`,
+    p.`recommend`,
+    p.`create_time`,
+    p.`update_time`,
+     p.rec_status
+  FROM
+    t_scene_pro p
+  WHERE p.num = #{num};
+  </insert>
+
+  <insert id="transferScenePlusExt">
+    INSERT INTO t_scene_plus_ext (
+    plus_id,
+    data_source,
+    web_site,
+    thumb,
+    scene_scheme,
+    SPACE,
+    ecs,
+    shoot_count,
+    view_count,
+    gps,
+    ALGORITHM,
+    firmware_version,
+    build_type,
+    create_time,
+    update_time,
+    rec_status,
+    scene_resolution,
+    scene_from,
+    scene_kind,
+    videos,
+    algorithm_time,
+    is_obj
+  )
+  SELECT
+    #{scenePlusId},
+    p.`data_source`,
+    p.`web_site`,
+    p.`thumb`,
+    p.`scene_scheme`,
+    p.`space`,
+    p.`ecs`,
+    p.`shoot_count`,
+    p.`view_count`,
+    p.`gps`,
+    p.`algorithm`,
+    p.`firmware_version`,
+    p.`build_type`,
+    p.`create_time`,
+    p.`update_time`,
+    p.rec_status ,
+    CASE
+      WHEN p.scene_source = 1 THEN '2k'
+      WHEN p.scene_source = 2 THEN '1k'
+      WHEN p.scene_source = 3 THEN '4k'
+      WHEN p.scene_source = 4 THEN '4k'
+      ELSE NULL
+     END AS scene_resolution,
+    CASE
+      WHEN p.scene_source = 1 THEN 'pro'
+      WHEN p.scene_source = 2 THEN 'lite'
+      WHEN p.scene_source = 3 THEN 'minion'
+      WHEN p.scene_source = 4 THEN 'laser'
+      ELSE NULL
+     END AS scene_from,
+    #{sceneKind} scene_kind,
+    p.videos,
+    p.`create_time`,
+    p.is_obj
+  FROM
+    t_scene_pro p
+  WHERE p.num = #{num}
+  </insert>
+
+
+  <delete id="deleteScenePlus" parameterType="java.lang.String">
+    delete from t_scene_plus where num = #{num}
+  </delete>
+
+  <delete id="deleteScenePlusExt" parameterType="java.lang.Long">
+    delete from t_scene_plus_ext where plus_id = #{scenePlusId}
+  </delete>
+
+</mapper>