浏览代码

增加重算接口

dengsixing 2 年之前
父节点
当前提交
51ad765033

+ 35 - 0
.gitignore

@@ -0,0 +1,35 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+### Example user template template
+### Example user template
+
+# IntelliJ project files
+.idea
+*.iml
+out
+gen
+/**/target/

+ 7 - 0
src/main/java/com/fdkankan/contro/controller/SceneFileController.java

@@ -5,8 +5,10 @@ import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -52,4 +54,9 @@ public class SceneFileController{
     public ResultData turntableUploadSuccess(String params) throws Exception {
         return sceneFileBuildService.turntableUploadSuccess(params);
     }
+
+    @GetMapping("rebuildScene")
+    public ResultData rebuildScene(@RequestParam(value = "num") String num){
+        return sceneFileBuildService.rebuildScene(num);
+    }
 }

+ 3 - 0
src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java

@@ -130,6 +130,9 @@ public class ScenePlusExt implements Serializable {
     @TableField("videos")
     private String videos;
 
+    @TableField("yun_file_bucket")
+    private String yunFileBucket;
+
     /**
      * 创建时间
      */

+ 231 - 0
src/main/java/com/fdkankan/contro/entity/ScenePro.java

@@ -0,0 +1,231 @@
+package com.fdkankan.contro.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 2022-07-04
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro")
+public class ScenePro implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景名称
+     */
+    @TableField("scene_name")
+    private String sceneName;
+
+    /**
+     * 场景描述
+     */
+    @TableField("scene_dec")
+    private String sceneDec;
+
+    /**
+     * 场景的链接地址
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 场景缩略图
+     */
+    @TableField("thumb")
+    private String thumb;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 场景logo
+     */
+    @TableField("scene_logo")
+    private String sceneLogo;
+
+    /**
+     * 大场景序号
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居,99一件换装虚拟房源
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * 拍摄数量 ps:点位数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 所有资源文件名
+     */
+    @TableField("files_name")
+    private String filesName;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * 要gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 方案:1是双目,2是转台,3是六目,4是八目,10获取4k图,11获取2k,12获取1k
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableLogic(value = "A", delval = "I")
+    @TableField("rec_status")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 算法类型
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 服务器的服务商
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 使用容量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 调用V2还是V3的算法
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 计算时间(秒为单位)
+     */
+    @TableField("compute_time")
+    private Long computeTime;
+
+    /**
+     * 场景来源,相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景,14上传的matterport场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    @TableField("vrnum")
+    private String vrnum;
+
+    @TableField("unicode")
+    private String unicode;
+
+    @TableField("mosaics")
+    private String mosaics;
+
+    /**
+     * 是否已升级v4(0-否,1-是)
+     */
+    @TableField("is_upgrade")
+    private Integer isUpgrade;
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/contro/mapper/ISceneProMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.ScenePro;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * pro场景表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface ISceneProMapper extends BaseMapper<ScenePro> {
+
+}

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

@@ -0,0 +1,15 @@
+package com.fdkankan.contro.service;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/14
+ **/
+public interface IFdkkLaserService {
+
+    void updateSceneStatus(String sceneCode,int status);
+
+}

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

@@ -23,4 +23,6 @@ public interface ISceneFileBuildService extends IService<SceneFileBuild> {
 
     ResultData turntableUploadSuccess(String params) throws Exception;
 
+    ResultData rebuildScene(String num);
+
 }

+ 3 - 1
src/main/java/com/fdkankan/contro/service/IScenePlusService.java

@@ -3,6 +3,7 @@ package com.fdkankan.contro.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.web.response.ResultData;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * <p>
@@ -16,9 +17,10 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     ScenePlus getScenePlusByNum(String num);
 
-    ResultData resetSpace(String sceneNum) throws Exception;
+    ResultData resetSpace(String sceneNum);
 
     String getDataSourceLikeUnicode(String unicode);
 
     ScenePlus getByFileId(String fileId);
+
 }

+ 18 - 0
src/main/java/com/fdkankan/contro/service/ISceneProService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.ScenePro;
+
+/**
+ * <p>
+ * pro场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProService extends IService<ScenePro> {
+
+    ScenePro getByNum(String num);
+
+}

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

@@ -0,0 +1,42 @@
+package com.fdkankan.contro.service.impl;
+
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.HttpCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.service.IFdkkLaserService;
+import com.fdkankan.web.response.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+@Service
+@Slf4j
+public class IFdkkLaserServiceImpl implements IFdkkLaserService {
+
+    private final String UPDATE_SCENE_STATUS_URL_TEMPLATE="/indoor/%s/scene/useStatus/%s";
+    private final String DISABLE_COOPERATION_SCENE_URL="/laser/4dage/scene/cooperation/disable";
+    private final String ENABLE_COOPERATION_CAMERA_URL="/laser/4dage/scene/cooperation/cameraSave";
+    private final String GET_LASER_SCENE_USER_URL="/laser/4dage/getSceneNum";
+    private final String GET_LASER_SCENE_CODE_URL="/laser/4dage/scene/getScenesBySnCode";
+    private final String GET_LASER_SCENE_CNT_URL="/laser/4dage/scene/getSceneNumByCamera";
+
+    @Value("${4dkk.laserService.host}")
+    private String laserHost;
+
+    private RestTemplate restTemplate = new RestTemplate();
+
+    public void updateSceneStatus(String sceneCode,int status){
+        String url = laserHost + String.format(UPDATE_SCENE_STATUS_URL_TEMPLATE,sceneCode,status);
+        ResponseEntity<Result> response = restTemplate.getForEntity(url, Result.class);
+        if(response.getStatusCode() != HttpStatus.OK){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7001);
+        }
+        if(response.getBody().getCode() != HttpCode.SC_SUCCESS){
+            throw new BusinessException(response.getBody().getCode(), response.getBody().getMsg());
+        }
+    }
+
+}

+ 228 - 8
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -7,13 +7,49 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.*;
+import com.fdkankan.common.constant.CameraConstant;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ConstantUrl;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.RecStatus;
+import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.*;
-import com.fdkankan.contro.entity.*;
+import com.fdkankan.common.util.DateExtUtil;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.common.util.SnowflakeIdGenerator;
+import com.fdkankan.contro.entity.Camera;
+import com.fdkankan.contro.entity.CameraDetail;
+import com.fdkankan.contro.entity.Company;
+import com.fdkankan.contro.entity.SSOUser;
+import com.fdkankan.contro.entity.SceneCooperation;
+import com.fdkankan.contro.entity.SceneEditControls;
+import com.fdkankan.contro.entity.SceneEditInfo;
+import com.fdkankan.contro.entity.SceneEditInfoExt;
+import com.fdkankan.contro.entity.SceneFileBuild;
+import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePlusExt;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.entity.SceneResourceCamera;
+import com.fdkankan.contro.entity.SceneResourceCooperation;
 import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
-import com.fdkankan.contro.service.*;
+import com.fdkankan.contro.service.ICameraDetailService;
+import com.fdkankan.contro.service.ICameraService;
+import com.fdkankan.contro.service.ICompanyService;
+import com.fdkankan.contro.service.IFdkkLaserService;
+import com.fdkankan.contro.service.IScene3dNumService;
+import com.fdkankan.contro.service.ISceneCooperationService;
+import com.fdkankan.contro.service.ISceneEditControlsService;
+import com.fdkankan.contro.service.ISceneEditInfoExtService;
+import com.fdkankan.contro.service.ISceneEditInfoService;
+import com.fdkankan.contro.service.ISceneFileBuildService;
+import com.fdkankan.contro.service.IScenePlusExtService;
+import com.fdkankan.contro.service.IScenePlusService;
+import com.fdkankan.contro.service.ISceneProService;
+import com.fdkankan.contro.service.ISceneResourceCameraService;
+import com.fdkankan.contro.service.ISceneResourceCooperationService;
+import com.fdkankan.contro.service.IUserService;
 import com.fdkankan.contro.vo.ResponseSceneFile;
 import com.fdkankan.contro.vo.ScenePlusVO;
 import com.fdkankan.fyun.config.FYunFileConfig;
@@ -30,6 +66,13 @@ import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.web.config.FileRouteConfig;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.util.RSAEncrypt;
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
@@ -38,9 +81,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.io.File;
-import java.util.*;
-
 /**
  * <p>
  * 场景文件建模表 服务实现类
@@ -65,6 +105,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     private String queueModelingCall;
     @Value("${queue.modeling.modeling-pre}")
     private String queueModelingPre;
+    @Value("${fyun.type}")
+    private String fyunType;
 
     @Autowired
     private RedisUtil redisUtil;
@@ -116,6 +158,11 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     private FYunFileConfig fYunFileConfig;
 
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private IFdkkLaserService fdkkLaserService;
+
     @Override
     public SceneFileBuild findByFileId(String fileId) {
 
@@ -356,7 +403,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 if(fromOss){
                     objects = this.createScenePlus(sceneNum, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
                             jsonObject.getString("pwd"), unicode,
-                            cameraType, String.valueOf(fileId), prefix, "", icon, "0", cameraDetail.getUserId(), userName,
+                            cameraType, fileId, prefix, "", icon, "0", cameraDetail.getUserId(), userName,
                             jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
                             jsonObject.getJSONArray("points").size(), jsonObject.getString("name"), jsonObject.getString("info"),
                             jsonObject.getInteger("scenetype"), jsonObject.getString("gps"), rebuild,
@@ -1036,4 +1083,177 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         mqMsg.setThumb(thumb);
         return mqMsg;
     }
+
+    @Override
+    public ResultData rebuildScene(String num) {
+
+        ScenePro scenePro = sceneProService.getByNum(num);
+        //如果是v3场景,不允许重算,需要升级v4后再调此接口进行重算
+        if(Objects.nonNull(scenePro)
+            && (Objects.isNull(scenePro.getIsUpgrade())
+            || scenePro.getIsUpgrade() != CommonStatus.YES.code().intValue())){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5064);
+        }
+
+        ScenePlusVO scenePlusVO = null;
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        String path = scenePlusExt.getDataSource();
+        Integer sceneSource = scenePlus.getSceneSource();
+        String dataSource = scenePlusExt.getDataSource();
+        Long sceneUserId = scenePlus.getUserId();
+        String buildType = scenePlusExt.getBuildType();
+        Integer sceneStatus = scenePlus.getSceneStatus();
+        String webSite = scenePlusExt.getWebSite();
+        String thumb = scenePlusExt.getThumb();
+        Integer payStatus = scenePlus.getPayStatus();
+        Integer sceneScheme = scenePlusExt.getSceneScheme();
+        Long sceneId = scenePlus.getId();
+        String sceneName = scenePlus.getTitle();
+        Date createTime = scenePlus.getCreateTime();
+        String bucket = scenePlusExt.getYunFileBucket();
+
+        //重新计算时需要删除文件夹,否知使用缓存
+        FileUtils.delAllFile(path + File.separator + "results");
+
+        String fileId = path.split("/")[path.split("/").length - 2];
+        log.info("fileId:" + fileId);
+        //获取解压后的资源的data.fdage中的数据
+        File folderPath = new File(path);
+
+        if (fyunType.equals(FYunTypeEnum.AWS.code())) {
+            fYunFileService.downloadFileByCommand(bucket, path + "/capture/",
+                ConstantFilePath.OSS_PREFIX + path.replace(ConstantFilePath.BUILD_MODEL_PATH, ""));
+        } else {
+            String dataFdageOssPath =
+                ConstantFilePath.OSS_PREFIX +
+                    path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
+                        .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage";
+            fYunFileService.downloadFileByCommand(bucket, path + "/capture/data.fdage", dataFdageOssPath);
+        }
+        String data = FileUtils.readFile(folderPath.getAbsolutePath() + File.separator + "capture" + File.separator + "data.fdage");
+        com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(data);
+        if(ObjectUtils.isEmpty(jsonObject)){
+            log.error("data.fdage文件不存在");
+            return ResultData.error(CameraConstant.FAILURE_6009.code(), CameraConstant.FAILURE_6009.message());
+        }
+
+        String sceneUrl = mainUrl +"/"+sceneProNewUrl;
+
+        //有points字段的是八目
+        if (!jsonObject.containsKey("points")) {
+//            String cameraName = jsonObject.getString("camid");
+//            Camera camera = cameraService.getByChildName(cameraName);
+//            if (camera == null) {
+//                log.error("该相机不存在:" + cameraName);
+//                throw new BusinessException(CameraConstant.FAILURE_6003);
+//            }
+//
+//            CameraDetail detail = cameraDetailService.getByCameraId(camera.getId());
+//            if (detail == null) {
+//                log.error("该相机详情不存在:" + cameraName);
+//                throw new BusinessException(CameraConstant.FAILURE_6003);
+//            }
+//
+//            Long userId = null;
+//            String userName = null;
+//
+//            if (detail.getUserId() != null) {
+//                SSOUser user = userService.getSSOUserByUserId(detail.getUserId());
+//                if (user == null) {
+//                    log.error("用户id不存在:" + detail.getUserId());
+//                } else {
+//                    userId = user.getId();
+//                    userName = user.getUserName();
+//                }
+//            }
+//
+//            //13表示转台
+//            Long cameraType = 13L;
+//            //激光转台 八目相机占用 10 和 11
+//            if(jsonObject.getJSONObject("cam").getIntValue("type") == 10){
+//                //激光转台
+//                cameraType = 14L;
+//            }
+//
+//            String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
+//            Object[] objects = this.createScenePlus(num, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
+//                jsonObject.getString("pwd"), unicode,
+//                detail.getType(), fileId, "http://creator.4dkankan.com/" + unicode + File.separator, "zip.Zip",
+//                jsonObject.getString("scenePic"), "0", userId, userName,
+//                jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
+//                jsonObject.getJSONArray("imgs").size(), jsonObject.getString("name"), jsonObject.getString("info"),
+//                jsonObject.getInteger("scenetype"), jsonObject.getString("gps"), 1,
+//                jsonObject.getInteger("resolution"), sceneUrl, buildType, null);
+//            BuildSceneCallMessage  mqMessage = (BuildSceneCallMessage)objects[1];
+//            scenePlusVO = (ScenePlusVO) objects[0];
+        } else {
+            String cameraName = jsonObject.getJSONObject("cam").getString("uuid");
+            String userName = null;
+            if (!ObjectUtils.isEmpty(sceneUserId)) {
+                SSOUser user = userService.getSSOUserByUserId(sceneUserId);
+                userName = user.getUserName();
+            }
+            //重算的场景,先移除该场景对应的容量
+            scenePlusService.resetSpace(num);
+
+            JSONObject statusJson = new JSONObject();
+            //临时将-2改成1,app还没完全更新
+            statusJson.put("status", sceneStatus == -2 ? 1 : sceneStatus);
+            statusJson.put("webSite", webSite);
+            statusJson.put("sceneNum", num);
+            statusJson.put("thumb", thumb);
+            statusJson.put("payStatus", payStatus);
+            String statusJsonLocalPath = ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "status.json";
+            String statusJsonOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json";
+            FileUtils.writeFile(statusJsonLocalPath, statusJson.toString());
+            fYunFileService.uploadFile(bucket, statusJsonLocalPath, statusJsonOssPath);
+            String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
+
+            Long cameraType = (long)sceneScheme == 3 ? 12 : (long)sceneScheme;
+            //判断是否转台相机
+            if(sceneSource == 3){
+                cameraType = 13L;
+            }
+            if(sceneSource == 4){
+                cameraType = 14L;
+            }
+
+            if(sceneSource == 4){
+                fdkkLaserService.updateSceneStatus(num,0);
+                BuildSceneCallMessage buildSceneMqMessage =this.getBuildSceneMqMessage(
+                    num, cameraName, unicode, cameraType, fileId,
+                    dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
+                        .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH,"")+ File.separator,
+                    "zip.Zip", "0",
+                    userName, jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
+                    jsonObject.getInteger("resolution"), buildType,
+                    ConstantFilePath.BUILD_MODEL_LASER_PATH + unicode, sceneId, sceneName,
+                    webSite, createTime, sceneUserId, dataSource, sceneStatus, payStatus, thumb);
+                rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
+            }else{
+                BuildSceneCallMessage buildSceneMqMessage =this.getBuildSceneMqMessage(
+                    num, cameraName, unicode, cameraType, fileId,
+                    dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
+                        .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH,"")+ File.separator,
+                    "zip.Zip", "0",
+                    userName, jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
+                    jsonObject.getInteger("resolution"), buildType,
+                    ConstantFilePath.BUILD_MODEL_PATH + unicode, sceneId, sceneName,
+                    webSite, createTime, sceneUserId, dataSource, sceneStatus, payStatus, thumb);
+
+                rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
+            }
+
+
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+                .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
+                .eq(ScenePlus::getNum, num));
+
+        }
+        return ResultData.ok();
+    }
 }

+ 29 - 2
src/main/java/com/fdkankan/contro/service/impl/ScenePlusServiceImpl.java

@@ -1,20 +1,47 @@
 package com.fdkankan.contro.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.CameraConstant;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ConstantUrl;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneStatus;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.contro.entity.Camera;
+import com.fdkankan.contro.entity.CameraDetail;
+import com.fdkankan.contro.entity.SSOUser;
 import com.fdkankan.contro.entity.ScenePlus;
 import com.fdkankan.contro.entity.ScenePlusExt;
+import com.fdkankan.contro.entity.ScenePro;
 import com.fdkankan.contro.mapper.IScenePlusMapper;
 import com.fdkankan.contro.service.ICameraDetailService;
+import com.fdkankan.contro.service.ICameraService;
 import com.fdkankan.contro.service.IScenePlusExtService;
 import com.fdkankan.contro.service.IScenePlusService;
+import com.fdkankan.contro.service.ISceneProService;
+import com.fdkankan.contro.service.IUserService;
+import com.fdkankan.contro.vo.ScenePlusVO;
+import com.fdkankan.fyun.constant.FYunTypeEnum;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
 import com.fdkankan.web.response.ResultData;
+import java.io.File;
+import java.util.Date;
 import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Objects;
+import org.springframework.util.ObjectUtils;
 
 /**
  * <p>
@@ -30,7 +57,6 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
     @Autowired
     private IScenePlusExtService scenePlusExtService;
-
     @Autowired
     private ICameraDetailService cameraDetailService;
 
@@ -40,7 +66,7 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     }
 
     @Override
-    public ResultData resetSpace(String num) throws Exception{
+    public ResultData resetSpace(String num){
         ScenePlus scenePlus = this.getScenePlusByNum(num);
         ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
         if(Objects.isNull(scenePlus)){
@@ -83,4 +109,5 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         }
         return this.getById(scenePlusExt.getPlusId());
     }
+
 }

+ 27 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneProServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.mapper.ISceneProMapper;
+import com.fdkankan.contro.service.ISceneProService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * pro场景表 服务实现类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Slf4j
+@Service
+public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
+
+    @Override
+    public ScenePro getByNum(String num) {
+        return this.getOne(new LambdaQueryWrapper<ScenePro>().eq(ScenePro::getNum, num));
+    }
+}