浏览代码

生成obj接口迁移至计算控制服务

dengsixing 4 月之前
父节点
当前提交
a49a355251

+ 7 - 0
pom.xml

@@ -194,6 +194,13 @@
       <version>2.17.0</version>
     </dependency>
 
+    <!--htt请求工具-->
+    <dependency>
+      <groupId>com.dtflys.forest</groupId>
+      <artifactId>forest-spring-boot-starter</artifactId>
+      <version>1.5.24</version>
+    </dependency>
+
   </dependencies>
   <build>
     <finalName>${artifactId}</finalName>

+ 10 - 0
src/main/java/com/fdkankan/contro/GenerateObjFileDTO.java

@@ -0,0 +1,10 @@
+package com.fdkankan.contro;
+
+import lombok.Data;
+
+@Data
+public class GenerateObjFileDTO {
+
+    private String sceneNum;
+
+}

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

@@ -1,5 +1,6 @@
 package com.fdkankan.contro;
 
+import com.dtflys.forest.springboot.annotation.ForestScan;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -21,6 +22,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @ComponentScan(basePackages = {"com.fdkankan.*"})
 @EnableAsync
 @MapperScan("com.fdkankan.**.mapper")
+@ForestScan(basePackages = "com.fdkankan.contro.httpclient")
 @EnableDiscoveryClient
 public class ModelingControlApplication {
     public static void main(String[] args) {

+ 38 - 0
src/main/java/com/fdkankan/contro/controller/LaserApiController.java

@@ -0,0 +1,38 @@
+package com.fdkankan.contro.controller;
+
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.GenerateObjFileDTO;
+import com.fdkankan.contro.common.Result;
+import com.fdkankan.contro.service.IGenerateObjFileService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/ucenter/inner")
+public class LaserApiController {
+
+    @Autowired
+    private IGenerateObjFileService generateObjFileService;
+
+
+    /**
+     *
+     *
+     *
+     * 激光场景生成obj文件
+     */
+    @PostMapping(value = "/generateObjFile")
+    public Result generateObjFile(@RequestBody GenerateObjFileDTO requestScene) throws Exception{
+        String num = requestScene.getSceneNum();
+        if (StringUtils.isEmpty(num)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
+        }
+        generateObjFileService.generateObjFile(num);
+        return Result.success();
+    }
+}

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

@@ -0,0 +1,27 @@
+package com.fdkankan.contro.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);
+
+
+
+}

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

@@ -33,4 +33,5 @@ public interface IFdkkLaserService {
     void sendE57ToLaser(ScenePlus scenePlus, ScenePlusExt scenePlusExt, String path);
 
     void sendRebuildE57ToLaser(ScenePlus scenePlus, ScenePlusExt scenePlusExt);
+
 }

+ 7 - 0
src/main/java/com/fdkankan/contro/service/IGenerateObjFileService.java

@@ -0,0 +1,7 @@
+package com.fdkankan.contro.service;
+
+public interface IGenerateObjFileService {
+
+    void generateObjFile(String num);
+
+}

+ 120 - 0
src/main/java/com/fdkankan/contro/service/impl/GenerateObjFileServiceImpl.java

@@ -0,0 +1,120 @@
+package com.fdkankan.contro.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.constant.SceneKind;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePlusExt;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.mapper.ISceneUpgradeMapper;
+import com.fdkankan.contro.service.*;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.Objects;
+
+@Service
+public class GenerateObjFileServiceImpl implements IGenerateObjFileService {
+
+    @Value("${queue.modeling.obj.modeling-pre}")
+    private String queueObjModelingPre;
+
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Resource
+    private FYunFileServiceInterface fYunFileService;
+    @Resource
+    private RabbitMqProducer mqProducer;
+    @Autowired
+    private ISceneUpgradeMapper sceneUpgradeMapper;
+
+    @Override
+    public void generateObjFile(String num) {
+        ScenePro sceneProEntity = sceneProService.getByNum(num);
+
+        if(ObjectUtils.isEmpty(sceneProEntity) || sceneProEntity.getIsUpgrade() == CommonStatus.YES.code().intValue()){
+            generatePlusObjFile(num);
+            return;
+        }
+
+        if(sceneProEntity.getSceneSource() != 4 && sceneProEntity.getSceneSource() != 5){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3003, "只能操作激光场景");
+        }
+
+        // 拷贝文件
+        String path = sceneProEntity.getDataSource();
+        String ossPath = path.replace("/mnt/data","home")+"/data.fdage";
+        if(!fYunFileService.fileExist(ossPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3037);
+        }
+
+        // 获取最新的场景名称
+        //同步到scenePlus、scenePlus
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(Objects.nonNull(scenePlus)){
+            sceneUpgradeMapper.deleteScenePlus(num);
+            sceneUpgradeMapper.deleteScenePlusExt(scenePlus.getId());
+        }
+        sceneUpgradeMapper.transferScenePlus(num);
+        scenePlus = scenePlusService.getScenePlusByNum(num);
+        String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code();
+        sceneUpgradeMapper.transferScenePlusExt(num, scenePlus.getId(), sceneKind);
+
+
+        // 发送MQ
+        BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
+        mqMsg.setSceneNum(sceneProEntity.getNum());
+        mqMsg.setAlgorithm(sceneProEntity.getAlgorithm());
+        mqMsg.setBuildType(sceneProEntity.getBuildType());
+        mqMsg.setPath(sceneProEntity.getDataSource());
+        mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
+    }
+
+    public void generatePlusObjFile(String num) {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+
+        if(ObjectUtils.isEmpty(scenePlus)){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
+        }
+
+        if(scenePlus.getSceneSource() != 4 && scenePlus.getSceneSource() !=5){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3003.code(), "只能操作激光场景");
+        }
+
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+        String ossPath = scenePlusExt.getDataSource().replace("/mnt/data","home")+"/data.fdage";
+        if(!fYunFileService.fileExist(ossPath)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3037);
+
+        }
+
+        LambdaUpdateWrapper<ScenePlusExt> plusExtUpdateWrapper = new LambdaUpdateWrapper<>();
+        plusExtUpdateWrapper
+                .set(ScenePlusExt::getIsObj, 1)
+                .eq(ScenePlusExt::getPlusId, scenePlus.getId());
+        scenePlusExtService.update(plusExtUpdateWrapper);
+
+        // 发送MQ
+        BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
+        mqMsg.setSceneNum(num);
+        mqMsg.setAlgorithm(scenePlusExt.getAlgorithm());
+        mqMsg.setBuildType(scenePlusExt.getBuildType());
+        mqMsg.setPath(scenePlusExt.getDataSource());
+        mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
+    }
+}

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

@@ -63,7 +63,6 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
     @Resource
     private FYunFileServiceInterface fYunFileService;
 
-
     public void syncBuildResult(SyncLaserResultBean laserResultBean) {
         log.info("激光转台相机构建结果 同步 请求 ");
         try {
@@ -299,4 +298,5 @@ public class IFdkkLaserServiceImpl implements IFdkkLaserService {
 
         return null;
     }
+
 }

+ 118 - 0
src/main/resources/mapper/contro/SceneUpgradeMapper.xml

@@ -0,0 +1,118 @@
+<?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.contro.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,
+    model_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,
+    'dam',
+    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>