dsx 2 anos atrás
pai
commit
5e271e602f

+ 21 - 0
src/main/java/com/fdkankan/job/controller/SceneProEditController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.job.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * pro场景编辑数据表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-03
+ */
+@RestController
+@RequestMapping("/job/sceneProEdit")
+public class SceneProEditController {
+
+}
+

+ 285 - 0
src/main/java/com/fdkankan/job/entity/SceneProEdit.java

@@ -0,0 +1,285 @@
+package com.fdkankan.job.entity;
+
+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 java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * pro场景编辑数据表
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-03
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro_edit")
+public class SceneProEdit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * pro场景id
+     */
+    @TableField("pro_id")
+    private Long proId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 大场景的密钥
+     */
+    @TableField("scene_key")
+    private String sceneKey;
+
+    /**
+     * 展示页面密码,0不需要,1需要
+     */
+    @TableField("need_key")
+    private Integer needKey;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 表示缩略图是否存在
+     */
+    @TableField("thumb_status")
+    private Integer thumbStatus;
+
+    /**
+     * 地面点位标志
+     */
+    @TableField("marker_logo")
+    private String markerLogo;
+
+    /**
+     * 0表示默认,1表示自己上传
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 标记大小
+     */
+    @TableField("floor_logo_size")
+    private Integer floorLogoSize;
+
+    /**
+     * 要上传的热点的id集合,用逗号隔开
+     */
+    @TableField("hots_ids")
+    private String hotsIds;
+
+    /**
+     * 表示初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 背景音乐名称
+     */
+    @TableField("bg_music")
+    private String bgMusic;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 普通录屏文件地址
+     */
+    @TableField("screencap_voice_src")
+    private String screencapVoiceSrc;
+
+    /**
+     * 录音文件地址
+     */
+    @TableField("screencap_voice_sound")
+    private String screencapVoiceSound;
+
+    /**
+     * 同步录音地址
+     */
+    @TableField("screencap_voice_soundsync")
+    private String screencapVoiceSoundsync;
+
+    /**
+     * 选择的类型,sound为screencapVoiceSound,file为screencapVoiceSrc,soundsync为screencap_voice_soundsync
+     */
+    @TableField("screencap_voice_type")
+    private String screencapVoiceType;
+
+    /**
+     * 录屏文件地址
+     */
+    @TableField("play_data")
+    private String playData;
+
+    /**
+     * 重新建模的版本
+     */
+    @TableField("floor_edit_ver")
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    @TableField("floor_publish_ver")
+    private Integer floorPublishVer;
+
+    /**
+     * 录屏图片存放文件
+     */
+    @TableField("screencap_thumb")
+    private String screencapThumb;
+
+    /**
+     * 分享的logo和生成二维码的logo
+     */
+    @TableField("share_logo")
+    private String shareLogo;
+
+    /**
+     * 小地图浏览
+     */
+    @TableField("map_visi")
+    private Integer mapVisi;
+
+    /**
+     * 自动导览
+     */
+    @TableField("tour_visi")
+    private Integer tourVisi;
+
+    /**
+     * vr模式
+     */
+    @TableField("vr_visi")
+    private Integer vrVisi;
+
+    /**
+     * 展示页面是否显示标尺
+     */
+    @TableField("ruler_visi")
+    private Integer rulerVisi;
+
+    /**
+     * 展示页面cad图在平面图是否显示
+     */
+    @TableField("cad_img_visi")
+    private Integer cadImgVisi;
+
+    /**
+     * cad平面图
+     */
+    @TableField("floor_plan_png")
+    private String floorPlanPng;
+
+    /**
+     * cad平面图参数
+     */
+    @TableField("cad_info")
+    private String cadInfo;
+
+    @TableField("pano_visi")
+    private Integer panoVisi;
+
+    @TableField("m2d_visi")
+    private Integer m2dVisi;
+
+    @TableField("m3d_visi")
+    private Integer m3dVisi;
+
+    @TableField("measure_visi")
+    private Integer measureVisi;
+
+    /**
+     * 肖安需求,场景于场景之间的关联
+     */
+    @TableField("link_scene")
+    private String linkScene;
+
+    @TableField("overlay")
+    private String overlay;
+
+    /**
+     * 是否显示底部logo,1显示,0不显示
+     */
+    @TableField("show_logo_bottom")
+    private Boolean showLogoBottom;
+
+    /**
+     * 全景图版本号
+     */
+    @TableField("images_version")
+    private Integer imagesVersion;
+
+    /**
+     * 上传的背景音乐
+     */
+    @TableField("bg_music_name")
+    private String bgMusicName;
+
+    @TableField("jump_scene")
+    private Boolean jumpScene;
+
+    /**
+     * 旋转角度
+     */
+    @TableField("floor_plan_angle")
+    private String floorPlanAngle;
+
+    /**
+     * 场景下载次数
+     */
+    @TableField("download_num")
+    private Integer downloadNum;
+
+    /**
+     * 绿幕抠图json数据
+     */
+    @TableField("videos_user")
+    private String videosUser;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    @TableField("vr_num")
+    private String vrNum;
+
+    /**
+     * 随心装封面图
+     */
+    @TableField("vr_thumb")
+    private String vrThumb;
+
+
+}

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

@@ -17,7 +17,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"job", getTables(new String[]{
-                "t_scene_build_process_log"
+                "t_scene_pro_edit"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 173 - 0
src/main/java/com/fdkankan/job/job/V4toV3Handler.java

@@ -0,0 +1,173 @@
+package com.fdkankan.job.job;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.PayStatus;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.job.entity.ScenePlus;
+import com.fdkankan.job.entity.ScenePlusExt;
+import com.fdkankan.job.entity.ScenePro;
+import com.fdkankan.job.entity.SceneProEdit;
+import com.fdkankan.job.entity.SceneEditInfo;
+import com.fdkankan.job.service.*;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.redis.util.RedisUtil;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.*;
+
+/**
+ * <p>
+ * v4场景回退v3
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/12/16
+ **/
+@Slf4j
+@Component
+public class V4toV3Handler {
+
+    @Value("${main.url}")
+    private String mainUrl;
+    @Value("${scene.pro.v3.url}")
+    private String sceneProV3Url;
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private ISceneProEditService sceneProEditService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
+
+
+    @XxlJob("V4toV3Handler")
+    private void V4toV3Handler(){
+        XxlJobHelper.log("V4toV3Handler start.....");
+
+        String active = SpringUtil.getActiveProfile();
+        XxlJobHelper.log("当前环境:{}", active);
+
+        List<String> faildNumList = new ArrayList<>();
+
+        List<String> numList = null;
+        String nums = XxlJobHelper.getJobParam();
+        if(StrUtil.isNotEmpty(nums)){
+            numList = Arrays.asList(nums.split(","));
+        }
+
+        LambdaQueryWrapper<ScenePlus> queryWrapper = new LambdaQueryWrapper<>();
+        if(CollUtil.isNotEmpty(numList)){
+            queryWrapper.in(ScenePlus::getNum, numList);
+        }
+        List<ScenePlus> list = scenePlusService.list(queryWrapper);
+
+        if(CollUtil.isNotEmpty(list)){
+            list.parallelStream().forEach(plus->{
+                String num = plus.getNum();
+                try {
+                    ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(plus.getId());
+                    SceneEditInfo sceneEditInfo = sceneEditInfoService.getOne(new LambdaQueryWrapper<SceneEditInfo>().eq(SceneEditInfo::getScenePlusId, plus.getId()));
+
+                    ScenePro scenePro = new ScenePro();
+                    scenePro.setNum(plus.getNum());
+                    scenePro.setWebSite(mainUrl + "/" + sceneProV3Url + plus.getNum());
+                    scenePro.setThumb("https://4dkk.4dage.com/loading/thumb.jpg");
+                    scenePro.setCreateTime(plus.getCreateTime());
+                    scenePro.setStatus(-2);
+                    scenePro.setDataSource(scenePlusExt.getDataSource());
+                    scenePro.setUserId(plus.getUserId());
+                    scenePro.setPayStatus(PayStatus.PAY.code());
+                    scenePro.setCameraId(plus.getCameraId());
+                    scenePro.setPhoneId(plus.getPhoneId());
+                    scenePro.setSceneName(plus.getTitle());
+                    scenePro.setSceneDec(plus.getDescription());
+                    scenePro.setSceneType(plus.getSceneType());
+                    scenePro.setViewCount(scenePlusExt.getViewCount());
+                    scenePro.setShootCount(scenePlusExt.getShootCount());
+                    if(StrUtil.isNotEmpty(scenePlusExt.getVideos())){
+                        scenePro.setVideos(scenePlusExt.getVideos().replaceAll("scene_view_data/" + plus.getNum() + "/data", "data/data" + plus.getNum()));
+                    }
+                    scenePro.setGps(scenePlusExt.getGps());
+                    scenePro.setSceneScheme(scenePlusExt.getSceneScheme());
+                    scenePro.setAlgorithm(scenePlusExt.getAlgorithm());
+                    scenePro.setEcs(scenePlusExt.getEcs());
+                    scenePro.setSpace(scenePlusExt.getSpace());
+                    scenePro.setFirmwareVersion(scenePlusExt.getFirmwareVersion());
+                    scenePro.setBuildType(scenePlusExt.getBuildType());
+                    scenePro.setComputeTime(scenePlusExt.getComputeTime());
+                    scenePro.setSceneSource(plus.getSceneSource());
+                    sceneProService.save(scenePro);
+
+                    SceneProEdit sceneProEdit = new SceneProEdit();
+                    sceneProEdit.setProId(scenePro.getId());
+                    sceneProEdit.setCreateTime(plus.getCreateTime());
+                    sceneProEdit.setVersion(sceneEditInfo.getVersion());
+                    sceneProEdit.setImagesVersion(sceneEditInfo.getImgVersion());
+                    sceneProEditService.save(sceneProEdit);
+
+                    //复制oss
+                    String dataPath = String.format("data/data%s/", num);
+                    String imagePath = String.format("images/images%s/", num);
+                    String videoPath = String.format("video/video%s/", num);
+                    String voicePath = String.format("voice/voice%s/", num);
+                    String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
+                    String imageViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+                    String videoViewPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, num);
+                    String voiceViewPath = String.format(UploadFilePath.VOICE_VIEW_PATH, num);
+
+                    fYunFileService.copyFileInBucket(dataViewPath, dataPath);
+                    fYunFileService.copyFileInBucket(imageViewPath, imagePath);
+                    fYunFileService.copyFileInBucket(videoViewPath, videoPath);
+                    fYunFileService.copyFileInBucket(voiceViewPath, voicePath);
+
+                    //写入本地文件
+                    JSONObject sceneJson = JSONObject.parseObject(JSONObject.toJSONString(scenePro));
+                    sceneJson.put("videos",JSON.parseObject(scenePro.getVideos()).toJSONString());
+                    sceneJson.put("version",sceneProEdit.getVersion());
+                    sceneJson.put("imagesVersion",sceneProEdit.getImagesVersion());
+                    sceneJson.put("floorEditVer",sceneProEdit.getFloorEditVer());
+                    sceneJson.put("floorPublishVer",sceneProEdit.getFloorPublishVer());
+                    String sceneJsonStr = JSON.toJSONString(sceneJson);
+
+                    FileUtils.writeFile(ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "scene.json", sceneJsonStr);
+                    //上传sceneJson文件
+                    fYunFileService.uploadFile(sceneJsonStr.getBytes(), dataViewPath + "scene.json");
+
+                    fYunFileService.downloadFile(dataViewPath + "floorplan_cad.json", ConstantFilePath.SCENE_PATH + "data" + File.separator + "data" + num + File.separator + "floorplan_cad.json");
+                }catch (Exception e){
+                    faildNumList.add(plus.getNum());
+                    log.error("转换失败,num:" + num, e);
+                }
+            });
+        }
+
+        XxlJobHelper.log("V4toV3Handler end.....");
+        XxlJobHelper.log("失败场景码:" + JSON.toJSONString(faildNumList));
+    }
+
+
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/job/mapper/ISceneProEditMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.job.mapper;
+
+import com.fdkankan.job.entity.SceneProEdit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * pro场景编辑数据表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-03
+ */
+@Mapper
+public interface ISceneProEditMapper extends BaseMapper<SceneProEdit> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/job/service/ISceneProEditService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.job.service;
+
+import com.fdkankan.job.entity.SceneProEdit;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-03
+ */
+public interface ISceneProEditService extends IService<SceneProEdit> {
+
+}

+ 20 - 0
src/main/java/com/fdkankan/job/service/impl/SceneProEditServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.job.service.impl;
+
+import com.fdkankan.job.entity.SceneProEdit;
+import com.fdkankan.job.mapper.ISceneProEditMapper;
+import com.fdkankan.job.service.ISceneProEditService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-03
+ */
+@Service
+public class SceneProEditServiceImpl extends ServiceImpl<ISceneProEditMapper, SceneProEdit> implements ISceneProEditService {
+
+}

+ 5 - 0
src/main/resources/mapper/job/SceneProEditMapper.xml

@@ -0,0 +1,5 @@
+<?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.job.mapper.ISceneProEditMapper">
+
+</mapper>