Explorar o código

初始化代码

tianboguang %!s(int64=3) %!d(string=hai) anos
achega
70618ee768
Modificáronse 100 ficheiros con 6441 adicións e 0 borrados
  1. 162 0
      pom.xml
  2. 31 0
      src/main/java/com/fdkankan/contro/ModelingControlApplication.java
  3. 29 0
      src/main/java/com/fdkankan/contro/bean/PointBean.java
  4. 187 0
      src/main/java/com/fdkankan/contro/bean/SceneJsonBean.java
  5. 20 0
      src/main/java/com/fdkankan/contro/bean/SegmentBean.java
  6. 18 0
      src/main/java/com/fdkankan/contro/bean/VertexBean.java
  7. 26 0
      src/main/java/com/fdkankan/contro/bean/WallBean.java
  8. 108 0
      src/main/java/com/fdkankan/contro/config/FileRouteConfig.java
  9. 13 0
      src/main/java/com/fdkankan/contro/constant/DingTalkConst.java
  10. 149 0
      src/main/java/com/fdkankan/contro/controller/SceneFileController.java
  11. 67 0
      src/main/java/com/fdkankan/contro/dto/Camera.java
  12. 121 0
      src/main/java/com/fdkankan/contro/dto/CameraDetail.java
  13. 88 0
      src/main/java/com/fdkankan/contro/dto/UserIncrement.java
  14. 90 0
      src/main/java/com/fdkankan/contro/entity/CameraSpace.java
  15. 109 0
      src/main/java/com/fdkankan/contro/entity/Company.java
  16. 90 0
      src/main/java/com/fdkankan/contro/entity/Manager.java
  17. 89 0
      src/main/java/com/fdkankan/contro/entity/RequestUser.java
  18. 37 0
      src/main/java/com/fdkankan/contro/entity/SSOUser.java
  19. 162 0
      src/main/java/com/fdkankan/contro/entity/Scene.java
  20. 66 0
      src/main/java/com/fdkankan/contro/entity/Scene3dNum.java
  21. 66 0
      src/main/java/com/fdkankan/contro/entity/SceneCooperation.java
  22. 111 0
      src/main/java/com/fdkankan/contro/entity/SceneEditControls.java
  23. 183 0
      src/main/java/com/fdkankan/contro/entity/SceneEditInfo.java
  24. 90 0
      src/main/java/com/fdkankan/contro/entity/SceneEditInfoExt.java
  25. 168 0
      src/main/java/com/fdkankan/contro/entity/SceneExt.java
  26. 87 0
      src/main/java/com/fdkankan/contro/entity/SceneFileBuild.java
  27. 87 0
      src/main/java/com/fdkankan/contro/entity/SceneFileUpload.java
  28. 223 0
      src/main/java/com/fdkankan/contro/entity/ScenePO.java
  29. 114 0
      src/main/java/com/fdkankan/contro/entity/ScenePlus.java
  30. 153 0
      src/main/java/com/fdkankan/contro/entity/ScenePlusExt.java
  31. 138 0
      src/main/java/com/fdkankan/contro/entity/ScenePro.java
  32. 168 0
      src/main/java/com/fdkankan/contro/entity/SceneProEdit.java
  33. 168 0
      src/main/java/com/fdkankan/contro/entity/SceneProEditExt.java
  34. 153 0
      src/main/java/com/fdkankan/contro/entity/SceneProExt.java
  35. 185 0
      src/main/java/com/fdkankan/contro/entity/SceneProPO.java
  36. 60 0
      src/main/java/com/fdkankan/contro/entity/SceneResourceCamera.java
  37. 60 0
      src/main/java/com/fdkankan/contro/entity/SceneResourceCooperation.java
  38. 140 0
      src/main/java/com/fdkankan/contro/entity/User.java
  39. 50 0
      src/main/java/com/fdkankan/contro/enums/CameraTypeEnum.java
  40. 111 0
      src/main/java/com/fdkankan/contro/listener/RabbitMqListener.java
  41. 17 0
      src/main/java/com/fdkankan/contro/mapper/ICameraDetailMapper.java
  42. 18 0
      src/main/java/com/fdkankan/contro/mapper/ICameraMapper.java
  43. 30 0
      src/main/java/com/fdkankan/contro/mapper/ICameraSpaceMapper.java
  44. 18 0
      src/main/java/com/fdkankan/contro/mapper/ICompanyMapper.java
  45. 18 0
      src/main/java/com/fdkankan/contro/mapper/IManagerMapper.java
  46. 25 0
      src/main/java/com/fdkankan/contro/mapper/IScene3dNumMapper.java
  47. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneCooperationMapper.java
  48. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneEditControlsMapper.java
  49. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneEditInfoExtMapper.java
  50. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneEditInfoMapper.java
  51. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneExtMapper.java
  52. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneFileBuildMapper.java
  53. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneFileUploadMapper.java
  54. 17 0
      src/main/java/com/fdkankan/contro/mapper/ISceneMapper.java
  55. 18 0
      src/main/java/com/fdkankan/contro/mapper/IScenePlusExtMapper.java
  56. 18 0
      src/main/java/com/fdkankan/contro/mapper/IScenePlusMapper.java
  57. 23 0
      src/main/java/com/fdkankan/contro/mapper/ISceneProEditExtMapper.java
  58. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneProEditMapper.java
  59. 19 0
      src/main/java/com/fdkankan/contro/mapper/ISceneProExtMapper.java
  60. 27 0
      src/main/java/com/fdkankan/contro/mapper/ISceneProMapper.java
  61. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneResourceCameraMapper.java
  62. 18 0
      src/main/java/com/fdkankan/contro/mapper/ISceneResourceCooperationMapper.java
  63. 24 0
      src/main/java/com/fdkankan/contro/mapper/IUserIncrementMapper.java
  64. 24 0
      src/main/java/com/fdkankan/contro/mapper/IUserMapper.java
  65. 75 0
      src/main/java/com/fdkankan/contro/schedule/ScheduleJob.java
  66. 15 0
      src/main/java/com/fdkankan/contro/service/IBuildSceneDTService.java
  67. 17 0
      src/main/java/com/fdkankan/contro/service/IBuildScenePostService.java
  68. 18 0
      src/main/java/com/fdkankan/contro/service/IBuildScenePreService.java
  69. 22 0
      src/main/java/com/fdkankan/contro/service/ICameraDetailService.java
  70. 19 0
      src/main/java/com/fdkankan/contro/service/ICameraService.java
  71. 20 0
      src/main/java/com/fdkankan/contro/service/ICameraSpaceService.java
  72. 16 0
      src/main/java/com/fdkankan/contro/service/ICompanyService.java
  73. 17 0
      src/main/java/com/fdkankan/contro/service/IManagerService.java
  74. 37 0
      src/main/java/com/fdkankan/contro/service/IScene3dNumService.java
  75. 16 0
      src/main/java/com/fdkankan/contro/service/ISceneCooperationService.java
  76. 18 0
      src/main/java/com/fdkankan/contro/service/ISceneEditControlsService.java
  77. 19 0
      src/main/java/com/fdkankan/contro/service/ISceneEditInfoExtService.java
  78. 21 0
      src/main/java/com/fdkankan/contro/service/ISceneEditInfoService.java
  79. 16 0
      src/main/java/com/fdkankan/contro/service/ISceneExtService.java
  80. 40 0
      src/main/java/com/fdkankan/contro/service/ISceneFileBuildService.java
  81. 19 0
      src/main/java/com/fdkankan/contro/service/ISceneFileUploadService.java
  82. 18 0
      src/main/java/com/fdkankan/contro/service/IScenePlusExtService.java
  83. 20 0
      src/main/java/com/fdkankan/contro/service/IScenePlusService.java
  84. 18 0
      src/main/java/com/fdkankan/contro/service/ISceneProEditExtService.java
  85. 18 0
      src/main/java/com/fdkankan/contro/service/ISceneProEditService.java
  86. 17 0
      src/main/java/com/fdkankan/contro/service/ISceneProExtService.java
  87. 29 0
      src/main/java/com/fdkankan/contro/service/ISceneProService.java
  88. 19 0
      src/main/java/com/fdkankan/contro/service/ISceneResourceCameraService.java
  89. 17 0
      src/main/java/com/fdkankan/contro/service/ISceneResourceCooperationService.java
  90. 20 0
      src/main/java/com/fdkankan/contro/service/ISceneService.java
  91. 22 0
      src/main/java/com/fdkankan/contro/service/IUserIncrementService.java
  92. 21 0
      src/main/java/com/fdkankan/contro/service/IUserService.java
  93. 57 0
      src/main/java/com/fdkankan/contro/service/impl/BuildSceneDTServiceImpl.java
  94. 794 0
      src/main/java/com/fdkankan/contro/service/impl/BuildScenePostServiceImpl.java
  95. 154 0
      src/main/java/com/fdkankan/contro/service/impl/BuildScenePreServiceImpl.java
  96. 56 0
      src/main/java/com/fdkankan/contro/service/impl/CameraDetailServiceImpl.java
  97. 50 0
      src/main/java/com/fdkankan/contro/service/impl/CameraServiceImpl.java
  98. 32 0
      src/main/java/com/fdkankan/contro/service/impl/CameraSpaceServiceImpl.java
  99. 21 0
      src/main/java/com/fdkankan/contro/service/impl/CompanyServiceImpl.java
  100. 0 0
      src/main/java/com/fdkankan/contro/service/impl/ManagerServiceImpl.java

+ 162 - 0
pom.xml

@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>2.3.12.RELEASE</version>
+    <relativePath/>
+  </parent>
+
+  <artifactId>4dkankan-center-modeling-control</artifactId>
+
+
+  <dependencies>
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-common-utils</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.protobuf</groupId>
+          <artifactId>protobuf-java</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.aliyun</groupId>
+          <artifactId>aliyun-java-sdk-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.aliyun</groupId>
+          <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.zxing</groupId>
+          <artifactId>core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.zxing</groupId>
+          <artifactId>javase</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.auth0</groupId>
+          <artifactId>java-jwt</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.bytedeco.javacpp-presets</groupId>
+          <artifactId>ffmpeg-platform</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>io.jsonwebtoken</groupId>
+          <artifactId>jjwt</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.10.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-db</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.yaml</groupId>
+      <artifactId>snakeyaml</artifactId>
+      <version>${snakeyaml.version}</version>
+    </dependency>
+    <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-dingtalk</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-app-push</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-redis</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-fyun</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-rubber-sheeting</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
+    <dependency>
+      <groupId>com.alibaba.cloud</groupId>
+      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+      <version>2.2.7.RELEASE</version>
+    </dependency>
+
+
+    <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
+    <dependency>
+      <groupId>com.alibaba.cloud</groupId>
+      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+      <version>2.2.7.RELEASE</version>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.springframework.cloud</groupId>
+      <artifactId>spring-cloud-dependencies</artifactId>
+      <version>Hoxton.SR8</version>
+      <type>pom</type>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+        <version>2.3.12.RELEASE</version>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <testFailureIgnore>true</testFailureIgnore>
+        </configuration>
+      </plugin>
+    </plugins>
+
+  </build>
+
+
+</project>

+ 31 - 0
src/main/java/com/fdkankan/contro/ModelingControlApplication.java

@@ -0,0 +1,31 @@
+package com.fdkankan.contro;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/22
+ **/
+@SpringBootApplication
+@EnableScheduling
+@ComponentScan(basePackages = {"com.fdkankan.*"})
+@EnableAsync
+@MapperScan("com.fdkankan.**.mapper")
+@EnableDiscoveryClient
+public class ModelingControlApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(ModelingControlApplication.class, args);
+    }
+}
+
+

+ 29 - 0
src/main/java/com/fdkankan/contro/bean/PointBean.java

@@ -0,0 +1,29 @@
+package com.fdkankan.contro.bean;
+
+import java.io.Serializable;
+import java.util.Map;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/8
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class PointBean implements Serializable {
+    private String vectorId;
+    private float x;
+    private float y;
+    private Map<String, String> parent;
+}

+ 187 - 0
src/main/java/com/fdkankan/contro/bean/SceneJsonBean.java

@@ -0,0 +1,187 @@
+package com.fdkankan.contro.bean;
+
+import com.fdkankan.contro.vo.SceneEditControlsVO;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * <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 SceneEditControlsVO 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;
+
+    /**
+     * 空间视频数据
+     */
+    private String boxVideos;
+
+    /**
+     * 空间贴图数据
+     */
+    private String boxPhotos;
+
+    /**
+     *点位视频
+     */
+    private String videos;
+
+    /**
+     * 是否有热点数据
+     */
+    private Integer tags;
+
+    /**
+     * 加载logo名
+     */
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    private String loadingLogoFile;
+
+    private Integer payStatus;
+
+    /**
+     * 户型角度
+     */
+    private Float floorPlanAngle;
+
+    /**
+     * 指南针角度
+     */
+    private Float floorPlanCompass;
+
+    /**
+     * 是否保存导览
+     */
+    private Integer tours;
+
+    /**
+     * 是否有场景关联(0-否,1-是)
+     */
+    private Integer links;
+
+
+}

+ 20 - 0
src/main/java/com/fdkankan/contro/bean/SegmentBean.java

@@ -0,0 +1,20 @@
+package com.fdkankan.contro.bean;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/8
+ **/
+@Data
+public class SegmentBean {
+    private int id;
+    private int a;
+    private int b;
+    private String startPointId;
+    private String endPointId;
+}

+ 18 - 0
src/main/java/com/fdkankan/contro/bean/VertexBean.java

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.bean;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/8
+ **/
+@Data
+public class VertexBean {
+    private int id;
+    private float x;
+    private float y;
+}

+ 26 - 0
src/main/java/com/fdkankan/contro/bean/WallBean.java

@@ -0,0 +1,26 @@
+package com.fdkankan.contro.bean;
+
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/8
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class WallBean implements Serializable {
+    private String vectorId;
+    private String start;
+    private String end;
+    private String[] children;
+    private Double width;
+}

+ 108 - 0
src/main/java/com/fdkankan/contro/config/FileRouteConfig.java

@@ -0,0 +1,108 @@
+package com.fdkankan.contro.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@ConfigurationProperties(prefix = "file.route")
+public class FileRouteConfig {
+    /**
+     * 路径
+     */
+    //保存硬盘地址
+    private String hardDisk;
+	//保存硬盘地址(激光相机)
+	private String hardDiskLaser;
+    //默认图片类型文件夹
+    private String imageFolder;
+    //默认文件类型文件夹
+    private String documentFolder;
+    //默认的视频类型文件夹
+    private String videoFolder;
+    //默认的音频类型文件夹
+    private String musicFolder;
+    //允许上传的ip(上传白名单)
+    private String[] IPs;
+    /**
+     * 类型
+     */
+    //图片类型
+    private String[] imageType;
+    //文件类型
+    private String[] documentType;
+    //视频类型
+    private String[] videoType;
+    //音频类型
+    private String[] musicType;
+	public String getHardDisk() {
+		return hardDisk;
+	}
+	public String getHardDiskLaser() {
+		return hardDiskLaser;
+	}
+	public String getImageFolder() {
+		return imageFolder;
+	}
+	public String getDocumentFolder() {
+		return documentFolder;
+	}
+	public String getVideoFolder() {
+		return videoFolder;
+	}
+	public String getMusicFolder() {
+		return musicFolder;
+	}
+	public String[] getIPs() {
+		return IPs;
+	}
+	public String[] getImageType() {
+		return imageType;
+	}
+	public String[] getDocumentType() {
+		return documentType;
+	}
+	public String[] getVideoType() {
+		return videoType;
+	}
+	public String[] getMusicType() {
+		return musicType;
+	}
+	public void setHardDisk(String hardDisk) {
+
+		this.hardDisk = hardDisk;
+	}
+	public void setHardDiskLaser(String hardDiskLaser) {
+
+		this.hardDiskLaser = hardDiskLaser;
+	}
+	public void setImageFolder(String imageFolder) {
+		this.imageFolder = imageFolder;
+	}
+	public void setDocumentFolder(String documentFolder) {
+		this.documentFolder = documentFolder;
+	}
+	public void setVideoFolder(String videoFolder) {
+		this.videoFolder = videoFolder;
+	}
+	public void setMusicFolder(String musicFolder) {
+		this.musicFolder = musicFolder;
+	}
+	public void setIPs(String[] iPs) {
+		IPs = iPs;
+	}
+	public void setImageType(String[] imageType) {
+		this.imageType = imageType;
+	}
+	public void setDocumentType(String[] documentType) {
+		this.documentType = documentType;
+	}
+	public void setVideoType(String[] videoType) {
+		this.videoType = videoType;
+	}
+	public void setMusicType(String[] musicType) {
+		this.musicType = musicType;
+	}
+    
+    
+}

+ 13 - 0
src/main/java/com/fdkankan/contro/constant/DingTalkConst.java

@@ -0,0 +1,13 @@
+package com.fdkankan.contro.constant;
+
+public class DingTalkConst {
+
+    public static final String DINGTALK_MSG_PATTERN = "**环境**: %s\n\n" +
+            "**服务器名称**: %s\n\n" +
+            "**失败原因**: %s\n\n" +
+            "**num**: %s\n\n" +
+            "**server-path**: %s\n\n";
+
+
+    public static final String contentExt = "**algorithm-log**: [https://4dkk.4dage.com/build_log/%s/console.log](https://4dkk.4dage.com/build_log/%s/console.log)";
+}

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

@@ -0,0 +1,149 @@
+package com.fdkankan.contro.controller;
+
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.contro.service.ISceneFileBuildService;
+import com.fdkankan.contro.vo.ResponseSceneFile;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 场景文件上传模块
+ */
+@Log4j2
+@RestController
+@RequestMapping("/service/scene/file")
+public class SceneFileController{
+
+    @Autowired
+    private ISceneFileBuildService sceneFileBuildService;
+
+    /**
+     * 场景文件上传之前先获取fileId
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("preUpload")
+    public ResponseSceneFile preUpload(String params) throws Exception {
+        return sceneFileBuildService.preUpload(params);
+    }
+
+
+
+    /**
+     * 获取文件上传的状态
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("getProgress")
+    public ResponseSceneFile getProgress(String params) throws Exception {
+        return sceneFileBuildService.getProgress(params);
+    }
+
+    /**
+     * 单个文件上传
+     * @param file
+     * @param params
+     * @return
+     */
+    @PostMapping("upload")
+    public ResultData upload(@RequestParam(value = "file",required = false) MultipartFile file,
+                             String params) throws Exception {
+        return sceneFileBuildService.uploadFile(file, params);
+    }
+
+    /**
+     * 上传大文件
+     * @param file
+     * @return
+     * @throws
+     */
+    @PostMapping("uploadBigFile")
+    public ResultData uploadBigFile(@RequestParam(value = "file",required = false) MultipartFile file,
+                                String params) throws Exception {
+        return sceneFileBuildService.uploadFile(file, params);
+    }
+
+    /**
+     * 更新fileid文件的上传状态  -- 作废
+     *
+     * @param params
+     * @return
+     */
+    @PostMapping("uploadSuccess")
+    public ResultData uploadSuccess(String params) throws Exception {
+        return sceneFileBuildService.uploadSuccess(params);
+    }
+
+    /**
+     * 更新fileid文件的上传状态  - 后端八目上传逻辑
+     *
+     * @param params
+     * @return
+     */
+    @PostMapping("uploadSuccessBuild")
+    public ResultData uploadSuccessBuild(String params) throws Exception {
+        return sceneFileBuildService.uploadSuccessBuild(params);
+    }
+
+    /**
+     *
+     *
+     * @param params
+     * @return
+     */
+    @PostMapping("turntableUploadSuccess")
+    public ResultData turntableUploadSuccess(String params) throws Exception {
+        return sceneFileBuildService.turntableUploadSuccess(params);
+    }
+
+    /**
+     * 获取亚马逊S3文件上传url
+     *
+     * @return
+     */
+    @PostMapping("getS3UploadUrl")
+    public ResultData getS3UploadUrl(String params) throws Exception {
+        return sceneFileBuildService.getS3UploadUrl(params);
+    }
+
+    /**
+     * 计算双目场景 - 新双目相机上传 小红屋
+     *
+     * @return
+     */
+//    @ApiOperation("计算双目场景 - 新双目相机上传 小红屋")
+    @PostMapping("buildLiteScene")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "prefix", value = "文件下载前缀,结尾不加/", dataType = "String"),
+//            @ApiImplicitParam(name = "dataFdage", value = "dataFdage", dataType = "String"),
+//            @ApiImplicitParam(name = "zipName", value = "zip文件包名称", dataType = "String"),
+//            @ApiImplicitParam(name = "password", value = "密码", dataType = "String"),
+//            @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String")})
+    public ResultData buildLiteScene(String prefix, String dataFdage, String zipName, String userName, String password, String oldNum) throws Exception{
+        return sceneFileBuildService.buildLiteScene(prefix, dataFdage, zipName, userName, password, oldNum);
+
+
+    }
+
+    /**
+     * 获取亚马逊S3文件上传url
+     * @return
+     */
+    @PostMapping("buildScene")
+//    @ApiOperation("获取亚马逊S3文件上传url")
+//    @ApiImplicitParams({
+//        @ApiImplicitParam(name = "unicode", value = "unicode文件夹", dataType = "String"),
+//            @ApiImplicitParam(name = "zip", value = "zip包的名称", dataType = "String"),
+//            @ApiImplicitParam(name = "dataFdage", value = "dataFdage名称", dataType = "String")})
+    public ResultData buildScene(String prefix, String unicode, String zip, String dataFdage) throws Exception{
+        return sceneFileBuildService.buildScene(prefix, unicode, zip, dataFdage);
+    }
+
+}

+ 67 - 0
src/main/java/com/fdkankan/contro/dto/Camera.java

@@ -0,0 +1,67 @@
+package com.fdkankan.contro.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class Camera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 相机的Mac地址
+     */
+    private String childName;
+
+    /**
+     * 激活时间
+     */
+    private Date activatedTime;
+
+    /**
+     * 相机密码
+     */
+    private String childPassword;
+
+    /**
+     * sn码
+     */
+    private String snCode;
+
+    /**
+     * wifi名称
+     */
+    private String wifiName;
+
+    /**
+     * wifi密码
+     */
+    private String wifiPassword;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    private String recStatus;
+
+    /**
+     * 0正常,1删除
+     */
+    private Integer tbStatus;
+
+
+}
+

+ 121 - 0
src/main/java/com/fdkankan/contro/dto/CameraDetail.java

@@ -0,0 +1,121 @@
+package com.fdkankan.contro.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 相机子表
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+public class CameraDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 余额
+     */
+    private String balance;
+
+    /**
+     * 用户表t_user的id
+     */
+    private Long userId;
+
+    /**
+     * 0表示客户,1表示员工,2表示赠送,3表示其他,4经销商销售
+     */
+    private Integer own;
+
+    /**
+     * 订单号
+     */
+    private String orderSn;
+
+    /**
+     * 0表示本国,1表示国外
+     */
+    private Integer country;
+
+    /**
+     * 经销商
+     */
+    private String agency;
+
+    /**
+     * 相机类型,0表示双目,1四维看看pro,2 四维看看lite,9 双目转台,10 激光转台
+     */
+    private Integer cameraType;
+
+    /**
+     * 总容量
+     */
+    private Long totalSpace;
+
+    /**
+     * 已使用容量
+     */
+    private Long usedSpace;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    private Long cameraId;
+
+    /**
+     * 商品表t_goods的id
+     */
+    private Long goodsId;
+
+    /**
+     * 企业表t_company的id
+     */
+    private Long companyId;
+
+    /**
+     * 代理商架构管理t_agent_framework的id
+     */
+    private Long agentFrameworkId;
+
+    /**
+     * 相机协作用户id
+     */
+    private Long cooperationUser;
+
+    /**
+     * 设备地址(追溯管理后台)
+     */
+    private String address;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    private String recStatus;
+
+    /**
+     * 0正常,1删除
+     */
+    private Integer tbStatus;
+
+
+}

+ 88 - 0
src/main/java/com/fdkankan/contro/dto/UserIncrement.java

@@ -0,0 +1,88 @@
+package com.fdkankan.contro.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户增值权益表
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+public class UserIncrement implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 权益包标识
+     */
+    private String keyWord;
+
+    /**
+     * 用户表t_user的id
+     */
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    private Long cameraId;
+
+    /**
+     * 会员权益类型Id
+     */
+    private Integer incrementTypeId;
+
+    /**
+     * 结束时间
+     */
+    private Date incrementEndTime;
+
+    /**
+     * 是否过期(1过期,0未过期)
+     */
+    private Integer isExpired;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 扩容订单集合
+     */
+    private String orderSn;
+
+    /**
+     * 生效时间
+     */
+    private Date incrementStartTime;
+
+    private Integer downloadNum;
+
+    /**
+     * 0正常,1删除
+     */
+    private Integer tbStatus;
+
+
+}

+ 90 - 0
src/main/java/com/fdkankan/contro/entity/CameraSpace.java

@@ -0,0 +1,90 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 相机容量表
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+@TableName("t_camera_space")
+public class CameraSpace implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 容量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 容量类型,0表示基础容量,1表示期限容量,2表示扩容容量
+     */
+    @TableField("space_type")
+    private Integer spaceType;
+
+    /**
+     * 生效时间
+     */
+    @TableField("space_start_time")
+    private Date spaceStartTime;
+
+    /**
+     * 结束时间
+     */
+    @TableField("space_end_time")
+    private Date spaceEndTime;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 扩容订单集合
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 0正常,1删除
+     */
+   @TableField("tb_status")
+@TableLogic(value="0",delval = "1")
+    private Integer tbStatus;
+
+
+}

+ 109 - 0
src/main/java/com/fdkankan/contro/entity/Company.java

@@ -0,0 +1,109 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 客户企业logo信息
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+@ToString
+@TableName("t_company")
+public class Company implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 公司名称
+     */
+    @TableField("company_name")
+    private String companyName;
+
+    /**
+     * 顶部logo
+     */
+    @TableField("top_logo")
+    private String topLogo;
+
+    /**
+     * 地面logo
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 地面点位logo
+     */
+    @TableField("marker_logo")
+    private String markerLogo;
+
+    /**
+     * 二维码logo
+     */
+    @TableField("qr_logo")
+    private String qrLogo;
+
+    /**
+     * 是否显示初始logo,0隐藏,1显示
+     */
+    @TableField("show_logo")
+    private Integer showLogo;
+
+    /**
+     * t_manager表的id
+     */
+    @TableField("manager_id")
+    private Long managerId;
+
+    /**
+     * 新增的相机是否注册,0否,1删
+     */
+    @TableField("camera_delete")
+    private Integer cameraDelete;
+
+    /**
+     * 数据同步类型
+     */
+    @TableField("data_sync")
+    private String dataSync;
+
+    /**
+     * 数据同步方式
+     */
+    @TableField("data_sync_action")
+    private Integer dataSyncAction;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0正常,1删除
+     */
+    @TableField("tb_status")
+    @TableLogic(value="0",delval = "1")
+    private Integer tbStatus;
+
+}

+ 90 - 0
src/main/java/com/fdkankan/contro/entity/Manager.java

@@ -0,0 +1,90 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 管理员表
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@RequiredArgsConstructor
+@TableName("t_manager")
+public class Manager implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户昵称
+     */
+    @TableField("nickname")
+    private String nickname;
+
+    /**
+     * 用户名
+     */
+    @NonNull
+    @TableField("username")
+    private String username;
+
+    /**
+     * 密码
+     */
+    @NonNull
+    @TableField("password")
+    private String password;
+
+    /**
+     * 是否企业用户(0否,1是)
+     */
+    @TableField("is_company")
+    private Integer isCompany;
+
+    /**
+     * 代理商架构管理t_agent_framework的id
+     */
+    @TableField("agent_framework_id")
+    private Long agentFrameworkId;
+
+    /**
+     * 管理后台角色t_manager_role表的id
+     */
+    @TableField("manager_role_id")
+    private Long managerRoleId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0正常,1删除
+     */
+   @TableField("tb_status")
+@TableLogic(value="0",delval = "1")
+    private Integer tbStatus;
+
+
+}

+ 89 - 0
src/main/java/com/fdkankan/contro/entity/RequestUser.java

@@ -0,0 +1,89 @@
+package com.fdkankan.contro.entity;
+
+import com.fdkankan.common.request.RequestBase;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+//用户对象 参数
+public class RequestUser extends RequestBase implements Serializable {
+    private static final long serialVersionUID = 4835988280504608525L;
+
+    private Long userId;
+
+    private int status;
+
+    private String password;
+
+    private String confirmPwd;
+
+    private String randomcode;
+
+    private String phoneNum;
+
+    private String msgAuthCode;
+
+    private String imgdata;
+
+    private String areaNum;
+
+    private String nickName;
+
+    private String country;
+
+    private boolean rememberMe = false;
+    //扫码登录凭证
+    private String uuid;
+
+    private String appUserName;
+
+    private String appPassword;
+
+    private String province;
+
+    private String city;
+    //收货地址
+    private String shipAddress;
+    //收货地址
+    private String shipAreaPath;
+    //收货人手机号
+    private String shipMobile;
+    //收货姓名
+    private String shipName;
+
+    private String email;
+
+    private String startDate;
+
+    private String endDate;
+
+    private String searchKey;
+
+    private String sceneNum;
+
+    private String unicode;
+
+    private String head;
+
+    private Integer cameraType;
+
+    private Long cameraId;
+
+    private Integer isNotice;
+
+    private Long id;
+
+    private Integer setDefault;
+
+    private String orderBy;
+
+    private Integer sceneType;
+
+    private String sceneName;
+
+    private String downloadUrl;
+
+    private Boolean isTiles;
+
+}

+ 37 - 0
src/main/java/com/fdkankan/contro/entity/SSOUser.java

@@ -0,0 +1,37 @@
+package com.fdkankan.contro.entity;
+
+import java.io.Serializable;
+import java.util.Set;
+import lombok.Data;
+
+/**
+ * sso user
+ *
+ *  2018-04-02 19:59:49
+ */
+@Data
+public class SSOUser implements Serializable {
+
+    private static final long serialVersionUID = -2560069033053679931L;
+
+    private Long id;
+
+    private String userName;
+
+    private String password;
+
+    private String email;
+
+    private Set<String> permissionSet;
+
+    private Set<String> roleSet;
+
+    /**
+     * 是否相机登录,0-否,1-是
+     */
+    private Integer cameraLogin;
+
+    private Long cameraId;
+
+
+}

+ 162 - 0
src/main/java/com/fdkankan/contro/entity/Scene.java

@@ -0,0 +1,162 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene")
+public class Scene 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;
+
+    /**
+     * 0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示
+     */
+    @TableField("scene_status")
+    private Integer sceneStatus;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 大场景序号
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 大场景的密钥
+     */
+    @TableField("scene_key")
+    private String sceneKey;
+
+    /**
+     * 0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 表示缩略图是否存在
+     */
+    @TableField("thumb_status")
+    private Integer thumbStatus;
+
+    /**
+     * 0表示默认,1表示自己上传
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 标记大小
+     */
+    @TableField("floor_logo_size")
+    private Integer floorLogoSize;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 66 - 0
src/main/java/com/fdkankan/contro/entity/Scene3dNum.java

@@ -0,0 +1,66 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 八目场景编码表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_3d_num")
+public class Scene3dNum implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否已使用,0-未使用,1-已使用
+     */
+    @TableField("used")
+    private Integer used;
+
+    /**
+     * 文件夹名称
+     */
+    @TableField("folder_name")
+    private String folderName;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 66 - 0
src/main/java/com/fdkankan/contro/entity/SceneCooperation.java

@@ -0,0 +1,66 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_cooperation")
+public class SceneCooperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 协作的用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 协作用户名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 111 - 0
src/main/java/com/fdkankan/contro/entity/SceneEditControls.java

@@ -0,0 +1,111 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_edit_controls")
+public class SceneEditControls implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * t_scene_edit_info表id
+     */
+    @TableField("edit_info_id")
+    private Long editInfoId;
+
+    /**
+     * 是否展示小地图(0-不展示,1-展示)
+     */
+    @TableField("show_map")
+    private Integer showMap;
+
+    /**
+     * 是否需要密码(0-不需要,1-需要)
+     */
+    @TableField("show_lock")
+    private Integer showLock;
+
+    /**
+     * 是否展示标题(0-不需要,1-需要)
+     */
+    @TableField("show_title")
+    private Integer showTitle;
+
+    /**
+     * 是否展示漫游按钮(0-不需要,1-需要)
+     */
+    @TableField("show_panorama")
+    private Integer showPanorama;
+
+    /**
+     * 是否展示3D按钮(0-不需要,1-需要)
+     */
+    @TableField("show_dollhouse")
+    private Integer showDollhouse;
+
+    /**
+     * 是否展示2D按钮(0-不需要,1-需要)
+     */
+    @TableField("show_floorplan")
+    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")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除, 2-禁用
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 183 - 0
src/main/java/com/fdkankan/contro/entity/SceneEditInfo.java

@@ -0,0 +1,183 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_edit_info")
+public class SceneEditInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("scene_pro_id")
+    private Long sceneProId;
+
+    @TableField("scene_plus_id")
+    private Long scenePlusId;
+
+    /**
+     * 地面logo名称
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 地面logo大小
+     */
+    @TableField("floor_logo_size")
+    private Integer floorLogoSize;
+
+    /**
+     * 地面logo文件名称
+     */
+    @TableField("floor_logo_file")
+    private String floorLogoFile;
+
+    /**
+     * 背景音乐名称
+     */
+    @TableField("music")
+    private String music;
+
+    /**
+     * 背景音乐文件名称
+     */
+    @TableField("music_file")
+    private String musicFile;
+
+    /**
+     * 浏览密码
+     */
+    @TableField("scene_password")
+    private String scenePassword;
+
+    /**
+     * 场景标题
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 用户是否上传户型图
+     */
+    @TableField("floor_plan_user")
+    private Byte floorPlanUser;
+
+//    /**
+//     *
+//     */
+//    @TableField("cad_info")
+//    private String cadInfo;
+
+    /**
+     * 是否有热点数据(0-否,1-是)
+     */
+    @TableField("tags")
+    private Byte tags;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 是否上传模型
+     */
+    @TableField("is_upload_obj")
+    private Byte isUploadObj;
+
+    /**
+     * 重新建模的版本
+     */
+    @TableField("floor_edit_ver")
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    @TableField("floor_publish_ver")
+    private Integer floorPublishVer;
+
+    /**
+     * 空间视频数据
+     */
+    @TableField("box_videos")
+    private String boxVideos;
+
+    /**
+     * 空间贴图数据
+     */
+    @TableField("box_photos")
+    private String boxPhotos;
+
+    /**
+     * 是否需要处理球幕视频
+     */
+    @TableField("build_video_status")
+    private Byte buildVideoStatus;
+
+    /**
+     * 初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 加载logo名
+     */
+    @TableField("loading_logo")
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    @TableField("loading_logo_file")
+    private String loadingLogoFile;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除, 2-禁用
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 90 - 0
src/main/java/com/fdkankan/contro/entity/SceneEditInfoExt.java

@@ -0,0 +1,90 @@
+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 com.fdkankan.db.base.BaseEntity;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-07
+ */
+@Getter
+@Setter
+@TableName("t_scene_edit_info_ext")
+public class SceneEditInfoExt {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("scene_pro_id")
+    private Long sceneProId;
+
+    @TableField("scene_plus_id")
+    private Long scenePlusId;
+
+    @TableField("edit_info_id")
+    private Long editInfoId;
+
+    @TableField("floor_plan_angle")
+    private Float floorPlanAngle;
+
+    @TableField("floor_plan_compass")
+    private Float floorPlanCompass;
+
+    /**
+     * 大场景序号(随心装场景码)  原pro_edit表中的字段
+     */
+    @TableField("vr_num")
+    private String vrNum;
+
+    /**
+     * 是否有保存导览(0-否,1-是)
+     */
+    @TableField("tours")
+    private Integer tours;
+
+    /**
+     * mosaics数据
+     */
+    @TableField("mosaics")
+    private String mosaics;
+
+    /**
+     * 是否有场景关联(0-否,1-是)
+     */
+    @TableField("links")
+    private Integer links;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 168 - 0
src/main/java/com/fdkankan/contro/entity/SceneExt.java

@@ -0,0 +1,168 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_ext")
+public class SceneExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 外键id
+     */
+    @TableField("scene_id")
+    private Long sceneId;
+
+    /**
+     * 要上传的热点的id集合,用逗号隔开
+     */
+    @TableField("hots_ids")
+    private String hotsIds;
+
+    /**
+     * 表示初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 拍摄数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 风格
+     */
+    @TableField("style")
+    private Integer style;
+
+    /**
+     * 要gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 方案:1是双目,2是转台,3是六目,4是八目
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 背景音乐名称
+     */
+    @TableField("bg_music")
+    private String bgMusic;
+
+    /**
+     * 普通录屏文件地址
+     */
+    @TableField("screencap_voice_src")
+    private String screencapVoiceSrc;
+
+    /**
+     * 旧版录屏数据地址
+     */
+    @TableField("screencap_music")
+    private String screencapMusic;
+
+    /**
+     * 录屏文件个数
+     */
+    @TableField("screencap_len")
+    private Integer screencapLen;
+
+    /**
+     * 录音文件地址
+     */
+    @TableField("screencap_voice_sound")
+    private String screencapVoiceSound;
+
+    /**
+     * 选择的类型,sound为screencapVoiceSound,file为screencapVoiceSrc
+     */
+    @TableField("screencap_voice_type")
+    private String screencapVoiceType;
+
+    /**
+     * 录屏文件地址
+     */
+    @TableField("play_data")
+    private String playData;
+
+    /**
+     * 算法类型
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * oss服务商
+     */
+    @TableField("oss")
+    private String oss;
+
+    /**
+     * 重新建模的版本
+     */
+    @TableField("floor_edit_ver")
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    @TableField("floor_publish_ver")
+    private Integer floorPublishVer;
+
+    /**
+     * 使用容量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 录屏图片存放文件
+     */
+    @TableField("screencap_thumb")
+    private String screencapThumb;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 87 - 0
src/main/java/com/fdkankan/contro/entity/SceneFileBuild.java

@@ -0,0 +1,87 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景文件建模表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_file_build")
+public class SceneFileBuild implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 相机的Mac地址
+     */
+    @TableField("child_name")
+    private String childName;
+
+    /**
+     * 文件id
+     */
+    @TableField("file_id")
+    private String fileId;
+
+    /**
+     * unicode
+     */
+    @TableField("unicode")
+    private String unicode;
+
+    /**
+     * 上传状态,0-上传中,1-上传成功,-1-上传失败
+     */
+    @TableField("upload_status")
+    private Integer uploadStatus;
+
+    /**
+     * 建模状态,0-未建模,1-请求建模,2-等待建模(队列中),3-建模成功,-1-建模失败
+     */
+    @TableField("build_status")
+    private Integer buildStatus;
+
+    /**
+     * 照片总张数
+     */
+    @TableField("total_pic_num")
+    private Integer totalPicNum;
+
+    @TableField("chunks")
+    private Integer chunks;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 87 - 0
src/main/java/com/fdkankan/contro/entity/SceneFileUpload.java

@@ -0,0 +1,87 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景文件上传表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_file_upload")
+public class SceneFileUpload implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "Id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 文件id
+     */
+    @TableField("file_id")
+    private String fileId;
+
+    /**
+     * 文件原名称
+     */
+    @TableField("file_source_name")
+    private String fileSourceName;
+
+    /**
+     * 文件存放路径
+     */
+    @TableField("file_path")
+    private String filePath;
+
+    /**
+     * 状态,0-上传中,1-上传成功,-1-上传失败
+     */
+    @TableField("upload_status")
+    private Integer uploadStatus;
+
+    /**
+     * 文件大小
+     */
+    @TableField("size")
+    private Integer size;
+
+    /**
+     * 文件MD5值
+     */
+    @TableField("md5")
+    private String md5;
+
+    @TableField("chunk")
+    private Integer chunk;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 223 - 0
src/main/java/com/fdkankan/contro/entity/ScenePO.java

@@ -0,0 +1,223 @@
+package com.fdkankan.contro.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePO {
+
+    private Long id;
+
+    /**
+     * 场景名称
+     */
+    private String sceneName;
+
+    /**
+     * 场景描述
+     */
+    private String sceneDec;
+
+    /**
+     * 场景的链接地址
+     */
+    private String webSite;
+
+    /**
+     * 场景缩略图
+     */
+    private String thumb;
+
+    /**
+     * 0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示
+     */
+    private Integer sceneStatus;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    private String dataSource;
+
+    /**
+     * 用户表t_user的id
+     */
+    private Long userId;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费
+     */
+    private Integer payStatus;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    private String phoneId;
+
+    /**
+     * 大场景序号
+     */
+    private String num;
+
+    /**
+     * 大场景的密钥
+     */
+    private String sceneKey;
+
+    /**
+     * 0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居
+     */
+    private Integer sceneType;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    private Integer recommend;
+
+    /**
+     * 浏览次数
+     */
+    private Integer viewCount;
+
+    /**
+     * 版本
+     */
+    private Integer version;
+
+    /**
+     * 表示缩略图是否存在
+     */
+    private Integer thumbStatus;
+
+    /**
+     * 0表示默认,1表示自己上传
+     */
+    private String floorLogo;
+
+    /**
+     * 标记大小
+     */
+    private Integer floorLogoSize;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    private Integer tbStatus;
+
+    private String hotsIds;
+
+    /**
+     * 表示初始点信息
+     */
+    private String entry;
+
+    /**
+     * 拍摄数量
+     */
+    private Integer shootCount;
+
+    /**
+     * 风格
+     */
+    private Integer style;
+
+    /**
+     * 要gps定位
+     */
+    private String gps;
+
+    /**
+     * 方案:1是双目,2是转台,3是六目,4是八目
+     */
+    private Integer sceneScheme;
+
+    /**
+     * 背景音乐名称
+     */
+    private String bgMusic;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    private String recStatus;
+
+    /**
+     * 普通录屏文件地址
+     */
+    private String screencapVoiceSrc;
+
+    /**
+     * 旧版录屏数据地址
+     */
+    private String screencapMusic;
+
+    /**
+     * 录屏文件个数
+     */
+    private Integer screencapLen;
+
+    /**
+     * 录音文件地址
+     */
+    private String screencapVoiceSound;
+
+    /**
+     * 选择的类型,sound为screencapVoiceSound,file为screencapVoiceSrc
+     */
+    private String screencapVoiceType;
+
+    /**
+     * 录屏文件地址
+     */
+    private String playData;
+
+    /**
+     * 算法类型
+     */
+    private String algorithm;
+
+    /**
+     * oss服务商
+     */
+    private String oss;
+
+    /**
+     * 重新建模的版本
+     */
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    private Integer floorPublishVer;
+
+    /**
+     * 使用容量
+     */
+    private Long space;
+
+    /**
+     * 录屏图片存放文件
+     */
+    private String screencapThumb;
+
+}

+ 114 - 0
src/main/java/com/fdkankan/contro/entity/ScenePlus.java

@@ -0,0 +1,114 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景主表
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus")
+public class ScenePlus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 场景名称
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 场景状态:0-未建好,1--已建好,-1-计算出错,-2--不在官网显示
+     */
+    @TableField("scene_status")
+    private Integer sceneStatus;
+
+    /**
+     * 场景来源:相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 支付状态:0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 场景类型  0-其他,1-文博,2-地产,3-电商,4-餐饮,5-家居,99-一件换装虚拟房源
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 是否推荐:0-否,1-是
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除, 2-禁用
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

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

@@ -0,0 +1,153 @@
+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>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus_ext")
+public class ScenePlusExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * t_scene_plus主键
+     */
+    @TableField("plus_id")
+    private Long plusId;
+
+    /**
+     * 场景数据目录
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 场景链接
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 缩略图链接
+     */
+    @TableField("thumb")
+    private String thumb;
+
+    /**
+     * 方案:1-双目,2-转台,3-六目,4-八目,10-获取4k图,11-获取2k,12-获取1k
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 使用用量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 云服务器类型
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 点位数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 算法类型(slam、sfm)
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 算法类型(V2,V3)
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     */
+    @TableField("scene_resolution")
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    @TableField("scene_from")
+    private String sceneFrom;
+
+    /**
+     * 计算耗时
+     */
+    @TableField("compute_time")
+    private String computeTime;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除, 2-禁用
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

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

@@ -0,0 +1,138 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * pro场景表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@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;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 场景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;
+
+    /**
+     * 点位视频
+     */
+    @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;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示
+     */
+    @TableField("scene_status")
+    private Integer sceneStatus;
+
+    /**
+     * 算法类型(V2,V3)
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 168 - 0
src/main/java/com/fdkankan/contro/entity/SceneProEdit.java

@@ -0,0 +1,168 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * pro场景编辑数据表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@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("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;
+
+    /**
+     * 普通录屏文件地址
+     */
+    @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("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 168 - 0
src/main/java/com/fdkankan/contro/entity/SceneProEditExt.java

@@ -0,0 +1,168 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * pro场景编辑数据表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro_edit_ext")
+public class SceneProEditExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * pro场景编辑数据表id
+     */
+    @TableField("pro_edit_id")
+    private Long proEditId;
+
+    /**
+     * 场景proid
+     */
+    @TableField("pro_id")
+    private Long proId;
+
+    /**
+     * 小地图浏览
+     */
+    @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 Integer 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("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 153 - 0
src/main/java/com/fdkankan/contro/entity/SceneProExt.java

@@ -0,0 +1,153 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * pro场景表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro_ext")
+public class SceneProExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 外键id,t_scene_pro_id
+     */
+    @TableField("scene_pro_id")
+    private Long sceneProId;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 所有资源文件名
+     */
+    @TableField("files_name")
+    private String filesName;
+
+    /**
+     * 算法类型
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 服务器的服务商
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 使用容量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 计算时间(秒为单位)
+     */
+    @TableField("compute_time")
+    private Long computeTime;
+
+    /**
+     * 场景来源,相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     */
+    @TableField("scene_resolution")
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    @TableField("scene_from")
+    private String sceneFrom;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    @TableField("vrnum")
+    private String vrnum;
+
+    @TableField("unicode")
+    private String unicode;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * 拍摄数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 相机类型,0表示双目,1四维看看pro,2 四维看看lite,9 双目转台,10 激光转台
+     */
+    @TableField("camera_type")
+    private Integer cameraType;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 185 - 0
src/main/java/com/fdkankan/contro/entity/SceneProPO.java

@@ -0,0 +1,185 @@
+package com.fdkankan.contro.entity;
+
+import lombok.Data;
+import org.springframework.data.annotation.Transient;
+
+import java.util.Date;
+
+@Data
+public class SceneProPO {
+
+    private Long id;
+
+    /**
+     * 场景名称
+     */
+    private String sceneName;
+
+    /**
+     * 场景描述
+     */
+    private String sceneDec;
+
+    /**
+     * 场景的链接地址
+     */
+    private String webSite;
+
+    /**
+     * 场景缩略图
+     */
+    private String thumb;
+
+    /**
+     * 用户表t_user的id
+     */
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    private Long cameraId;
+
+    /**
+     * 场景logo
+     */
+    private String sceneLogo;
+
+    /**
+     * 大场景序号
+     */
+    private String num;
+
+    /**
+     * 0-其他,1-文博,2-地产,3-电商,4-餐饮,5-家居,99-一件换装虚拟房源
+     */
+    private Integer sceneType;
+
+    /**
+     * 浏览次数
+     */
+    private Integer viewCount;
+
+    /**
+     * 拍摄数量
+     */
+    private Integer shootCount;
+
+    /**
+     * 点位视频
+     */
+    private String videos;
+
+    /**
+     * 要gps定位
+     */
+    private String gps;
+
+    /**
+     * 方案:1-双目,2-转台,3-六目,4-八目,10-获取4k图,11-获取2k,12-获取1k
+     */
+    private Integer sceneScheme;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    private String recStatus;
+
+    /**
+     * 算法类型(V2,V3)
+     */
+    private String buildType;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    private Integer tbStatus;
+
+    private Integer sceneStatus;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    private String dataSource;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    private Integer payStatus;
+
+    /**
+     * 手机id
+     */
+    private String phoneId;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    private Integer recommend;
+
+    /**
+     * 所有资源文件名
+     */
+    private String filesName;
+
+    /**
+     * 算法类型
+     */
+    private String algorithm;
+
+    /**
+     * 服务器的服务商
+     */
+    private String ecs;
+
+    /**
+     * 使用容量
+     */
+    private Long space;
+
+    /**
+     * 固件版本
+     */
+    private String firmwareVersion;
+
+    /**
+     * 计算时间(秒为单位)
+     */
+    private Long computeTime;
+
+    /**
+     * 场景来源,相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景
+     */
+    private Integer sceneSource;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    private String vrnum;
+
+    private String unicode;
+
+    /**
+     * 相机类型
+     */
+    private Integer cameraType;
+
+    @Transient
+    private String cooperationUserId;
+
+//    /**
+//     * 触发mq调度,事务最后触发
+//     */
+//    private BuildSceneMqMessage mqMsg;
+
+}

+ 60 - 0
src/main/java/com/fdkankan/contro/entity/SceneResourceCamera.java

@@ -0,0 +1,60 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景资源和相机关联表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_resource_camera")
+public class SceneResourceCamera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景资源id
+     */
+    @TableField("scene_resource_id")
+    private Long sceneResourceId;
+
+    /**
+     * 协作相机的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 60 - 0
src/main/java/com/fdkankan/contro/entity/SceneResourceCooperation.java

@@ -0,0 +1,60 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+@TableName("t_scene_resource_cooperation")
+public class SceneResourceCooperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景资源id
+     */
+    @TableField("scene_resource_id")
+    private Long sceneResourceId;
+
+    /**
+     * 协作用户的id
+     */
+    @TableField("scene_cooperation_id")
+    private Long sceneCooperationId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0-有效,1-删除
+     */
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+
+}

+ 140 - 0
src/main/java/com/fdkankan/contro/entity/User.java

@@ -0,0 +1,140 @@
+package com.fdkankan.contro.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户信息表
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+@ToString
+@TableName("t_user")
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 头像对应的链接地址
+     */
+    @TableField("head")
+    private String head;
+
+    /**
+     * 用户密码
+     */
+    @TableField("password")
+    private String password;
+
+    /**
+     * 用户邮箱
+     */
+    @TableField("email")
+    private String email;
+
+    /**
+     * 注册时间
+     */
+    @TableField("register_time")
+    private Date registerTime;
+
+    /**
+     * 用户名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 昵称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 0表示禁言(bbs)
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 0表示拒绝通知,1表示接受通知
+     */
+    @TableField("is_notice")
+    private Integer isNotice;
+
+    /**
+     * 机构名称
+     */
+    @TableField("organization_name")
+    private String organizationName;
+
+    /**
+     * 主页链接
+     */
+    @TableField("main_page")
+    private String mainPage;
+
+    /**
+     * 所在国家,默认是86
+     */
+    @TableField("country")
+    private String country;
+
+    /**
+     * 所在省份
+     */
+    @TableField("province")
+    private String province;
+
+    /**
+     * 所在城市
+     */
+    @TableField("city")
+    private String city;
+
+    /**
+     * 可下载场景总数
+     */
+    @TableField("download_num_total")
+    private Integer downloadNumTotal;
+
+    /**
+     * 已下载场景总数
+     */
+    @TableField("download_num")
+    private Integer downloadNum;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 0正常,1删除
+     */
+   @TableField("tb_status")
+@TableLogic(value="0",delval = "1")
+    private Integer tbStatus;
+
+
+}

+ 50 - 0
src/main/java/com/fdkankan/contro/enums/CameraTypeEnum.java

@@ -0,0 +1,50 @@
+package com.fdkankan.contro.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum CameraTypeEnum {
+    DOUBLE_EYE(0,"KK-","4DKKLITE_","旧双目相机"),
+    FDKK_PRO(1,"KK-","4DKKPRO_","四维看看pro八目相机"),
+    FDKK_LITE(2,"KK-","4DKKLITE_","四维看看lite"),
+    ZHIHOUSE_REDHOUSE(5,"KK-","4DKKLITE_","指房宝小红屋相机"),
+    DOUBLE_EYE_TURN(9,"KJ-","4DKKLITE_","双目转台"),
+    LASER_TURN(10,"SS-","4DKKLA_","激光转台");
+
+
+    private int type;
+    private String sceneNumPrefix;
+    private String wifiNamePrefix;
+    private String desc;
+
+    public int getType() {
+        return type;
+    }
+
+    public String getSceneNumPrefix() {
+        return sceneNumPrefix;
+    }
+
+    static Map<Integer,CameraTypeEnum> typeMaps = new HashMap<>(5);
+
+    static{
+        for (CameraTypeEnum typeEnum : CameraTypeEnum.values()) {
+            typeMaps.put(typeEnum.getType(),typeEnum);
+        }
+    }
+
+    CameraTypeEnum(Integer type, String sceneNumPrefix, String wifiNamePrefix, String desc) {
+        this.type = type;
+        this.sceneNumPrefix = sceneNumPrefix;
+        this.wifiNamePrefix = wifiNamePrefix;
+        this.desc = desc;
+    }
+
+    public static String getSceneNumPrefixByType(Integer type){
+        if(typeMaps.containsKey(type)){
+            return typeMaps.get(type).getSceneNumPrefix();
+        }
+        return "";
+    }
+
+}

+ 111 - 0
src/main/java/com/fdkankan/contro/listener/RabbitMqListener.java

@@ -0,0 +1,111 @@
+package com.fdkankan.contro.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.contro.constant.DingTalkConst;
+import com.fdkankan.contro.service.IBuildSceneDTService;
+import com.fdkankan.contro.service.IBuildScenePostService;
+import com.fdkankan.contro.service.IBuildScenePreService;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneFailDTMqMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/19
+ **/
+@Slf4j
+@Component
+public class RabbitMqListener {
+    @Value("${queue.modeling.modeling-pre}")
+    private String queueModelingPre;
+    @Value("${queue.modeling.modeling-post}")
+    private String queueModelingPost;
+    @Value("${queue.modeling.modeling-dt}")
+    private String queueModelingDt;
+
+    @Autowired
+    private IBuildScenePreService buildScenePreService;
+    @Autowired
+    private IBuildScenePostService buildScenePostService;
+    @Autowired
+    private IBuildSceneDTService buildSceneDTService;
+
+    /**
+     * 场景计算前置资源准备处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-pre}"),
+        concurrency = "${maxThread.modeling.modeling-pre}"
+    )
+    public void buildScenePreHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("场景计算资源准备开始,队列名:{},id:{},消息体:{}", queueModelingPre, correlationId, msg);
+        BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
+        Thread.sleep(2000L);
+        buildScenePreService.buildScenePre(buildSceneMessage);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+    /**
+     * 场景计算后置结果处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-post}"),
+        concurrency = "${maxThread.modeling.modeling-post}"
+    )
+    public void buildScenePostHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("场景计算结果处理开始,队列名:{},id:{},消息体:{}", queueModelingPost, correlationId, msg);
+        BuildSceneResultMqMessage resultMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
+        Thread.sleep(2000L);
+        buildScenePostService.buildScenePost(resultMessage);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+    /**
+     * 场景计算发送钉钉消息
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-dt}"),
+        concurrency = "${maxThread.modeling.modeling-dt}"
+    )
+    public void buildSceneDTHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("发送钉钉消息处理,队列名:{},id:{},消息体:{}", queueModelingDt, correlationId, msg);
+        BuildSceneFailDTMqMessage dtMessage = JSONObject.parseObject(msg, BuildSceneFailDTMqMessage.class);
+        buildSceneDTService.handFail(dtMessage.getReason(), dtMessage.getServerPath(),
+            dtMessage.getNum(), dtMessage.getHostName(), DingTalkConst.contentExt);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+
+}

+ 17 - 0
src/main/java/com/fdkankan/contro/mapper/ICameraDetailMapper.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.dto.CameraDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机子表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ICameraDetailMapper extends BaseMapper<CameraDetail> {
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.dto.Camera;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ICameraMapper extends BaseMapper<Camera> {
+
+}

+ 30 - 0
src/main/java/com/fdkankan/contro/mapper/ICameraSpaceMapper.java

@@ -0,0 +1,30 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.CameraSpace;
+import com.fdkankan.contro.vo.ResponseCameraSpace;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机容量表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ICameraSpaceMapper extends BaseMapper<CameraSpace> {
+
+    @Select(" select s.id, s.space_end_time, c.child_name, s.space from t_camera_space s " +
+            "LEFT JOIN t_camera c on s.camera_id = c.id where s.tb_status = 0 and " +
+            "s.space_type = 2 and s.camera_id = #{cameraId} and TIMESTAMPDIFF(MINUTE, NOW(), s.space_end_time) > -1 ORDER BY s.space_end_time ")
+    List<ResponseCameraSpace> getVoListByCameraId(@Param("cameraId")Long cameraId);
+
+    @Select(" SELECT * FROM t_camera_space WHERE (DATEDIFF(space_end_time,NOW())=-1) AND ((space_type=1) or (space_type=2)) AND tb_status = 0 ")
+    List<CameraSpace> findExpiredList();
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.Company;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 客户企业logo信息 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ICompanyMapper extends BaseMapper<Company> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.Manager;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 管理员表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface IManagerMapper extends BaseMapper<Manager> {
+
+}

+ 25 - 0
src/main/java/com/fdkankan/contro/mapper/IScene3dNumMapper.java

@@ -0,0 +1,25 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.Scene3dNum;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 八目场景编码表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface IScene3dNumMapper extends BaseMapper<Scene3dNum> {
+
+    List<String> findSceneNum();
+
+    void updateUsedStatus(@Param("sceneCodes") List<String> sceneCodes);
+
+}

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

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

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneEditControls;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-18
+ */
+@Mapper
+public interface ISceneEditControlsMapper extends BaseMapper<SceneEditControls> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneEditInfoExt;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-07
+ */
+@Mapper
+public interface ISceneEditInfoExtMapper extends BaseMapper<SceneEditInfoExt> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneEditInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-18
+ */
+@Mapper
+public interface ISceneEditInfoMapper extends BaseMapper<SceneEditInfo> {
+
+}

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

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

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

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

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

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

+ 17 - 0
src/main/java/com/fdkankan/contro/mapper/ISceneMapper.java

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

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.ScenePlusExt;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Mapper
+public interface IScenePlusExtMapper extends BaseMapper<ScenePlusExt> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.ScenePlus;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+@Mapper
+public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
+
+}

+ 23 - 0
src/main/java/com/fdkankan/contro/mapper/ISceneProEditExtMapper.java

@@ -0,0 +1,23 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneProEditExt;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * pro场景编辑数据表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface ISceneProEditExtMapper extends BaseMapper<SceneProEditExt> {
+
+    Integer selectCntDownloadNum();
+
+    void updateImageVersionByProEditId(@Param("proEditId") Long proEditId);
+
+}

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

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

+ 19 - 0
src/main/java/com/fdkankan/contro/mapper/ISceneProExtMapper.java

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

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

@@ -0,0 +1,27 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.entity.SceneProPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * pro场景表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface ISceneProMapper extends BaseMapper<ScenePro> {
+
+    @Select("select * from from t_scene_pro t left join t_scene_pro_ext ext on t.id = ext.scene_pro_id WHERE ext.data_source LIKE CONCAT('%',#{unicode},'%') AND t.tb_status = #{tbStatus} order by t.create_time desc LIMIT 1")
+    SceneProPO getSceneStatusByUnicode(@Param("unicode") String unicode, @Param("tbStatus") Integer tbStatus);
+
+    @Select("select * FROM t_scene_pro t LEFT JOIN t_scene_pro_ext ext ON t.id = ext.scene_pro_id WHERE ext.data_source LIKE CONCAT('%',#{fileId},'%') AND t.tb_status = 0 order by t.create_time desc LIMIT 1")
+    SceneProPO findByFileId(@Param("fileId") String fileId);
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneResourceCamera;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景资源和相机关联表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface ISceneResourceCameraMapper extends BaseMapper<SceneResourceCamera> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.entity.SceneResourceCooperation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表 Mapper 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+@Mapper
+public interface ISceneResourceCooperationMapper extends BaseMapper<SceneResourceCooperation> {
+
+}

+ 24 - 0
src/main/java/com/fdkankan/contro/mapper/IUserIncrementMapper.java

@@ -0,0 +1,24 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.contro.dto.UserIncrement;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户增值权益表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface IUserIncrementMapper extends BaseMapper<UserIncrement> {
+
+    @Select("SELECT * FROM t_user_increment x LEFT JOIN t_camera c ON x.camera_id = c.id and c.tb_status = 0 WHERE c.child_name = #{childName} AND x.tb_status = 0 ")
+    List<UserIncrement> getByChildName(@Param("childName")String childName);
+}

+ 24 - 0
src/main/java/com/fdkankan/contro/mapper/IUserMapper.java

@@ -0,0 +1,24 @@
+package com.fdkankan.contro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.contro.entity.RequestUser;
+import com.fdkankan.contro.entity.User;
+import com.fdkankan.contro.vo.ResponseUser;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 用户信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface IUserMapper extends BaseMapper<User> {
+
+
+    Page<ResponseUser> getListByParam(Page<ResponseUser> page, @Param("param") RequestUser param);
+}

+ 75 - 0
src/main/java/com/fdkankan/contro/schedule/ScheduleJob.java

@@ -0,0 +1,75 @@
+package com.fdkankan.contro.schedule;
+
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.rubbersheeting.RubberSheetingUtil;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Log4j2
+@Component
+public class ScheduleJob {
+
+    @Value("${rocketmq.autoScaling.num.normal}")
+    private String baseNum;
+
+    @Value("${rocketmq.autoScaling.num.laser}")
+    private String baseNumLaser;
+
+    @Value("${environment}")
+    private String environment;
+
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+
+    @Autowired
+    private RubberSheetingUtil rubberSheetingUtil;
+
+    @Value("${queue.modeling.modeling-call}")
+    private String queueModelingCall;
+
+
+    @Scheduled(cron = "0 0/5 8-21 * * ? ")
+    public void job8() {
+        if("hq".equals(environment)){
+            return;
+        }
+        try {
+            //当mq排队数大于指定数量时使用弹性升缩
+            int mqNum = rabbitMqProducer.getMessageCount(queueModelingCall);
+            log.info("每5分钟查询一次排队队列,mqNum:" + mqNum);
+            if(mqNum - Integer.parseInt(baseNum) > 0){
+                log.info("使用弹性升缩开启一台ECS");
+                log.info(rubberSheetingUtil.createEcs());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 判断激光相机
+     */
+    @Scheduled(cron = "${mq.scale.laser:-}")
+    public void job9() {
+        if("hq".equals(environment)){
+            return;
+        }
+//        try {
+//            //当mq排队数大于指定数量时使用弹性升缩
+//            int mqNum = rabbitMqProducer.getLaserMessageCount();
+//            log.info("每5分钟查询一次激光排队队列,mqNum:" + mqNum);
+//            if(mqNum - Integer.parseInt(baseNumLaser) > 0){
+//
+//                log.info("使用激光弹性升缩开启一台ECS");
+//                log.info(rubberSheetingUtil.createEcs());
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            log.error(e.getMessage());
+//        }
+    }
+}

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

@@ -0,0 +1,15 @@
+package com.fdkankan.contro.service;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/1
+ **/
+public interface IBuildSceneDTService {
+
+    void handFail(String reason, String serverPath, String num, String hostName, String contentExt);
+
+}

+ 17 - 0
src/main/java/com/fdkankan/contro/service/IBuildScenePostService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.service;
+
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/1
+ **/
+public interface IBuildScenePostService {
+
+    void buildScenePost(BuildSceneResultMqMessage message);
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/1
+ **/
+public interface IBuildScenePreService {
+
+    void buildScenePre(BuildSceneCallMessage message);
+
+    void downLoadSource(BuildSceneCallMessage buildSceneMqMessage, String path) throws Exception;
+}

+ 22 - 0
src/main/java/com/fdkankan/contro/service/ICameraDetailService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.dto.CameraDetail;
+import com.fdkankan.contro.vo.RequestCamera;
+import com.fdkankan.contro.vo.ResponseCamera;
+
+/**
+ * <p>
+ * 相机子表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface ICameraDetailService extends IService<CameraDetail> {
+
+    CameraDetail getByCameraId(Long valueOf);
+
+    CameraDetail updateCameraDetailByCameraIdAndSpace(Long cameraId, Long space);
+
+}

+ 19 - 0
src/main/java/com/fdkankan/contro/service/ICameraService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.dto.Camera;
+
+/**
+ * <p>
+ * 相机主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface ICameraService extends IService<Camera> {
+
+    Camera getByChildName(String childName);
+
+    Camera getBySnCode(String snCode);
+}

+ 20 - 0
src/main/java/com/fdkankan/contro/service/ICameraSpaceService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.CameraSpace;
+import com.fdkankan.contro.vo.ResponseCameraSpace;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机容量表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface ICameraSpaceService extends IService<CameraSpace> {
+
+    List<ResponseCameraSpace> getVoListByCameraId(Long cameraId);
+}

+ 16 - 0
src/main/java/com/fdkankan/contro/service/ICompanyService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.Company;
+
+/**
+ * <p>
+ * 客户企业logo信息 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface ICompanyService extends IService<Company> {
+
+}

+ 17 - 0
src/main/java/com/fdkankan/contro/service/IManagerService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.Manager;
+
+/**
+ * <p>
+ * 管理员表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface IManagerService extends IService<Manager> {
+
+
+}

+ 37 - 0
src/main/java/com/fdkankan/contro/service/IScene3dNumService.java

@@ -0,0 +1,37 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.Scene3dNum;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 八目场景编码表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface IScene3dNumService extends IService<Scene3dNum> {
+
+    List<String> findSceneNum();
+
+    Scene3dNum findByNum(String sceneCode);
+//
+    void updateUsedStatus(List<String> nums);
+
+    /**
+     * 从码池中取出一个场景码
+     * @return
+     */
+    String generateSceneNum(Integer cameraType);
+
+    /**
+     * 批量生成场景码并放入码池
+     */
+    void batchCreateSceneNum();
+
+
+
+}

+ 16 - 0
src/main/java/com/fdkankan/contro/service/ISceneCooperationService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneCooperation;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneCooperationService extends IService<SceneCooperation> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneEditControls;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-18
+ */
+public interface ISceneEditControlsService extends IService<SceneEditControls> {
+
+    SceneEditControls getBySceneEditId(long sceneEditInfoId);
+
+}

+ 19 - 0
src/main/java/com/fdkankan/contro/service/ISceneEditInfoExtService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneEditInfoExt;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-07
+ */
+public interface ISceneEditInfoExtService extends IService<SceneEditInfoExt> {
+
+    SceneEditInfoExt getByEditInfoId(long editInfoId);
+
+
+}

+ 21 - 0
src/main/java/com/fdkankan/contro/service/ISceneEditInfoService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneEditInfo;
+
+import java.io.IOException;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-01-18
+ */
+public interface ISceneEditInfoService extends IService<SceneEditInfo> {
+
+    SceneEditInfo getByScenePlusId(long scenePlusId);
+
+    SceneEditInfo getBySceneProId(long sceneProId);
+}

+ 16 - 0
src/main/java/com/fdkankan/contro/service/ISceneExtService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneExt;
+
+/**
+ * <p>
+ * 场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-30
+ */
+public interface ISceneExtService extends IService<SceneExt> {
+
+}

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

@@ -0,0 +1,40 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.contro.entity.SceneFileBuild;
+import com.fdkankan.contro.vo.ResponseSceneFile;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 场景文件建模表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneFileBuildService extends IService<SceneFileBuild> {
+
+    SceneFileBuild findByFileId(String fileId);
+
+    ResponseSceneFile preUpload(String params) throws Exception;
+
+    ResponseSceneFile getProgress(String params) throws Exception;
+
+    ResultData uploadFile(MultipartFile file, String params) throws Exception;
+
+    ResultData uploadSuccess(String params) throws Exception;
+
+    ResultData uploadSuccessBuild(String params) throws Exception;
+
+    ResultData turntableUploadSuccess(String params) throws Exception;
+
+    ResultData getS3UploadUrl(String params) throws Exception;
+
+    ResultData buildLiteScene(String prefix, String dataFdage, String zipName, String userName,
+                              String password, String oldNum) throws Exception;
+
+    ResultData buildScene(String prefix, String unicode, String zip, String dataFdage) throws Exception;
+
+}

+ 19 - 0
src/main/java/com/fdkankan/contro/service/ISceneFileUploadService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneFileUpload;
+
+/**
+ * <p>
+ * 场景文件上传表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneFileUploadService extends IService<SceneFileUpload> {
+
+    SceneFileUpload findByFileIdAndChunk(String fileId, Integer valueOf);
+
+    Long countUploadSuccessByFileId(String fileId);
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.ScenePlusExt;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+public interface IScenePlusExtService extends IService<ScenePlusExt> {
+
+    ScenePlusExt getScenePlusExtByPlusId(long plusId);
+
+}

+ 20 - 0
src/main/java/com/fdkankan/contro/service/IScenePlusService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.contro.entity.ScenePlus;
+
+/**
+ * <p>
+ * 场景主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-03-16
+ */
+public interface IScenePlusService extends IService<ScenePlus> {
+
+    ScenePlus getScenePlusByNum(String num);
+
+    ResultData resetSpace(String sceneNum) throws Exception;
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneProEditExt;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProEditExtService extends IService<SceneProEditExt> {
+
+    SceneProEditExt getByProEditId(Long proEditId);
+
+}

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

@@ -0,0 +1,18 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneProEdit;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProEditService extends IService<SceneProEdit> {
+
+     SceneProEdit findByProId(Long proId);
+
+}

+ 17 - 0
src/main/java/com/fdkankan/contro/service/ISceneProExtService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneProExt;
+
+/**
+ * <p>
+ * pro场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProExtService extends IService<SceneProExt> {
+
+    SceneProExt findBySceneProId(Long sceneProId);
+}

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

@@ -0,0 +1,29 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.contro.entity.ScenePro;
+import com.fdkankan.contro.entity.SceneProPO;
+
+/**
+ * <p>
+ * pro场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProService extends IService<ScenePro> {
+
+    ScenePro findBySceneNum(String sceneNum);
+
+    void updateStatus(String sceneNum, int sceneStatus);
+
+    void updateTime(String sceneNum, Long space, int payStatus, String videos, long computeTime);
+
+    SceneProPO getSceneStatusByUnicode(String s, Integer code);
+
+    ResultData rebuildReduceSpaceBySceneNum(String sceneNum) throws Exception;
+
+    SceneProPO findByFileId(String s);
+}

+ 19 - 0
src/main/java/com/fdkankan/contro/service/ISceneResourceCameraService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneResourceCamera;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和相机关联表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneResourceCameraService extends IService<SceneResourceCamera> {
+
+    List<SceneResourceCamera> findListByCameraId(Long id);
+}

+ 17 - 0
src/main/java/com/fdkankan/contro/service/ISceneResourceCooperationService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SceneResourceCooperation;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneResourceCooperationService extends IService<SceneResourceCooperation> {
+}

+ 20 - 0
src/main/java/com/fdkankan/contro/service/ISceneService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.Scene;
+
+/**
+ * <p>
+ * 场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneService extends IService<Scene> {
+
+    void updateStatus(String sceneNum, int status);
+
+    void updateTime(String sceneNum, Long space, int payStatus);
+
+}

+ 22 - 0
src/main/java/com/fdkankan/contro/service/IUserIncrementService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.dto.CameraDetail;
+import com.fdkankan.contro.dto.UserIncrement;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户增值权益表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface IUserIncrementService extends IService<UserIncrement> {
+
+    UserIncrement getByCameraId(Long cameraId);
+
+    List<UserIncrement> getByChildName(String childName);
+}

+ 21 - 0
src/main/java/com/fdkankan/contro/service/IUserService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.contro.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.contro.entity.SSOUser;
+import com.fdkankan.contro.entity.User;
+
+/**
+ * <p>
+ * 用户信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface IUserService extends IService<User> {
+
+    SSOUser getSsoUserByUserName(User user,String phoneNum);
+
+    SSOUser getSSOUserByUserId(Long userId);
+
+}

+ 57 - 0
src/main/java/com/fdkankan/contro/service/impl/BuildSceneDTServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fdkankan.contro.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.contro.service.IBuildSceneDTService;
+import com.fdkankan.dingtalk.DingTalkSendUtils;
+import com.taobao.api.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/20
+ **/
+@Slf4j
+@Service
+public class BuildSceneDTServiceImpl implements IBuildSceneDTService {
+
+    public static final String DINGTALK_MSG_PATTERN = "**环境**: %s\n\n" +
+        "**服务器名称**: %s\n\n" +
+        "**失败原因**: %s\n\n" +
+        "**num**: %s\n\n" +
+        "**server-path**: %s\n\n";
+//        "**algorithm-log**: [https://4dkk.4dage.com/build_log/%s/console.log](https://4dkk.4dage.com/build_log/%s/console.log)";
+
+    public static final String contentExt = "**algorithm-log**: [https://4dkk.4dage.com/build_log/%s/console.log](https://4dkk.4dage.com/build_log/%s/console.log)";
+
+    @Autowired
+    private DingTalkSendUtils dingTalkSendUtils;
+    @Value("${spring.profiles.active}")
+    private String environment;
+
+    @Override
+    public void handFail(String reason, String serverPath, String num, String hostName, String contentExt) {
+        CompletableFuture.runAsync(() -> {
+            try {
+                String contentFormat = StrUtil.isBlank(contentExt) ? this.DINGTALK_MSG_PATTERN : this.DINGTALK_MSG_PATTERN +  contentExt;
+                String content = String.format(contentFormat, this.environment, hostName, reason, num, serverPath, num, num);
+                log.info("发送钉钉消息,content:{}", content);
+                dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
+            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
+                log.error("发送钉钉消息失败", apiException);
+            }
+        });
+    }
+
+}

+ 794 - 0
src/main/java/com/fdkankan/contro/service/impl/BuildScenePostServiceImpl.java

@@ -0,0 +1,794 @@
+package com.fdkankan.contro.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.*;
+import com.fdkankan.common.util.FileUtil;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.common.util.MatrixToImageWriterUtil;
+import com.fdkankan.contro.bean.*;
+import com.fdkankan.contro.dto.CameraDetail;
+import com.fdkankan.contro.dto.UserIncrement;
+import com.fdkankan.contro.entity.*;
+import com.fdkankan.contro.service.*;
+import com.fdkankan.contro.vo.SceneEditControlsVO;
+import com.fdkankan.fyun.constant.StorageType;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.push.PushMessageConfig;
+import com.fdkankan.push.PushMsgUtil;
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import static com.fdkankan.push.PushMessageConfig.*;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/20
+ **/
+@Slf4j
+@Service
+public class BuildScenePostServiceImpl implements IBuildScenePostService {
+
+    @Value("${main.url}")
+    private String mainUrl;
+    @Value("${scene.pro.new.url}")
+    private String sceneProNewUrl;
+    @Value("${upload.type}")
+    private String ossType;
+    @Value("${oss.prefix.ali}")
+    private String prefixAli;
+    @Value("${oss.bucket:4dkankan}")
+    private String bucket;
+
+    @Autowired
+    private ISceneService sceneService;
+    @Autowired
+    private ISceneFileBuildService sceneFileBuildService;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private ISceneProExtService sceneProExtService;
+    @Autowired
+    private ICameraDetailService cameraDetailService;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private ISceneEditControlsService sceneEditControlsService;
+    @Autowired
+    private UploadToOssUtil uploadToOssUtil;
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneEditInfoExtService sceneEditInfoExtService;
+
+    @Autowired
+    private IUserIncrementService userIncrementService;
+
+    @Override
+    public void buildScenePost(BuildSceneResultMqMessage message) {
+        Integer cameraType = Integer.parseInt(message.getCameraType());
+        String sceneCode = message.getSceneCode();
+        String fileId = message.getFileId();
+        Integer payStatus = message.getPayStatus();
+        Long computeTime = message.getComputeTime();
+        Boolean buildSuccess = message.getBuildSuccess();
+        Integer videoVersion = message.getVideoVersion();
+
+        Map<String, String> uploadFiles = message.getUploadFiles();
+        String path = message.getPath();
+        Integer pushChannel = message.getPushChannel();
+        String pushToken = message.getPushToken();
+        String prefix = message.getPrefix();
+        try {
+            if(!buildSuccess){//建模失败,修改状态为失败状态
+                log.info("建模失败,修改状态为失败状态");
+                // TODO: 2022/3/21 plus版本稳定后删除------------------------start
+                sceneService.updateStatus(sceneCode, SceneStatus.FAILD.code());
+                sceneProService.updateStatus(sceneCode, SceneStatus.FAILD.code());
+                // TODO: 2022/3/21 plus版本稳定后删除------------------------send
+
+                scenePlusService.update(
+                    new LambdaUpdateWrapper<ScenePlus>()
+                        .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code())
+                        .eq(ScenePlus::getNum, sceneCode));
+
+                SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
+                if(Objects.nonNull(sceneFileBuild)){
+                    sceneFileBuild.setBuildStatus(BuildStatus.fail.code());
+                    sceneFileBuildService.updateById(sceneFileBuild);
+                }
+                return;
+            }
+
+            //建模成功走以下逻辑
+            log.info("cameraType:{}",cameraType);
+
+            //计算场景消耗磁盘空间
+            long space = this.calUseSpace(uploadFiles);
+
+            if(cameraType < 3){
+                // TODO: 2022/3/21 plus版本稳定后删除------------------------start
+                sceneService.updateTime(sceneCode, space, payStatus);
+                // TODO: 2022/3/21 plus版本稳定后删除------------------------send
+
+                this.updateDb4Sm(sceneCode, space);
+
+                uploadToOssUtil.uploadMulFiles(uploadFiles);
+                return;
+            }
+
+            //读取计算结果文件生成videosJson
+            JSONObject videosJson = this.getVideosJson(path, videoVersion, sceneCode, cameraType);
+
+            //写入数据库
+            // TODO: 2022/3/21 plus版本稳定后删除------------------------start
+            ScenePro scenePro = this.updateDbPro(sceneCode, space, payStatus, videosJson.toJSONString(), computeTime, fileId);
+            SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
+            // TODO: 2022/3/21 plus版本稳定后删除------------------------send
+            ScenePlus scenePlus = this.updateDbPlus(sceneCode, space, payStatus, videosJson.toJSONString(), computeTime, fileId);
+            ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
+            //变更容量,arrearCap为true时,代表容量不足
+            boolean arrearCap = this.updateSpace(scenePlus.getCameraId(), space, scenePlus.getId(), scenePro.getId());
+
+            //如果相机容量不足,需要把场景的paystatus改为容量不足状态
+            this.sealScene(arrearCap, scenePlus.getId(), scenePro.getId());
+
+            Object[] editInfoArr = this.updateEditInfo(scenePro, scenePlus);
+            SceneEditInfo sceneEditInfo = (SceneEditInfo)editInfoArr[0];
+            SceneEditInfoExt sceneEditInfoExt = (SceneEditInfoExt)editInfoArr[1];
+            SceneEditControls sceneEditControls = (SceneEditControls)editInfoArr[2];
+
+            String sceneUrl = mainUrl + "/" + sceneProNewUrl;
+            String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneCode+".png";
+            String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneCode+"_en.png";
+            //生成新的分享的二维码-中文版本
+            MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneCode, outPathZh, false,null);
+            //生成新的分享的二维码-英文版本
+            MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneCode + "&lang=en", outPathEn, false, null);
+            //上传二维码
+            uploadToOssUtil.upload(outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, sceneCode) + sceneCode + ".png");
+            uploadToOssUtil.upload(outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, sceneCode) + sceneCode + "_en.png");
+
+            Map<String, String> newUploadFiles = this.uploadFileMapHandler(sceneCode, cameraType, uploadFiles);
+
+            // TODO: 2022/5/26 下载全景图采用打包本地文件的方式,这里应该是不需要上传到oss了,暂时保留代码并注释掉------start
+            //上传计算结果中的caches/images和caches/videos
+//            this.uploadCaches(sceneCode, uploadFiles, path);
+            // TODO: 2022/5/26 下载全景图采用打包本地文件的方式,这里应该是不需要上传到oss了,暂时保留代码并注释掉------end
+
+            //上传全景图俯视图
+            this.uploadFloorCad(path, sceneCode, newUploadFiles);
+
+            //上传文件
+            uploadToOssUtil.uploadMulFiles(newUploadFiles);
+            // TODO: 2022/3/11 同时上传一份到旧版本的目录,用于过渡期使用,待重构版本稳定后删除
+            uploadToOssUtil.uploadMulFiles(uploadFiles);
+
+            //拷贝部分文件到编辑目录,用于用户编辑
+            this.copyToEditDir(sceneCode);
+
+            //生成houseTypejson并上传
+            this.uploadHouseTypeJson(sceneCode);
+
+//            //上传日志文件
+//            buildScenePreService.uploadLogFile(sceneCode, sceneProExt.getDataSource());
+
+            //写scene.json
+            this.writeSceneJson(sceneCode, videosJson,
+                sceneEditInfo, sceneEditInfoExt, sceneEditControls, scenePlus, scenePlusExt, arrearCap);
+
+            //计算成功,发短信
+            this.sendSms(pushChannel,pushToken, cameraType, scenePro.getSceneName(), scenePro.getWebSite());
+
+            log.info("场景计算结果处理结束,场景码:{}", message.getSceneCode());
+
+        }catch (Exception e){
+            log.error("场景计算结果处理出错", e);
+            //发送钉钉
+            String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(prefix);
+//            buildSceneDTService.handFail("场景计算结果处理出错", serverPath, sceneCode, BuildScenePreServiceImpl.hostName, BuildScenePreServiceImpl.contentExt);
+        }
+    }
+
+    private void uploadFloorCad(String path, String num, Map<String, String> uploadFiles){
+
+        //户型图上传
+        String  userEditPath = UploadFilePath.USER_EDIT_PATH + "floor-cad-%s.%s";
+        String  userViewPath = UploadFilePath.USER_VIEW_PATH + "floor-cad-%s.%s";
+        String floorCadPath = path + "/results/floorplan_cad";
+        List<String> floorCadList = FileUtil.getFileList(floorCadPath);
+        if(CollUtil.isNotEmpty(floorCadList)){
+            floorCadList.stream().forEach(str->{
+                String substring = str.substring(str.lastIndexOf(File.separator) + 1);
+                String[] arr = substring.split("floor");
+                String[] arr2 = arr[1].split("\\.");
+                uploadFiles.put(str, String.format(userEditPath, num, arr2[0], arr2[1]));
+                uploadFiles.put(str, String.format(userViewPath, num, arr2[0], arr2[1]));
+            });
+        }
+
+    }
+
+    private void writeSceneJson(String num, JSONObject videosJson, SceneEditInfo sceneEditInfo, SceneEditInfoExt sceneEditInfoExt,
+                                SceneEditControls sceneEditControls, ScenePlus scenePlus, ScenePlusExt scenePlusExt, boolean arrearCap)  throws Exception{
+        String sceneJsonKey = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json";
+        boolean exist = uploadToOssUtil.existKey(sceneJsonKey);
+        //如果云端没有scene.json文件,生成一份
+        if(!exist){
+            SceneJsonBean sceneJson = new SceneJsonBean();
+            BeanUtil.copyProperties(sceneEditInfoExt, sceneJson);
+            BeanUtil.copyProperties(sceneEditInfo, sceneJson);
+            SceneEditControlsVO sceneEditControlsVO = BeanUtil.copyProperties(sceneEditControls, SceneEditControlsVO.class);
+            sceneJson.setControls(sceneEditControlsVO);
+            sceneJson.setNum(num);
+            sceneJson.setCreateTime(scenePlus.getCreateTime());
+            sceneJson.setSceneResolution(scenePlusExt.getSceneResolution());
+            sceneJson.setSceneFrom(scenePlusExt.getSceneFrom());
+            sceneJson.setVideos(JSON.toJSONString(videosJson));
+            if(arrearCap) {
+                sceneJson.setPayStatus(PayStatus.NO_CAPACITY.code());
+            }
+
+            String sceneJsonStr = JSON.toJSONString(sceneJson);
+            //上传sceneJson文件
+            uploadToOssUtil.upload(sceneJsonStr.getBytes(), sceneJsonKey);
+            //scenejson写入缓存
+            redisUtil.set(String.format(RedisKey.SCENE_JSON, num), sceneJsonStr);
+        }
+
+        // TODO: 2022/4/21 plus版本稳定后删除------------------------------------------start
+        String localSceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, num);
+        String localSceneJson = FileUtils.readFile(localSceneJsonPath);
+        if(StrUtil.isNotEmpty(localSceneJson)){
+            JSONObject sceneJsonObject = JSON.parseObject(localSceneJson);
+            sceneJsonObject.put("videos", JSON.toJSONString(videosJson));
+            if(arrearCap) {
+                sceneJsonObject.put("payStatus", PayStatus.NO_CAPACITY.code());
+            }
+            FileUtils.writeFile(localSceneJsonPath, sceneJsonObject.toJSONString());
+        }
+        // TODO: 2022/4/21 plus版本稳定后删除------------------------------------------end
+
+    }
+
+    private void sendSms(Integer pushChannel, String pushToken, int cameraType, String sceneName, String webSite){
+        log.info("推送消息,渠道是 {}, 手机token是 {}", pushChannel, pushToken);
+        if(Objects.isNull(pushChannel) && StrUtil.isBlank(pushToken))
+            return;
+
+        try{
+            if(StorageType.AWS.code().equals(ossType)){
+                PushMsgUtil
+                    .googlePushMsg(ConstantFilePath.BASE_PATH + "/refreshToken.json", pushToken,
+                        sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite);
+                return;
+            }
+
+            PushMessageConfig demo = null;
+            if(pushChannel == 0){
+                if(cameraType == 10 || cameraType == 13){
+                    //ios
+                    log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY_Z, IOS_SECRET_Z);
+                    demo = new PushMessageConfig(IOS_KEY_Z, IOS_SECRET_Z);
+                    demo.sendIOSUnicast(pushToken,  "四维看看Minion",
+                        sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite);
+                }else {
+                    //ios
+                    log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY, IOS_SECRET);
+                    demo = new PushMessageConfig(IOS_KEY, IOS_SECRET);
+                    demo.sendIOSUnicast(pushToken, "四维看看Pro",
+                        sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite);
+                }
+            }else {
+                if(cameraType == 10 || cameraType == 13){
+                    //ios
+                    //安卓
+                    log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY_Z, ANDROID_SECRET_Z);
+                    demo = new PushMessageConfig(ANDROID_KEY_Z, ANDROID_SECRET_Z);
+                    demo.sendAndroidUnicast2(pushToken, "四维看看Minion",
+                        sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite);
+                }else {
+                    //安卓
+                    log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY, ANDROID_SECRET);
+                    demo = new PushMessageConfig(ANDROID_KEY, ANDROID_SECRET);
+                    demo.sendAndroidUnicast(pushToken, "四维看看Pro",
+                        sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite);
+                }
+            }
+            log.info("消息推送结束!");
+        }catch (Exception e){
+            log.error("推送消息失败:", e);
+        }
+    }
+
+    private void copyToEditDir(String num) throws IOException {
+
+        String editImagesPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
+        String viewImagesPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+
+        String editDataPath = String.format(UploadFilePath.DATA_EDIT_PATH, num);
+        String viewDataPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
+
+        Map<String, String> map = new HashMap<>();
+        map.put(editImagesPath + "vision.modeldata", viewImagesPath + "vision.modeldata");
+        map.put(editImagesPath + "vision2.modeldata", viewImagesPath + "vision2.modeldata");
+        map.put(editDataPath + "floorplan_cad.json", viewDataPath + "floorplan_cad.json");
+
+        for (Entry<String, String> entry : map.entrySet()) {
+            uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey());
+        }
+    }
+
+
+    private Map<String, String> uploadFileMapHandler(String num, int cameraType, Map<String, String> map) {
+        if(CollUtil.isEmpty(map)){
+            return null;
+        }
+
+        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 dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
+        String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+        String videosViewPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, num);
+
+        Map<String, String> newMap = new HashMap<>();
+        for (String key : map.keySet()) {
+            String value = map.get(key);
+            if(value.contains(dataPath)){
+                newMap.put(key, value.replace(dataPath, dataViewPath));
+            }
+            if(value.contains(imagePath)){
+                newMap.put(key, value.replace(imagePath, imgViewPath));
+            }
+            if(value.contains(videoPath)){
+                newMap.put(key, value.replace(videoPath, videosViewPath));
+            }
+        }
+        return newMap;
+    }
+
+    private JSONObject getVideosJson(String path, Integer videoVersion, String projectNum, int cameraType) throws Exception {
+        //读取videos_hdr_param.json, 保存点位视频的value
+        Map<String, Object> videoMap = new HashMap<>();
+        String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
+        JSONArray videoArray = null;
+        if(StringUtils.isNotEmpty(videosHdr)){
+            videoArray = JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
+        }
+        if(videoArray != null){
+            for(int i = 0, len = videoArray.size(); i < len; i++) {
+                videoMap.put(videoArray.getJSONObject(i).getString("name"), videoArray.getJSONObject(i).getString("value"));
+                if(videoArray.getJSONObject(i).containsKey("fov")){
+                    videoMap.put(videoArray.getJSONObject(i).getString("name") + "_fov", videoArray.getJSONObject(i).getString("fov"));
+                }
+            }
+        }
+
+        //获取upload中的video视频名称
+        String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
+        JSONObject uploadJson = null;
+        JSONArray array = null;
+        if(uploadData!=null) {
+            uploadJson = JSONObject.parseObject(uploadData);
+            array = uploadJson.getJSONArray("upload");
+        }
+        JSONObject fileJson = null;
+        String fileName = "";
+
+        //计算ts文件的大小,并拼接成json格式
+        JSONArray jsonArray = new JSONArray();
+        JSONObject videoJson = null;
+        JSONObject videosJson = new JSONObject();
+        long videoSize = 0L;
+        for(int i = 0, len = array.size(); i < len; i++) {
+            fileJson = array.getJSONObject(i);
+            fileName = fileJson.getString("file");
+            if(fileJson.getIntValue("clazz") == 11 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")){
+                videoJson = new JSONObject();
+                videoJson.put("id", fileName.substring(
+                    0, fileName.lastIndexOf(".")).replace("videos/", ""));
+
+                //如果ts文件存在,就计算ts大小
+                if(new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).exists()){
+                    videoSize = new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).length();
+                    videoJson.put("tsSize", videoSize);
+                }
+                if(videoMap.containsKey(videoJson.get("id"))){
+                    videoJson.put("value", videoMap.get(videoJson.get("id")));
+                }
+                if(videoMap.containsKey(videoJson.get("id") + "_fov")){
+                    videoJson.put("blend_fov", videoMap.get(videoJson.get("id") + "_fov"));
+                }else {
+                    videoJson.put("blend_fov", 7);
+                }
+                jsonArray.add(videoJson);
+            }
+        }
+
+        videosJson.put("data", jsonArray);
+        if(Objects.nonNull(videoVersion) && videoVersion >= 4){
+            videosJson.put("version", 3);
+            if(StorageType.OSS.code().equals(ossType)){
+                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up.xml");
+            }
+            if(StorageType.AWS.code().equals(ossType)){
+                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up.xml");
+            }
+            if(cameraType == 13){
+                //转台相机
+                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
+            }
+        }else {
+            videosJson.put("version", 1);
+            if("oss".equals(ossType)){
+                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up2.xml");
+            }
+            if("aws".equals(ossType)){
+                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up2.xml");
+            }
+
+            if(cameraType == 13){
+                //转台相机
+                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
+            }
+        }
+
+        if(cameraType == 5 || cameraType == 6){
+            videosJson.put("version", 1);
+            if("oss".equals(ossType)){
+                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/stitch_params.txt");
+            }
+            if("aws".equals(ossType)){
+                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/stitch_params.txt");
+            }
+        }
+
+        return videosJson;
+    }
+
+    private Long calUseSpace(Map<String, String> uploadFile) {
+        File spaceFile = null;
+        long space = 0L;
+        for (String key : uploadFile.keySet()) {
+            spaceFile = new File(key);
+            if(spaceFile.exists()){
+                space += spaceFile.length();
+            }
+        }
+        return space;
+    }
+
+    private void sealScene(boolean arrearCap, Long scenePlusId, Long sceneProId){
+        if(!arrearCap){
+            return;
+        }
+        scenePlusService.update(
+            new LambdaUpdateWrapper<ScenePlus>()
+                .set(ScenePlus::getPayStatus, PayStatus.NO_CAPACITY.code())
+                .eq(ScenePlus::getId, scenePlusId));
+
+
+        // TODO: 2022/3/22 plus版本稳定后删除---------------------------start
+        sceneProService.update(
+            new LambdaUpdateWrapper<ScenePro>()
+                .set(ScenePro::getPayStatus, PayStatus.NO_CAPACITY.code())
+                .eq(ScenePro::getId, sceneProId));
+        // TODO: 2022/3/22 plus版本稳定后删除---------------------------end
+    }
+
+    /**
+     * <p>
+     双目场景更新数据库
+     * </p>
+     * @author dengsixing
+     * @date 2022/3/21
+     * @param num
+     * @param space
+     **/
+    private void updateDb4Sm(String num, long space){
+        List<ScenePlus> ScenePlusList = scenePlusService.list(
+            new LambdaQueryWrapper<ScenePlus>()
+                .select(ScenePlus::getId)
+                .eq(ScenePlus::getNum, num));
+
+        if(CollUtil.isNotEmpty(ScenePlusList))
+            return ;
+        List<Long> sceneIds = ScenePlusList.stream().map(scene -> {
+            return scene.getId();
+        }).collect(Collectors.toList());
+
+        //更新场景创建时间
+        scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+            .in(ScenePlus::getId, sceneIds)
+            .set(ScenePlus::getCreateTime, Calendar.getInstance().getTime())
+            .set(ScenePlus::getSceneStatus, SceneStatus.NO_DISPLAY.code()));
+
+        //更新使用容量
+        scenePlusExtService.update(
+            new LambdaUpdateWrapper<ScenePlusExt>()
+                .in(ScenePlusExt::getPlusId, sceneIds)
+                .set(ScenePlusExt::getSpace, space));
+    }
+
+    private ScenePro updateDbPro(String sceneCode, Long space, Integer payStatus, String videosJson, Long computeTime, String fileId) throws Exception{
+        ScenePro scenePro = sceneProService.findBySceneNum(sceneCode);
+
+        sceneProService.updateTime(sceneCode, space, payStatus, videosJson, computeTime);
+        SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
+        if(sceneFileBuild != null){
+            sceneFileBuild.setBuildStatus(BuildStatus.success.code());
+            sceneFileBuildService.updateById(sceneFileBuild);
+        }
+
+        if(Objects.nonNull(scenePro)){
+            SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
+            SceneSource sceneSource = SceneSource.get(sceneProExt.getSceneSource());
+            switch (sceneSource){
+                case BM:
+                    sceneProExt.setSceneResolution(SceneResolution.TILES_2K.code());
+                    sceneProExt.setSceneFrom(SceneFrom.PRO.code());
+                    break;
+                case SM:
+                    sceneProExt.setSceneResolution(SceneResolution.TILES_1K.code());
+                    sceneProExt.setSceneFrom(SceneFrom.LITE.code());
+                    break;
+                case ZT:
+                    sceneProExt.setSceneResolution(SceneResolution.TILES_4K.code());
+                    sceneProExt.setSceneFrom(SceneFrom.MINION.code());
+                    break;
+                case JG:
+                    sceneProExt.setSceneResolution(SceneResolution.TILES_4K.code());
+                    sceneProExt.setSceneFrom(SceneFrom.LASER.code());
+                    break;
+            }
+            sceneProExtService.updateById(sceneProExt);
+
+        }
+
+        return scenePro;
+    }
+
+    private ScenePlus updateDbPlus(String num, Long space, Integer payStatus, String videosJson, Long computeTime, String fileId) throws Exception{
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        List<ScenePlus> list = scenePlusService.list(
+            new LambdaQueryWrapper<ScenePlus>()
+                .select(ScenePlus::getId)
+                .eq(ScenePlus::getNum, num));
+        if(scenePlus == null || CollUtil.isEmpty(list))
+            return null;
+
+        //修改场景状态 空间 支付状态 计算时间
+        List<Long> scenePlusIds = list.stream().map(plus -> {
+            return plus.getId();
+        }).collect(Collectors.toList());
+
+        scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
+            .in(ScenePlus::getId, scenePlusIds)
+            .set(ScenePlus::getSceneStatus, SceneStatus.NO_DISPLAY.code())
+            .set(ScenePlus::getCreateTime, Calendar.getInstance().getTime())
+            .set(ScenePlus::getPayStatus, payStatus));
+
+        scenePlusExtService.update(new LambdaUpdateWrapper<ScenePlusExt>()
+            .in(ScenePlusExt::getPlusId, scenePlusIds)
+            .set(ScenePlusExt::getSpace, space)
+            .set(ScenePlusExt::getComputeTime, computeTime)
+            .set(ScenePlusExt::getVideos, videosJson));
+
+        SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
+        if(sceneFileBuild != null){
+            sceneFileBuild.setBuildStatus(BuildStatus.success.code());
+            sceneFileBuildService.updateById(sceneFileBuild);
+        }
+
+        SceneSource sceneSource = SceneSource.get(scenePlus.getSceneSource());
+        switch (sceneSource){
+            case BM:
+                scenePlusExt.setSceneResolution(SceneResolution.TILES_2K.code());
+                scenePlusExt.setSceneFrom(SceneFrom.PRO.code());
+                break;
+            case SM:
+                scenePlusExt.setSceneResolution(SceneResolution.TILES_1K.code());
+                scenePlusExt.setSceneFrom(SceneFrom.LITE.code());
+                break;
+            case ZT:
+                scenePlusExt.setSceneResolution(SceneResolution.TILES_4K.code());
+                scenePlusExt.setSceneFrom(SceneFrom.MINION.code());
+                break;
+            case JG:
+                scenePlusExt.setSceneResolution(SceneResolution.TILES_4K.code());
+                scenePlusExt.setSceneFrom(SceneFrom.LASER.code());
+                break;
+        }
+        scenePlusExtService.updateById(scenePlusExt);
+
+
+        return scenePlus;
+    }
+
+    private boolean updateSpace(Long cameraId, Long space, Long scenePlusId, Long sceneProId) throws Exception{
+        //更新相机使用用量
+        CameraDetail cameraDetail = cameraDetailService.updateCameraDetailByCameraIdAndSpace(cameraId, space);
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
+        if( userIncrement == null || userIncrement.getIsExpired() == ExpiredStatus.Expired.code()) {
+            // 新上传的场景,如果总容量小于使用容量,则该大场景保留在临时存储空间30天
+            if (cameraDetail.getTotalSpace().compareTo(cameraDetail.getUsedSpace()) == -1){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private Object[] updateEditInfo(ScenePro scenePro, ScenePlus scenePlus){
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        SceneEditControls sceneEditControls = null;
+        SceneEditInfoExt sceneEditInfoExt = null;
+        if(sceneEditInfo == null){
+            sceneEditInfo = new SceneEditInfo();
+            sceneEditInfo.setScenePlusId(scenePlus.getId());
+            sceneEditInfo.setSceneProId(scenePro.getId());
+            sceneEditInfo.setDescription(scenePlus.getDescription());
+            sceneEditInfo.setTitle(scenePlus.getTitle());
+            sceneEditInfoService.save(sceneEditInfo);
+
+        }else{
+            sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId());
+            sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
+            sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
+            sceneEditInfoService.updateById(sceneEditInfo);
+        }
+        if(sceneEditControls == null){
+            sceneEditControls = new SceneEditControls();
+            sceneEditControls.setEditInfoId(sceneEditInfo.getId());
+            sceneEditControlsService.save(sceneEditControls);
+        }
+        if(sceneEditInfoExt == null){
+            sceneEditInfoExt = new SceneEditInfoExt();
+            sceneEditInfoExt.setScenePlusId(scenePlus.getId());
+            sceneEditInfoExt.setSceneProId(scenePro.getId());
+            sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
+            sceneEditInfoExtService.save(sceneEditInfoExt);
+        }
+        return new Object[]{sceneEditInfo, sceneEditInfoExt, sceneEditControls};
+    }
+
+    public void uploadHouseTypeJson(String num) throws IOException {
+
+        JSONObject result = new JSONObject();
+        result.put("name", "houseType.json");
+        result.put("version", "2.1");
+
+        String floorplanCadPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "floorplan_cad.json";
+        String floorcadStr = uploadToOssUtil.getObjectContent(this.bucket, floorplanCadPath);
+
+        JSONObject floorcadObj = JSON.parseObject(floorcadStr);
+        JSONArray floors = floorcadObj.getJSONArray("floors");
+
+        JSONArray targetFloors = new JSONArray();
+        result.put("floors", targetFloors);
+        for(int i = 0; i < floors.size(); i++){
+            JSONObject floor = (JSONObject)floors.get(i);
+            JSONArray[] pointsAndWalls = this.createHouseTypeJsonHandler(floor);
+            JSONArray points = pointsAndWalls[0];
+            JSONArray walls = pointsAndWalls[1];
+            JSONObject targetFloor = new JSONObject();
+            targetFloor.put("points", points);
+            targetFloor.put("walls", walls);
+            targetFloors.add(targetFloor);
+        }
+
+        String hourseTypeJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "houseType.json";
+        uploadToOssUtil.upload(result.toJSONString().getBytes(), hourseTypeJsonPath);
+
+        cn.hutool.core.io.FileUtil.writeString(result.toJSONString(), "F:\\test\\hourseType.json", StandardCharsets.UTF_8);
+    }
+
+    private JSONArray[] createHouseTypeJsonHandler(JSONObject floor){
+
+        JSONArray[] result = new JSONArray[2];
+
+        //处理点
+        Map<Integer, VertexBean> vertexMap = new HashMap<>();
+        Map<String, PointBean> pointMap = new HashMap<>();
+        Map<Integer, String> vpMap = new HashMap<>();
+        JSONArray vertexArr = floor.getJSONArray("vertex-xy");
+        for(int i = 0; i < vertexArr.size(); i++){
+            Object o = vertexArr.get(i);
+
+            VertexBean vertexBean = JSON.parseObject(JSON.toJSONString(o), VertexBean.class);
+            Integer vertexId = vertexBean.getId();
+            vertexMap.put(vertexId, vertexBean);
+
+            String pointId = "Point" + i;
+            pointMap.put(pointId, PointBean.builder().vectorId(pointId).x(vertexBean.getX()).y(vertexBean.getY()).build());
+
+            vpMap.put(vertexId, pointId);
+        }
+
+        //处理墙
+        Map<Integer, SegmentBean> segmentMap = new HashMap<>();
+        Map<String, WallBean> wallMap = new HashMap<>();
+        Map<Integer, String> swMap = new HashMap<>();
+        JSONArray segmentArr = floor.getJSONArray("segment");
+        Map<String, String> startMap = new HashMap<>();
+        Map<String, String> endMap = new HashMap<>();
+        for(int i = 0; i < segmentArr.size(); i++){
+            Object o = segmentArr.get(i);
+
+            SegmentBean segmentBean = JSON.parseObject(JSON.toJSONString(o), SegmentBean.class);
+            String startPointId = vpMap.get(segmentBean.getA());
+            String endPointId = vpMap.get(segmentBean.getB());
+            segmentBean.setStartPointId(startPointId);
+            segmentBean.setEndPointId(endPointId);
+
+            Integer segmentId = segmentBean.getId();
+            segmentMap.put(segmentId, segmentBean);
+
+            String wallId = "Wall" + i;
+            WallBean wallBean = WallBean.builder()
+                .vectorId(wallId)
+                .start(segmentBean.getStartPointId())
+                .end(segmentBean.getEndPointId())
+                .children(new String[]{})
+                .width(0.2d)
+                .build();
+            wallMap.put(wallId, wallBean);
+
+            startMap.put(wallBean.getStart(), wallBean.getVectorId());
+            endMap.put(wallBean.getEnd(), wallBean.getVectorId());
+
+            swMap.put(segmentId, wallId);
+        }
+
+        Collection<PointBean> pointBeans = pointMap.values();
+        for (PointBean pointBean : pointBeans) {
+            Map<String, String> parent = new HashMap<>();
+            String startParent = startMap.get(pointBean.getVectorId());
+            String endParent = endMap.get(pointBean.getVectorId());
+            parent.put(startParent, "start");
+            parent.put(endParent, "end");
+            pointBean.setParent(parent);
+        }
+        JSONArray pointArr = JSON.parseArray(JSON.toJSONString(pointBeans));
+        result[0] = pointArr;
+
+        Collection<WallBean> wallBeans = wallMap.values();
+        JSONArray wallArr = JSON.parseArray(JSON.toJSONString(wallBeans));
+        result[1] = wallArr;
+
+        return result;
+
+    }
+
+}

+ 154 - 0
src/main/java/com/fdkankan/contro/service/impl/BuildScenePreServiceImpl.java

@@ -0,0 +1,154 @@
+package com.fdkankan.contro.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.util.CreateObjUtil;
+import com.fdkankan.common.util.FileUtil;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.common.util.SceneUtil;
+import com.fdkankan.contro.service.IBuildScenePreService;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/1
+ **/
+@Slf4j
+@Service
+public class BuildScenePreServiceImpl implements IBuildScenePreService {
+
+    @Value("${model.timeOut:48}")
+    private int modelTimeOut;
+    @Value("${environment:dev}")
+    private String environment;
+    @Value("${queue.modeling.modeling-call}")
+    private String queueModelingCall;
+
+    @Autowired
+    UploadToOssUtil uploadToOssUtil;
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    private RabbitMqProducer mqProducer;
+
+    public static String hostName;
+
+
+    @Value("${hostName.filePath:/opt/hosts/hosts.txt}")
+    public void setHostName(String filePath){
+        try {
+            this.hostName = FileUtils.readFile(filePath);
+            log.error("从文件({})中获取服务器名称:{}", filePath,hostName);
+        } catch (Exception e) {
+            log.error("从文件中获取服务器名称失败,文件路径{}", filePath);
+            e.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public void buildScenePre(BuildSceneCallMessage message) {
+        boolean success = false;
+        try {
+            String key = String.format(RedisKey.SCENE_BUILDING, message.getSceneNum());
+            Long building = redisUtil.incr(key, 1);
+            if (building.compareTo(1L) != 0) {
+                log.info("场景正在构建中,退出构建,参数:{}", JSONObject.toJSONString(message));
+                return;
+            } else {
+                redisUtil.expire(key, Duration.of(modelTimeOut, ChronoUnit.HOURS));
+            }
+
+            //根据相机类型,组装资源路径
+            String path = SceneUtil.getPath(message.getPath(), message.getCameraName(),
+                message.getFileId(), Integer.parseInt(message.getCameraType()), message.getUnicode());
+
+            //下载资源到本地
+            this.downLoadSource(message, path);
+
+            //发送mq,就进行计算
+            mqProducer.sendByWorkQueue(queueModelingCall, message);
+
+            success = true;
+
+            log.info("场景计算资源准备结束,场景码:{}", message.getSceneNum());
+
+        }catch (Exception e){
+            log.error("场景计算前置处理出错", e);
+        }finally {
+            //如果前置处理失败,发送钉钉消息
+            if(!success){
+                String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
+//            buildSceneDTService.handFail("场景计算前置处理出错", serverPath, message.getSceneNum(), BuildScenePreServiceImpl.hostName, null);
+            }
+
+        }
+    }
+
+    @Override
+    public void downLoadSource(BuildSceneCallMessage buildSceneMqMessage,String path) throws Exception{
+        String cameraName = buildSceneMqMessage.getCameraName();
+        String fileId = buildSceneMqMessage.getFileId();
+        String unicode = buildSceneMqMessage.getUnicode();
+        int cameraType = Integer.parseInt(buildSceneMqMessage.getCameraType());
+        String prefix = buildSceneMqMessage.getPrefix();
+        String imgsName = buildSceneMqMessage.getImgsName();
+        if(cameraType < 3){
+            for(int i = 0;i<5;++i){
+                try{
+                    FileUtils.downLoadFromUrl(prefix+imgsName+"?m="+new Date().getTime(), imgsName,
+                        path + File.separator + "capture");
+                    FileUtils.decompress(path + File.separator + "capture" +File.separator+imgsName,
+                        path + File.separator + "capture") ;
+                    break;
+                }catch(Exception e){
+                    log.error(String.format("第%d次下载并解压资源失败", i+1),  e);
+                    if(i<4)
+                    {
+                        FileUtils.deleteFile(path + File.separator + "capture" +File.separator+imgsName);
+                        FileUtils.delFolder(path + File.separator + "capture" +File.separator+"images");
+                    }
+                    Thread.sleep(10000);
+                }
+            }
+            FileUtils.deleteFile(path + File.separator + "capture" +File.separator+"zip.Zip");
+        }else{
+            String ossPath = ConstantFilePath.OSS_PREFIX + cameraName.replace("4DKKPRO_", "")
+                .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
+                + unicode + File.separator;
+            if(cameraType == 5 || cameraType == 6){
+                path = ConstantFilePath.BUILD_MODEL_PATH + unicode;
+                //下载zip包
+                FileUtils.downLoadFromUrl(prefix + "/" + imgsName + "?m=" + System.currentTimeMillis(), imgsName, path + File.separator + "capture");
+                //解压
+                FileUtils.decompress(path + File.separator + "capture" + File.separator + imgsName,
+                    path + File.separator + "capture") ;
+                //删除压缩包
+                FileUtil.delFile(path + File.separator + "capture" + File.separator + imgsName);
+            }else if(cameraType == 14) {
+                CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
+            } else{
+                CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
+            }
+        }
+    }
+
+}

+ 56 - 0
src/main/java/com/fdkankan/contro/service/impl/CameraDetailServiceImpl.java

@@ -0,0 +1,56 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.TbStatus;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.contro.dto.CameraDetail;
+import com.fdkankan.contro.mapper.ICameraDetailMapper;
+import com.fdkankan.contro.service.ICameraDetailService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 相机子表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Service
+public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, CameraDetail> implements ICameraDetailService {
+
+    @Override
+    public CameraDetail getByCameraId(Long cameraId) {
+        QueryWrapper<CameraDetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CameraDetail :: getTbStatus,TbStatus.VALID.code());
+        queryWrapper.lambda().eq(CameraDetail :: getCameraId,cameraId);
+        List<CameraDetail> list = this.list(queryWrapper);
+        if(list == null || list.size()<=0){
+            return null;
+        }
+        return list.get(0);
+    }
+
+
+    @Override
+    public CameraDetail updateCameraDetailByCameraIdAndSpace(Long cameraId, Long space) {
+        CameraDetail cameraDetail = this.getByCameraId(cameraId);
+        if(Objects.isNull(cameraDetail)){
+            return null;
+        }
+        cameraDetail.setUsedSpace(cameraDetail.getUsedSpace() + space);
+        if(cameraDetail.getUsedSpace() < 0){
+            cameraDetail.setUsedSpace(0L);
+        }
+        if(!this.updateById(cameraDetail)){
+            throw new BusinessException(ErrorCode.ERROR_MSG);
+        }
+        return cameraDetail;
+    }
+
+}

+ 50 - 0
src/main/java/com/fdkankan/contro/service/impl/CameraServiceImpl.java

@@ -0,0 +1,50 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.TbStatus;
+import com.fdkankan.contro.dto.Camera;
+import com.fdkankan.contro.mapper.ICameraMapper;
+import com.fdkankan.contro.service.ICameraService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Service
+public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
+
+    @Override
+    public Camera getByChildName(String childName){
+        QueryWrapper<Camera> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(Camera::getTbStatus,TbStatus.VALID.code());
+        queryWrapper.lambda().eq(Camera::getChildName,childName);
+        return this.getEntityByQuery(queryWrapper);
+    }
+
+
+    @Override
+    public Camera getBySnCode(String snCode) {
+        QueryWrapper<Camera> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(Camera::getTbStatus,TbStatus.VALID.code());
+        queryWrapper.lambda().eq(Camera::getSnCode,snCode);
+        return this.getEntityByQuery(queryWrapper);
+    }
+
+
+    private Camera getEntityByQuery(QueryWrapper<Camera> queryWrapper ){
+        List<Camera> list = this.list(queryWrapper);
+        if(list == null || list.size() <= 0){
+            return null;
+        }
+        return list.get(0);
+    }
+
+}

+ 32 - 0
src/main/java/com/fdkankan/contro/service/impl/CameraSpaceServiceImpl.java

@@ -0,0 +1,32 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.contro.entity.CameraSpace;
+import com.fdkankan.contro.mapper.ICameraSpaceMapper;
+import com.fdkankan.contro.service.ICameraSpaceService;
+import com.fdkankan.contro.vo.ResponseCameraSpace;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 相机容量表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Service
+public class CameraSpaceServiceImpl extends ServiceImpl<ICameraSpaceMapper, CameraSpace> implements ICameraSpaceService {
+
+    @Resource
+    private ICameraSpaceMapper cameraSpaceMapper;
+
+    @Override
+    public List<ResponseCameraSpace> getVoListByCameraId(Long cameraId) {
+        return cameraSpaceMapper.getVoListByCameraId(cameraId);
+    }
+
+}

+ 21 - 0
src/main/java/com/fdkankan/contro/service/impl/CompanyServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fdkankan.contro.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.contro.entity.Company;
+import com.fdkankan.contro.mapper.ICompanyMapper;
+import com.fdkankan.contro.service.ICompanyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 客户企业logo信息 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Service
+public class CompanyServiceImpl extends ServiceImpl<ICompanyMapper, Company> implements ICompanyService {
+
+
+}

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


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio