Sfoglia il codice sorgente

远程调用v4编辑器接口改为本地调用

dengsixing 3 anni fa
parent
commit
5b5cce8dea

+ 6 - 0
pom.xml

@@ -34,6 +34,12 @@
 
         <dependency>
             <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-rabbitmq</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-mongodb</artifactId>
             <version>2.0.0-SNAPSHOT</version>
         </dependency>

+ 69 - 0
src/main/java/com/fdkankan/ucenter/bean/SceneEditControlsBean.java

@@ -0,0 +1,69 @@
+package com.fdkankan.ucenter.bean;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/18
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneEditControlsBean implements Serializable {
+
+    /**
+     * 是否展示小地图(0-不展示,1-展示)
+     */
+    private Integer showMap;
+
+    /**
+     * 是否需要密码(0-不需要,1-需要)
+     */
+    private Integer showLock;
+
+    /**
+     * 是否展示标题(0-不需要,1-需要)
+     */
+    private Integer showTitle;
+
+    /**
+     * 是否展示漫游按钮(0-不需要,1-需要)
+     */
+    private Integer showPanorama;
+
+    /**
+     * 是否展示3D按钮(0-不需要,1-需要)
+     */
+    private Integer showDollhouse;
+
+    /**
+     * 是否展示2D按钮(0-不需要,1-需要)
+     */
+    private Integer showFloorplan;
+
+    /**
+     * 是否展示VR(0-不需要,1-需要)
+     */
+    private Integer showVR;
+
+    /**
+     * 是否展示自动导览(0-不需要,1-需要)
+     */
+    private Integer showTour;
+
+    /**
+     * 是否展示测量线(0-不需要,1-需要)
+     */
+    private Integer showRule;
+
+
+}

+ 176 - 0
src/main/java/com/fdkankan/ucenter/bean/SceneJsonBean.java

@@ -0,0 +1,176 @@
+package com.fdkankan.ucenter.bean;
+
+import com.alibaba.fastjson.JSONObject;
+import java.util.Date;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * scene.json实体类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/19
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneJsonBean {
+
+    /**
+     * 场景码
+     */
+    private String num;
+
+    /**
+     * 地面logo名称
+     */
+    private String floorLogo;
+
+    /**
+     * 地面logo大小
+     */
+    private Integer floorLogoSize;
+
+    /**
+     * 地面logo文件名称
+     */
+    private String floorLogoFile;
+
+    /**
+     * 背景音乐名称
+     */
+    private String music;
+
+    /**
+     * 背景音乐文件名称
+     */
+    private String musicFile;
+
+    /**
+     * 浏览密码
+     */
+    private String scenePassword;
+
+    /**
+     * 场景标题
+     */
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    private String description;
+
+    private SceneEditControlsBean controls;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+//    /**
+//     * 点位数量
+//     */
+//    private Integer panoCount;
+//
+//    /**
+//     * 球幕视频数量
+//     */
+//    private Integer videoCount;
+
+    /**
+     * 版本
+     */
+    private Integer version;
+
+//    /**
+//     * 户型图文件路径集合
+//     */
+//    private String[] floorPlanPaths;
+
+    /**
+     * 是否上传了户型图(0-否,1-是)
+     */
+    private Byte floorPlanUser;
+
+//    private String cadInfo;
+
+//    /**
+//     * 是否上传模型
+//     */
+//    private Byte isUploadObj;
+//
+//    /**
+//     * 重新建模的版本
+//     */
+//    private Integer floorEditVer;
+//
+//    /**
+//     * 正式发布重新建模的版本
+//     */
+//    private Integer floorPublishVer;
+
+    /**
+     * 初始点信息
+     */
+    private String entry;
+
+    /**
+     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     */
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    private String sceneFrom;
+
+    /**
+     * 切图方式(tiles:瓦片图,face:切片图,pan:全景图 ,local:本地切片,cube:立体图)
+     */
+    private String sceneKind;
+
+    /**
+     * 视频覆盖数据
+     */
+    private String boxVideos;
+
+    /**
+     *点位视频
+     */
+    private JSONObject videos;
+
+    /**
+     * 是否有热点数据
+     */
+    private Integer tags;
+
+    /**
+     * 加载logo名
+     */
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    private String loadingLogoFile;
+
+    /**
+     * 户型角度
+     */
+    private Float floorPlanAngle;
+
+    /**
+     * 指南针角度
+     */
+    private Float floorPlanCompass;
+
+
+
+
+}

+ 31 - 0
src/main/java/com/fdkankan/ucenter/bean/SceneUpgradeProgressBean.java

@@ -0,0 +1,31 @@
+package com.fdkankan.ucenter.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 场景升级进度
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/22
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneUpgradeProgressBean {
+
+    private String num;
+
+    private Integer status;
+
+    private Integer progress;
+
+
+
+
+}

+ 30 - 2
src/main/java/com/fdkankan/ucenter/controller/SceneController.java

@@ -2,15 +2,21 @@ package com.fdkankan.ucenter.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.response.PageInfo;
+import com.dtflys.forest.annotation.Get;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.IDownService;
 import com.fdkankan.ucenter.service.ISceneProService;
+import com.fdkankan.ucenter.service.ISceneUpgradeToV4Service;
 import com.fdkankan.ucenter.service.IUserService;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -30,6 +36,8 @@ public class SceneController {
     IUserService userService;
     @Autowired
     IDownService downService;
+    @Autowired
+    private ISceneUpgradeToV4Service sceneUpgradeToV4Service;
 
     @PostMapping("/findSceneNumber")
     public Result findSceneNumber(@RequestHeader String token){
@@ -89,5 +97,25 @@ public class SceneController {
         return Result.success(downService.downloadProcess(param.getSceneNum()));
     }
 
+    /**
+     *
+     * 场景升级V4接口
+     */
+    @Get(value = "/upgradeToV4")
+    public Result upgradeToV4(String num) throws Exception{
+        return sceneUpgradeToV4Service.upgrade(num);
+    }
+
+    /**
+     *
+     * 场景升级进度查询接口
+     */
+    @RequestMapping(value = "/getUpgradeToV4Progress", method = RequestMethod.GET)
+    public Result getUpgradeToV4Progress(String num) throws Exception{
+        return sceneUpgradeToV4Service.getUpgradeToV4Progress(num);
+    }
+
+
+
 }
 

+ 12 - 4
src/main/java/com/fdkankan/ucenter/entity/ScenePlusExt.java

@@ -1,9 +1,11 @@
 package com.fdkankan.ucenter.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
-
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
-
 import lombok.Getter;
 import lombok.Setter;
 
@@ -104,7 +106,7 @@ public class ScenePlusExt implements Serializable {
     private String buildType;
 
     /**
-     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     * 分辨率(2k,4k)
      */
     @TableField("scene_resolution")
     private String sceneResolution;
@@ -116,6 +118,12 @@ public class ScenePlusExt implements Serializable {
     private String sceneFrom;
 
     /**
+     * 切图方式(tiles:瓦片图,face:切片图,pan:全景图 ,local:本地切片,cube:立体图)
+     */
+    @TableField("scene_kind")
+    private String sceneKind;
+
+    /**
      * 点位视频
      */
     @TableField("videos")

+ 1 - 1
src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"ucenter", getTables(new String[]{
-                "t_scene_apply",
+                "t_scene_repair_log",
         }));
 
 //        generate(path,"goods", getTables(new String[]{

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

@@ -0,0 +1,27 @@
+package com.fdkankan.ucenter.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(Long sceneProId);
+
+    public void transferScenePlusExt(@Param("sceneProId") Long sceneProId, @Param("sceneKind") String sceneKind);
+
+    public void deleteScenePlus(Long sceneProId);
+
+    public void deleteScenePlusExt(Long sceneProId);
+
+
+
+}

+ 25 - 0
src/main/java/com/fdkankan/ucenter/service/ISceneUpgradeToV4Service.java

@@ -0,0 +1,25 @@
+package com.fdkankan.ucenter.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.ucenter.common.Result;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/21
+ **/
+public interface ISceneUpgradeToV4Service {
+
+    Result upgrade(String num) throws Exception;
+
+
+    Result getUpgradeToV4Progress(String num);
+
+
+}

+ 1 - 0
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -382,6 +382,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         return null;
     }
 
+
     @Override
     public void copyV3Scene(ScenePro oldScene,String newNum,CameraDetail cameraDetail) {
         SceneProEdit oldEditScene = sceneProEditService.getByProId(oldScene.getId());

+ 149 - 0
src/main/java/com/fdkankan/ucenter/service/impl/SceneUpgradeToV4Service.java

@@ -0,0 +1,149 @@
+package com.fdkankan.ucenter.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneKind;
+import com.fdkankan.common.constant.SceneResolution;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.ucenter.bean.SceneUpgradeProgressBean;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.entity.ScenePlus;
+import com.fdkankan.ucenter.entity.ScenePlusExt;
+import com.fdkankan.ucenter.entity.ScenePro;
+import com.fdkankan.ucenter.entity.SceneRepairLog;
+import com.fdkankan.ucenter.mapper.ISceneUpgradeMapper;
+import com.fdkankan.ucenter.service.ISceneEditControlsService;
+import com.fdkankan.ucenter.service.ISceneEditInfoExtService;
+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.ISceneRepairLogService;
+import com.fdkankan.ucenter.service.ISceneUpgradeToV4Service;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/21
+ **/
+@Slf4j
+@Service
+public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
+
+    @Value("${queue.scene.upgrade-to-v4}")
+    private String upgradeToV4;
+
+    @Autowired
+    private ISceneRepairLogService sceneRepairLogService;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private ISceneUpgradeMapper sceneUpgradeMapper;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+
+    @Override
+    public Result upgrade(String num)  throws Exception{
+
+        ScenePro scenePro = sceneProService.getByNum(num);
+
+        //加锁
+        String lockKey = String.format(RedisLockKey.LOCK_SCENE_UPGRADE_V4, num);
+        boolean lock = redisLockUtil.lock(lockKey,RedisKey.EXPIRE_TIME_2_HOUR);
+        if(!lock){
+            return Result.failure(ErrorCode.FAILURE_CODE_7019.code(), ErrorCode.FAILURE_CODE_7019.message());
+        }
+
+        try {
+            //查询升级日志,如果已经升级成功,不允许重复升级
+            SceneRepairLog sceneRepairLog = sceneRepairLogService.getOne(
+                new LambdaQueryWrapper<SceneRepairLog>()
+                    .eq(SceneRepairLog::getNum, num));
+            if(Objects.nonNull(sceneRepairLog)){
+                if(sceneRepairLog.getState() == 0){
+                    redisLockUtil.unlockLua(lockKey);
+                    return Result.failure(ErrorCode.FAILURE_CODE_7019.code(), ErrorCode.FAILURE_CODE_7019.message());
+                }
+//                if(!param.isReUpgrade()){
+//                    if(sceneRepairLog.getState() == 1){
+//                        redisLockUtil.unlockLua(lockKey);
+//                        return ResultData.error(ErrorCode.FAILURE_CODE_7020);
+//                    }
+//                }
+            }
+
+            //同步到scenePlus、scenePlus
+            sceneUpgradeMapper.deleteScenePlus(scenePro.getId());
+            sceneUpgradeMapper.transferScenePlus(scenePro.getId());
+            sceneUpgradeMapper.deleteScenePlusExt(scenePro.getId());
+            String sceneKind = scenePro.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code();
+            sceneUpgradeMapper.transferScenePlusExt(scenePro.getId(), sceneKind);
+
+            //国际版需要兼容切片图
+            ScenePlus scenePlus = scenePlusService.getById(scenePro.getId());
+            ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+            if(scenePlusExt.getSceneScheme() == 3){
+                scenePlusExt.setSceneResolution(SceneResolution.TILES.code());
+                scenePlusExtService.updateById(scenePlusExt);
+            }
+
+            //发送mq
+            rabbitMqProducer.sendByWorkQueue(upgradeToV4, scenePro.getId());
+
+            //写入进度条
+            Map<String, Integer> progress = new HashMap<>();
+            progress.put("status", 0);
+            progress.put("progress", 0);
+            redisUtil.set(RedisKey.scene_upgrade_progress_num, JSON.toJSONString(progress));
+
+        }catch (Exception e){
+            log.error("场景升级失败", e);
+            return Result.failure(ErrorCode.FAILURE_CODE_7021.code(), ErrorCode.FAILURE_CODE_7021.message());
+        }
+
+        return Result.success();
+
+    }
+
+    public Result getUpgradeToV4Progress(String num){
+        String key = String.format(RedisKey.scene_upgrade_progress_num, num);
+        String progress = redisUtil.get(key);
+        SceneUpgradeProgressBean progressBean = null;
+        if(StrUtil.isNotEmpty(progress)){
+            progressBean = JSON.parseObject(progress, SceneUpgradeProgressBean.class);
+        }else{
+            progressBean = SceneUpgradeProgressBean.builder().num(num).status(0).progress(0).build();
+        }
+        return Result.success(progressBean);
+    }
+}

+ 4 - 0
src/main/resources/bootstrap-test.yml

@@ -20,6 +20,10 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
+           - data-id: common-rabbitmq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
           - data-id: other-config.yaml
             group: DEFAULT_GROUP
             refresh: true

+ 114 - 0
src/main/resources/mapper/ucenter/SceneUpgradeMapper.xml

@@ -0,0 +1,114 @@
+<?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.ucenter.mapper.ISceneUpgradeMapper">
+
+  <insert id="transferScenePlus" parameterType="java.lang.Long">
+    INSERT INTO t_scene_plus (
+    `id`,
+    `num`,
+    `user_id`,
+    `camera_id`,
+    `phone_id`,
+    `title`,
+    `description`,
+    `scene_status`,
+    `scene_source`,
+    `pay_status`,
+    `scene_type`,
+    `recommend`,
+    `create_time`,
+    `update_time`,
+    `tb_status`
+  )
+  SELECT
+    p.`id`,
+    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`,
+    CASE WHEN p.rec_status = 'A' THEN 0 ELSE 1 END AS tb_status
+  FROM
+    t_scene_pro p
+  WHERE p.id = #{sceneProId};
+  </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,
+    tb_status,
+    scene_resolution,
+    scene_from,
+    scene_kind,
+    videos
+  )
+  SELECT
+    p.id,
+    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`,
+    CASE WHEN p.rec_status = 'A' THEN 0 ELSE 1 END AS tb_status,
+    CASE
+      WHEN t.scene_source = 1 THEN '2k'
+      WHEN t.scene_source = 2 THEN '1k'
+      WHEN t.scene_source = 3 THEN '4k'
+      WHEN t.scene_source = 4 THEN '4k'
+      ELSE NULL
+     END AS scene_resolution,
+    CASE
+      WHEN t.scene_source = 1 THEN 'pro'
+      WHEN t.scene_source = 2 THEN 'lite'
+      WHEN t.scene_source = 3 THEN 'minion'
+      WHEN t.scene_source = 4 THEN 'laser'
+      ELSE NULL
+     END AS scene_from,
+    #{sceneKind} scene_kind,
+    p.videos
+  FROM
+    t_scene_pro p
+  WHERE p.id = #{sceneProId}
+  </insert>
+
+
+  <delete id="deleteScenePlus" parameterType="java.lang.Long">
+    delete from t_scene_plus where id = #{sceneProId}
+  </delete>
+
+  <delete id="deleteScenePlusExt" parameterType="java.lang.Long">
+    delete from t_scene_plus_ext where plus_id = #{sceneProId}
+  </delete>
+
+</mapper>