ソースを参照

场景升级接口

dengsixing 3 年 前
コミット
ebc937f85d

+ 16 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneController.java

@@ -47,6 +47,8 @@ public class SceneController {
     ISceneEditInfoService sceneEditInfoService;
     @Autowired
     IScenePlusService scenePlusService;
+    @Autowired
+    ISceneUpgradeToV4Service sceneUpgradeToV4Service;
 
 
 //    /**
@@ -207,6 +209,20 @@ public class SceneController {
         return sceneProService.getStatusByScene(param);
     }
 
+    /**
+     * <p>
+            此接口用于V3\V4系统并存过渡期,场景升级v4做数据迁移用,待V3关闭可以删除
+     * </p>
+     * @author dengsixing
+     * @date 2022/4/21
+     * @return com.fdkankan.common.response.ResultData
+     **/
+    @PostMapping(value = "/upgradeToV4")
+    public ResultData upgradeToV4(@RequestBody @Validated UpgradeToV4ParamVO param){
+        ResultData resultData = sceneUpgradeToV4Service.upgradeToV4(param);
+        return resultData;
+    }
+
 //    /**
 //     * 获取场景详情
 //     */

+ 4 - 7
4dkankan-center-scene/src/main/java/com/fdkankan/scene/generate/AutoGenerate.java

@@ -16,13 +16,10 @@ public class AutoGenerate {
 
     public static void main(String[] args) {
 
-        System.out.println("相对路径指定到:"+ System.getProperty("user.dir"));
-
-
         String path =System.getProperty("user.dir") + "\\4dkankan-center-scene";
 
-        generate(path,"test", getTables(new String[]{
-                "t_scene_plus", "t_scene_plus_ext"
+        generate(path,"scene", getTables(new String[]{
+                "t_scene_repair_log"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -50,8 +47,8 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://192.168.0.47:13306/4dkankan-center-scene",
-                "root","4dkk2020cuikuan%")
+        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan-center-scene",
+                "root","4Dage@4Dage#@168")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)

+ 32 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/mapper/ISceneUpgradeMapper.java

@@ -0,0 +1,32 @@
+package com.fdkankan.scene.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.scene.entity.Folder;
+import com.fdkankan.scene.vo.FolderVO;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 文件夹表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ISceneUpgradeMapper extends BaseMapper {
+
+    public void transferScenePro(Long sceneProId);
+
+    public void transferSceneProExt(Long sceneProId);
+
+    public void transferScenePlus(Long sceneProId);
+
+    public void transferScenePlusExt(Long sceneProId);
+
+    public void transferSceneProEdit(Long sceneProEditId);
+
+    public void transferSceneProEditExt(Long sceneProEditId);
+
+}

+ 18 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneUpgradeToV4Service.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.scene.vo.UpgradeToV4ParamVO;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/21
+ **/
+public interface ISceneUpgradeToV4Service {
+
+    ResultData upgradeToV4(UpgradeToV4ParamVO param);
+
+}

+ 159 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneUpgradeToV4Service.java

@@ -0,0 +1,159 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.exceptions.ExceptionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.common.util.FileUtil;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.common.util.MatrixToImageWriterUtil;
+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.scene.bean.SceneJsonBean;
+import com.fdkankan.scene.entity.SceneEditControls;
+import com.fdkankan.scene.entity.SceneEditInfo;
+import com.fdkankan.scene.entity.SceneEditInfoExt;
+import com.fdkankan.scene.entity.ScenePlusExt;
+import com.fdkankan.scene.entity.ScenePro;
+import com.fdkankan.scene.entity.SceneProEdit;
+import com.fdkankan.scene.entity.SceneProEditExt;
+import com.fdkankan.scene.entity.SceneProEditV3;
+import com.fdkankan.scene.entity.SceneProExt;
+import com.fdkankan.scene.entity.SceneProV3;
+import com.fdkankan.scene.entity.SceneRepairLog;
+import com.fdkankan.scene.mapper.ISceneUpgradeMapper;
+import com.fdkankan.scene.service.ISceneEditControlsService;
+import com.fdkankan.scene.service.ISceneEditInfoExtService;
+import com.fdkankan.scene.service.ISceneEditInfoService;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.ISceneProEditExtService;
+import com.fdkankan.scene.service.ISceneProEditService;
+import com.fdkankan.scene.service.ISceneProEditV3Service;
+import com.fdkankan.scene.service.ISceneProExtService;
+import com.fdkankan.scene.service.ISceneProService;
+import com.fdkankan.scene.service.ISceneProV3Service;
+import com.fdkankan.scene.service.ISceneRepairLogService;
+import com.fdkankan.scene.service.ISceneUpgradeToV4Service;
+import com.fdkankan.scene.vo.SceneEditControlsVO;
+import com.fdkankan.scene.vo.UpgradeToV4ParamVO;
+import java.io.File;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+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 ISceneProV3Service sceneProV3Service;
+    @Autowired
+    private ISceneProEditV3Service sceneProEditV3Service;
+    @Autowired
+    private ISceneUpgradeMapper sceneUpgradeMapper;
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+    @Autowired
+    private ISceneRepairLogService sceneRepairLogService;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    private RedisUtil redisUtil;
+
+
+    @Override
+    public ResultData upgradeToV4(UpgradeToV4ParamVO param) {
+
+        SceneProV3 sceneProV3 = JSON.parseObject(param.getScenePro(), SceneProV3.class);
+        SceneProEditV3 sceneProEditV3 = JSON.parseObject(param.getSceneProEdit(), SceneProEditV3.class);
+
+        //加锁
+        String lockKey = String.format(RedisLockKey.LOCK_SCENE_UPGRADE_V4, sceneProV3.getNum());
+        boolean lock = redisLockUtil.lock(lockKey,RedisKey.EXPIRE_TIME_2_HOUR);
+        if(!lock){
+            return ResultData.error(ErrorCode.FAILURE_CODE_7019);
+        }
+
+        try {
+            //查询升级日志,如果已经升级成功,不允许重复升级
+            SceneRepairLog sceneRepairLog = sceneRepairLogService.getOne(
+                new LambdaQueryWrapper<SceneRepairLog>()
+                    .eq(SceneRepairLog::getNum, sceneProV3.getNum()));
+            if(Objects.nonNull(sceneRepairLog)){
+                if(sceneRepairLog.getState() == 0)
+                    return ResultData.error(ErrorCode.FAILURE_CODE_7019);
+                if(sceneRepairLog.getState() == 1)
+                    return ResultData.error(ErrorCode.FAILURE_CODE_7020);
+            }
+
+            //写入sceneProV3
+            sceneProV3Service.saveOrUpdate(sceneProV3);
+
+            //写入sceneProEditV3
+            sceneProEditV3Service.saveOrUpdate(sceneProEditV3);
+
+            //写入写入sceneProEdit、写入sceneProEditExt
+            sceneUpgradeMapper.transferSceneProEdit(sceneProEditV3.getId());
+            sceneUpgradeMapper.transferSceneProEditExt(sceneProEditV3.getId());
+
+            //同步到scenePro、sceneProExt
+            sceneUpgradeMapper.transferScenePro(sceneProV3.getId());
+            sceneUpgradeMapper.transferSceneProExt(sceneProV3.getId());
+
+            //同步到scenePlus、scenePlus
+            sceneUpgradeMapper.transferScenePlus(sceneProV3.getId());
+            sceneUpgradeMapper.transferScenePlusExt(sceneProV3.getId());
+
+            //todo 发送mq
+            rabbitMqProducer.sendByWorkQueue(upgradeToV4, sceneProV3.getId());
+
+            // TODO: 2022/4/22 写入进度条
+            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){
+            return ResultData.error(ErrorCode.FAILURE_CODE_7021);
+        }finally {
+            //解锁
+            redisLockUtil.unlockLua(lockKey);
+        }
+
+        return ResultData.ok();
+    }
+
+}

+ 23 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/UpgradeToV4ParamVO.java

@@ -0,0 +1,23 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotEmpty;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/21
+ **/
+@Data
+public class UpgradeToV4ParamVO {
+
+    @NotEmpty(message = "scenePro不能为空")
+    private String scenePro;
+
+    @NotEmpty(message = "sceneProEdit")
+    private String sceneProEdit;
+
+}

+ 85 - 0
4dkankan-center-scene/src/main/resources/mapper/scene/SceneUpgradeMapper.xml

@@ -0,0 +1,85 @@
+<?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.scene.mapper.ISceneUpgradeMapper">
+
+  <insert id="transferScenePro" parameterType="java.lang.Long">
+    INSERT INTO t_scene_pro(id, scene_name, scene_dec, web_site, thumb, user_id, camera_id, scene_logo, num, scene_type,
+    videos, gps, scene_scheme, pay_status, scene_status, build_type, create_time, update_time, tb_status)
+    SELECT t.`id`, t.`scene_name`, t.`scene_dec`, t.`web_site`, t.`thumb`, t.`user_id`, t.`camera_id`, t.`scene_logo`, t.`num`, t.`scene_type`,
+    t.`videos`, t.`gps`, t.`scene_scheme`, t.`pay_status`, t.`status`, t.`build_type`, t.`create_time`, t.`update_time`,
+    case when t.rec_status = 'A' then 0 else 1 end as tb_status
+    FROM `t_scene_pro_v3` t WHERE t.id = #{sceneProId}
+  </insert>
+
+  <insert id="transferSceneProExt" parameterType="java.lang.Long">
+    INSERT INTO t_scene_pro_ext(scene_pro_id, data_source, phone_id, recommend, files_name, `algorithm`, ecs,
+    `space`, firmware_version,compute_time,scene_source,vrnum,scene_resolution ,scene_from,`unicode`,view_count,shoot_count,create_time,update_time,tb_status)
+    SELECT t.`id`, t.`data_source`, t.`phone_id`, t.`recommend`, t.`files_name`, t.`algorithm`, t.`ecs`,
+    t.`space`, t.`firmware_version`, t.`compute_time`, t.`scene_source`, t.`vrnum`,
+    CASE
+      WHEN t.scene_source = 1 THEN 'tiles/2k'
+      WHEN t.scene_source = 2 THEN 'tiles/1k'
+      WHEN t.scene_source = 3 THEN 'tiles/4k'
+      WHEN t.scene_source = 4 THEN 'tiles/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,
+    t.`unicode`, t.`view_count`, t.`shoot_count`, t.`create_time`, t.`update_time`,
+    case when t.rec_status = 'A' then 0 else 1 end as tb_status
+    FROM `t_scene_pro_v3` t WHERE t.id = #{sceneProId}
+  </insert>
+
+  <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 pro.id, pro.num,pro.user_id,pro.`camera_id`,ext.phone_id,pro.scene_name,pro.scene_dec,pro.scene_status,ext.`scene_source`,
+    pro.pay_status,pro.scene_type,ext.recommend,pro.create_time,pro.update_time,pro.tb_status
+    FROM t_scene_pro pro
+    LEFT JOIN t_scene_pro_ext ext ON pro.id = ext.scene_pro_id
+    WHERE pro.id = #{sceneProId}
+  </insert>
+
+  <insert id="transferScenePlusExt" parameterType="java.lang.Long">
+    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, videos)
+    SELECT pro.id, ext.`data_source`, pro.`web_site`, pro.`thumb`, pro.`scene_scheme`, ext.`space`, ext.`ecs`,
+    ext.`shoot_count`, ext.`view_count`, pro.`gps`, ext.`algorithm`, ext.`firmware_version`, pro.`build_type`, pro.`create_time`, pro.`update_time`, pro.`tb_status`,
+    ext.scene_resolution, ext.scene_from, pro.videos
+    FROM t_scene_pro pro
+    LEFT JOIN t_scene_pro_ext ext ON pro.id = ext.scene_pro_id
+    WHERE pro.id = #{sceneProId}
+  </insert>
+
+  <insert id="transferSceneProEdit" parameterType="java.lang.Long">
+    INSERT INTO t_scene_pro_edit
+    (`id`,`pro_id`,`scene_key`,`need_key`,`version`,`thumb_status`,`marker_logo`,
+    `floor_logo`,`floor_logo_size`,`hots_ids`,`entry`,`bg_music`,`screencap_voice_src`,`screencap_voice_sound`,
+    `screencap_voice_soundsync`,`screencap_voice_type`,`play_data`,`floor_edit_ver`,`floor_publish_ver`,
+    `screencap_thumb`,`share_logo`,`create_time`,`update_time`,`tb_status`)
+    SELECT `id`,`pro_id`,`scene_key`,`need_key`,`version`,`thumb_status`,`marker_logo`,
+    `floor_logo`,`floor_logo_size`,`hots_ids`,`entry`,`bg_music`,`screencap_voice_src`,`screencap_voice_sound`,
+    `screencap_voice_soundsync`,`screencap_voice_type`,`play_data`,`floor_edit_ver`,`floor_publish_ver`,
+    `screencap_thumb`,`share_logo`,`create_time`,`update_time`,CASE WHEN rec_status = 'A' THEN 0 ELSE 1 END AS tb_status
+    FROM `t_scene_pro_edit_v3` t where t.id = #{sceneProEditId}
+  </insert>
+
+  <insert id="transferSceneProEditExt" parameterType="java.lang.Long">
+    INSERT INTO `t_scene_pro_edit_ext`
+    (`pro_edit_id`,`pro_id`,`map_visi`,`tour_visi`,`vr_visi`,`ruler_visi`,`cad_img_visi`,`floor_plan_png`,
+    `cad_info`,`pano_visi`,`m2d_visi`,`m3d_visi`,`measure_visi`,`link_scene`,`overlay`,`show_logo_bottom`,
+    `images_version`,`bg_music_name`,`jump_scene`,`floor_plan_angle`,`download_num`,`videos_user`,`vr_num`,
+    `create_time`,`update_time`,`tb_status`)
+    SELECT  `id`,`pro_id`,`map_visi`,`tour_visi`,`vr_visi`,`ruler_visi`,`cad_img_visi`,`floor_plan_png`,
+    `cad_info`,`pano_visi`,`m2d_visi`,`m3d_visi`,`measure_visi`,`link_scene`,`overlay`,`show_logo_bottom`,
+    `images_version`,`bg_music_name`,`jump_scene`,`floor_plan_angle`,`download_num`,`videos_user`,`vr_num`,
+    `create_time`,`update_time`,CASE WHEN rec_status = 'A' THEN 0 ELSE 1 END AS tb_status
+    FROM `t_scene_pro_edit_v3` where t.id = #{sceneProEditId}
+  </insert>
+</mapper>