Browse Source

场景中心接口变更

dengsixing 3 years ago
parent
commit
4610f4ac51

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/bean/SceneJsonBean.java

@@ -49,6 +49,11 @@ public class SceneJsonBean {
     private String music;
 
     /**
+     * 背景音乐文件名称
+     */
+    private String musicUploadFile;
+
+    /**
      * 浏览密码
      */
     private String scenePassword;

+ 3 - 4
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -6,6 +6,7 @@ import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.vo.*;
 import com.fdkankan.common.response.ResultData;
+import java.io.IOException;
 import java.util.List;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -742,10 +743,8 @@ public class SceneEditController extends BaseController {
     public ResultData uploadBallScreenVideo(
             @RequestParam("num") String num,
             @RequestParam("fileName") String fileName,
-            @RequestParam("file") MultipartFile file){
-//        return sceneEditInfoService.uploadBallScreenVideo(num, fileName, file);
-
-        return null;
+            @RequestParam("file") MultipartFile file) throws IOException {
+        return sceneEditInfoService.uploadBallScreenVideo(num, fileName, file);
     }
 
 

+ 18 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/entity/SceneEditControls.java

@@ -71,6 +71,24 @@ public class SceneEditControls implements Serializable {
     private Integer showFloorplan;
 
     /**
+     * 是否展示VR(0-不需要,1-需要)
+     */
+    @TableField("show_VR")
+    private Integer showVR;
+
+    /**
+     * 是否展示自动导览(0-不需要,1-需要)
+     */
+    @TableField("show_tour")
+    private Integer showTour;
+
+    /**
+     * 是否展示测量线(0-不需要,1-需要)
+     */
+    @TableField("show_rule")
+    private Integer showRule;
+
+    /**
      * 创建时间
      */
     @TableField("create_time")

+ 7 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/entity/SceneEditInfo.java

@@ -50,6 +50,12 @@ public class SceneEditInfo implements Serializable {
     private String music;
 
     /**
+     * 背景音乐文件名称
+     */
+    @TableField("music_upload_file")
+    private String musicUploadFile;
+
+    /**
      * 浏览密码
      */
     @TableField("scene_password")
@@ -137,7 +143,7 @@ public class SceneEditInfo implements Serializable {
      * 是否需要处理球幕视频
      */
     @TableField("build_video_status")
-    private String buildVideoStatus;
+    private Byte buildVideoStatus;
 
     /**
      * 创建时间

+ 1 - 2
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.vo.*;
 import java.io.IOException;
 import java.util.List;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -39,7 +38,7 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData downloadPanorama(FileParamVO param) throws Exception;
 
-    void saveTagsToSceneEditInfo(String num, Long sceneProId);
+    void saveTagsToSceneEditInfo(String num, Long sceneProId, SceneEditInfo sceneEditInfo);
 
     ResultData saveVideoBox(SaveVidoeBoxParamVO param) throws Exception;
 

+ 71 - 23
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -131,7 +131,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
-    public ResultData publicScene(SceneEditInfoParamVO param) throws Exception {
+    public ResultData publicScene(SceneEditInfoParamVO param)  throws Exception{
         String sceneNum = param.getNum();
         if(StrUtil.isEmpty(sceneNum)){
             throw new BusinessException(ErrorCode.PARAM_REQUIRED);
@@ -139,8 +139,17 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
         //根据场景码查询数据库
         ScenePro scenePro = sceneProService.findBySceneNum(sceneNum);
+        SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
         SceneEditInfo sceneEditInfo = this.getBySceneProId(scenePro.getId());
-        SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
+        SceneEditControls sceneEditControls = null;
+        if(sceneEditInfo == null){
+            sceneEditInfo = new SceneEditInfo();
+            sceneEditInfo.setSceneProId(scenePro.getId());
+
+            sceneEditControls = new SceneEditControls();
+        }else{
+            sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
+        }
 
         //生成sceneJson
         SceneJsonBean sceneJson = BeanUtil.copyProperties(sceneEditInfo, SceneJsonBean.class);
@@ -152,7 +161,10 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
 
         //处理热点数据,生成hot.json
-        this.publicHotData(sceneNum, sceneJson);
+        this.publicHotData(sceneNum, sceneJson, sceneEditInfo);
+
+        //处理球幕视频
+        this.buildVideo(sceneEditInfo, sceneProExt.getDataSource(), sceneNum);
 
         //上传sceneJson文件
         String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", sceneNum);
@@ -172,11 +184,46 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         String viewPath = String.format(UploadFilePath.VIEW_PATH, param.getNum());
         uploadToOssUtil.copyFiles(editPath,viewPath);
 
-
         return ResultData.ok();
     }
 
-    private void publicHotData(String sceneNum, SceneJsonBean sceneJson) throws IOException {
+    private void buildVideo(SceneEditInfo sceneEditInfo, String path, String num) throws Exception{
+        if(CommonStatus.NO.equals(sceneEditInfo.getBuildVideoStatus())){
+            return;
+        }
+        if(path != null && !"".equals(path) && path.startsWith("http")){
+            path = ConstantFilePath.BUILD_MODEL_PATH + File.separator + path.split("/")[path.split("/").length - 2];
+        }
+
+        String target = path + "_images";
+
+        File video = new File(target + File.separator + "extras/video");
+        //如果文件夹或者文件不存在,跳出
+        if(video.exists() || video.listFiles() == null && video.listFiles().length == 0){
+            return;
+        }
+
+        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
+        for(String videoName : video.list()){
+            uploadToOssUtil.upload(target + File.separator + "extras/video/" + videoName,userEditPath + videoName);
+
+            CreateObjUtil.mp4ToFlv(target + File.separator + "extras/video/" + videoName,
+                target + File.separator + "extras/video/" + videoName.replace("mp4", "flv"));
+
+            uploadToOssUtil.upload(target + File.separator + "extras/video/" + videoName.replace("mp4", "flv"),userEditPath + videoName.replace("mp4", "flv"));
+
+            //覆盖原始视频资源
+            FileUtils.copyFile(target + File.separator + "extras/video/" + videoName,
+                path + File.separator + "caches/videos/" + videoName, true);
+
+        }
+        FileUtils.deleteDirectory(target + File.separator + "extras/video/");
+
+        //重置状态
+        sceneEditInfo.setBuildVideoStatus(CommonStatus.NO.code());
+    }
+
+    private void publicHotData(String sceneNum, SceneJsonBean sceneJson, SceneEditInfo sceneEditInfo) throws IOException {
         String hotDataKey = String.format(RedisKey.SCENE_HOT_DATA, sceneNum);
         Map<String, String> hotMap = redisUtil.hmget(hotDataKey);
         List<String> hotList = Lists.newArrayList();
@@ -195,7 +242,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
             //修改tags状态为是,标识有热点数据
             ScenePro scenePro = sceneProService.findBySceneNum(sceneNum);
-            this.saveTagsToSceneEditInfo(sceneNum, scenePro.getId());
+
+            this.saveTagsToSceneEditInfo(sceneNum, scenePro.getId(), sceneEditInfo);
         }
     }
 
@@ -565,7 +613,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
-    public void saveTagsToSceneEditInfo(String num, Long sceneProId){
+    public void saveTagsToSceneEditInfo(String num, Long sceneProId, SceneEditInfo sceneEditInfo){
         //查询缓存是否包含热点数据
         String key = String.format(RedisKey.SCENE_HOT_DATA, num);
         Map<String, String> allTagsMap = redisUtil.hmget(key);
@@ -579,21 +627,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
 
         //更改热点状态
-        SceneEditInfo sceneEditInfo = this.getBySceneProId(sceneProId);
-        if(Objects.isNull(sceneEditInfo)){
-            sceneEditInfo = new SceneEditInfo();
-            sceneEditInfo.setSceneProId(sceneProId);
-            sceneEditInfo.setTags(hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code());
-            this.save(sceneEditInfo);
-        }else{
-            //更改场景编辑版本
-            this.update(
-                new LambdaUpdateWrapper<SceneEditInfo>()
-                    .setSql("version=version+" + 1)
-                    .set(SceneEditInfo::getTags, hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code())
-                    .eq(SceneEditInfo::getId, sceneEditInfo.getId()));
+        sceneEditInfo.setTags(hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code());
+        //version 是空的代表 sceneEditInfo记录集不存在
+        if(sceneEditInfo.getVersion() != null){
+            sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
         }
-
     }
 
     @Override
@@ -679,11 +717,21 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             targetFile.getParentFile().mkdirs();
         }
 
-        //上传文件
+        //保存视频到本地
         file.transferTo(targetFile);
 
+        SceneEditInfo sceneEditInfo = this.getBySceneProId(scenePro.getId());
+        if(sceneEditInfo == null){
+            sceneEditInfo = new SceneEditInfo();
+            sceneEditInfo.setSceneProId(scenePro.getId());
+            sceneEditInfo.setBuildVideoStatus(CommonStatus.YES.code());
+            this.save(sceneEditInfo);
+        }else{
+            sceneEditInfo.setBuildVideoStatus(CommonStatus.YES.code());
+            this.updateById(sceneEditInfo);
+        }
 
-        return null;
+        return ResultData.ok();
     }
 
     private void updateBoxVideos(SceneEditInfo sceneEditInfo, Long sceneProId, String boxVideos){

+ 16 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneEditControlsParamVO.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -61,5 +62,20 @@ public class SceneEditControlsParamVO implements Serializable {
      */
     private Integer showFloorplan;
 
+    /**
+     * 是否展示VR(0-不需要,1-需要)
+     */
+    private Integer showVR;
+
+    /**
+     * 是否展示自动导览(0-不需要,1-需要)
+     */
+    private Integer showTour;
+
+    /**
+     * 是否展示测量线(0-不需要,1-需要)
+     */
+    private Integer showRule;
+
 
 }

+ 15 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneEditControlsVO.java

@@ -51,5 +51,20 @@ public class SceneEditControlsVO implements Serializable {
      */
     private Integer showFloorplan;
 
+    /**
+     * 是否展示VR(0-不需要,1-需要)
+     */
+    private Integer showVR;
+
+    /**
+     * 是否展示自动导览(0-不需要,1-需要)
+     */
+    private Integer showTour;
+
+    /**
+     * 是否展示测量线(0-不需要,1-需要)
+     */
+    private Integer showRule;
+
 
 }

+ 6 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneEditInfoParamVO.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -43,6 +44,11 @@ public class SceneEditInfoParamVO {
     private String music;
 
     /**
+     * 背景音乐文件名称
+     */
+    private String musicUploadFile;
+
+    /**
      * 浏览密码
      */
     private String scenePassword;

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneEditInfoVO.java

@@ -35,6 +35,11 @@ public class SceneEditInfoVO implements Serializable {
     private String music;
 
     /**
+     * 背景音乐文件名称
+     */
+    private String musicUploadFile;
+
+    /**
      * 浏览密码
      */
     private String scenePassword;

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneInfoVO.java

@@ -48,6 +48,11 @@ public class SceneInfoVO {
     private String music;
 
     /**
+     * 背景音乐文件名称
+     */
+    private String musicUploadFile;
+
+    /**
      * 浏览密码
      */
     private String scenePassword;

+ 12 - 10
4dkankan-center-scene/src/main/resources/bootstrap.yml

@@ -1,16 +1,18 @@
 spring:
-  jackson:
-    serialization:
-      #关闭jackson转换 实体属性空值校验
-      FAIL_ON_EMPTY_BEANS: false
+#  jackson:
+#    serialization:
+#      #关闭jackson转换 实体属性空值校验
+#      FAIL_ON_EMPTY_BEANS: false
+#    date-format: yyyy-MM-dd HH:mm:ss
+#    time-zone: GMT+8
   application:
     name: 4dkankan-center-scene
-  servlet:
-    multipart:
-      # 设置单个文件大小
-      max-file-size: 50MB
-      # 设置单次请求文件的总大小
-      max-request-size: 50MB
+#  servlet:
+#    multipart:
+#      # 设置单个文件大小
+#      max-file-size: 50MB
+#      # 设置单次请求文件的总大小
+#      max-request-size: 50MB
   cloud:
     nacos:
       config: