Browse Source

全宗名称

lyhzzz 1 năm trước cách đây
mục cha
commit
4701537fd3
54 tập tin đã thay đổi với 1978 bổ sung25 xóa
  1. 15 1
      pom.xml
  2. 1 0
      src/main/java/com/fdkankan/fusion/common/FilePath.java
  3. 10 0
      src/main/java/com/fdkankan/fusion/common/PageInfo.java
  4. 3 1
      src/main/java/com/fdkankan/fusion/common/ResultCode.java
  5. 21 0
      src/main/java/com/fdkankan/fusion/common/enums/DownloadStatusEnum.java
  6. 13 0
      src/main/java/com/fdkankan/fusion/common/util/CameraUtil.java
  7. 3 0
      src/main/java/com/fdkankan/fusion/common/util/LocalToOssUtil.java
  8. 3 0
      src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java
  9. 5 3
      src/main/java/com/fdkankan/fusion/config/SaTokenConfigure.java
  10. 1 1
      src/main/java/com/fdkankan/fusion/controller/LoginController.java
  11. 66 0
      src/main/java/com/fdkankan/fusion/controller/SceneDownLogController.java
  12. 84 0
      src/main/java/com/fdkankan/fusion/entity/Camera.java
  13. 168 0
      src/main/java/com/fdkankan/fusion/entity/CameraDetail.java
  14. 129 0
      src/main/java/com/fdkankan/fusion/entity/SceneDownLog.java
  15. 201 0
      src/main/java/com/fdkankan/fusion/entity/SceneEditInfo.java
  16. 120 0
      src/main/java/com/fdkankan/fusion/entity/ScenePlus.java
  17. 193 0
      src/main/java/com/fdkankan/fusion/entity/ScenePlusExt.java
  18. 68 0
      src/main/java/com/fdkankan/fusion/httpClient/LaserService.java
  19. 16 0
      src/main/java/com/fdkankan/fusion/httpClient/client/LaserClient.java
  20. 8 0
      src/main/java/com/fdkankan/fusion/httpClient/request/SSDownSceneParam.java
  21. 10 0
      src/main/java/com/fdkankan/fusion/httpClient/response/SSDownSceneVo.java
  22. 21 0
      src/main/java/com/fdkankan/fusion/mapper/ICameraDetailMapper.java
  23. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ICameraMapper.java
  24. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ISceneDownLogMapper.java
  25. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ISceneEditInfoMapper.java
  26. 18 0
      src/main/java/com/fdkankan/fusion/mapper/IScenePlusExtMapper.java
  27. 22 0
      src/main/java/com/fdkankan/fusion/mapper/IScenePlusMapper.java
  28. 20 0
      src/main/java/com/fdkankan/fusion/request/SceneDownLogParam.java
  29. 2 0
      src/main/java/com/fdkankan/fusion/request/ScenePram.java
  30. 9 0
      src/main/java/com/fdkankan/fusion/response/DownVo.java
  31. 12 0
      src/main/java/com/fdkankan/fusion/response/DownloadProcessVo.java
  32. 18 0
      src/main/java/com/fdkankan/fusion/service/ICameraDetailService.java
  33. 17 0
      src/main/java/com/fdkankan/fusion/service/ICameraService.java
  34. 14 0
      src/main/java/com/fdkankan/fusion/service/IDownService.java
  35. 20 0
      src/main/java/com/fdkankan/fusion/service/ISceneDownLogService.java
  36. 17 0
      src/main/java/com/fdkankan/fusion/service/ISceneEditInfoService.java
  37. 16 0
      src/main/java/com/fdkankan/fusion/service/IScenePlusExtService.java
  38. 21 0
      src/main/java/com/fdkankan/fusion/service/IScenePlusService.java
  39. 24 0
      src/main/java/com/fdkankan/fusion/service/impl/CameraDetailServiceImpl.java
  40. 26 0
      src/main/java/com/fdkankan/fusion/service/impl/CameraServiceImpl.java
  41. 279 0
      src/main/java/com/fdkankan/fusion/service/impl/DownService.java
  42. 86 0
      src/main/java/com/fdkankan/fusion/service/impl/SceneDownLogServiceImpl.java
  43. 29 0
      src/main/java/com/fdkankan/fusion/service/impl/SceneEditInfoServiceImpl.java
  44. 22 0
      src/main/java/com/fdkankan/fusion/service/impl/ScenePlusExtServiceImpl.java
  45. 34 0
      src/main/java/com/fdkankan/fusion/service/impl/ScenePlusServiceImpl.java
  46. 1 1
      src/main/java/com/fdkankan/fusion/service/impl/SceneService.java
  47. 8 3
      src/main/java/com/fdkankan/fusion/service/impl/UploadService.java
  48. 18 15
      src/main/resources/application.yaml
  49. 6 0
      src/main/resources/mapper/fusion/CameraDetailMapper.xml
  50. 5 0
      src/main/resources/mapper/fusion/CameraMapper.xml
  51. 5 0
      src/main/resources/mapper/fusion/SceneDownLogMapper.xml
  52. 5 0
      src/main/resources/mapper/fusion/SceneEditInfoMapper.xml
  53. 5 0
      src/main/resources/mapper/fusion/ScenePlusExtMapper.xml
  54. 6 0
      src/main/resources/mapper/fusion/ScenePlusMapper.xml

+ 15 - 1
pom.xml

@@ -38,6 +38,19 @@
             <version>3.4.3.4</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.5.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.22</version>
+        </dependency>
+
+
         <!--mybatis-plus代码生成器-->
         <dependency>
             <groupId>com.baomidou</groupId>
@@ -128,10 +141,11 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-captcha</artifactId>
-            <version>5.8.6</version>
+            <version>5.8.29</version>
         </dependency>
 
 
+
     </dependencies>
 
     <build>

+ 1 - 0
src/main/java/com/fdkankan/fusion/common/FilePath.java

@@ -4,6 +4,7 @@ public class FilePath {
 
     public final static String LOCAL_BASE_PATH = "/mnt/fusion/";
     public final static String MNT_BASE_PATH = "/mnt/fusion/";
+    public final static String MNT_PATH_TMP = "/mnt/fusion/tmp/";
 
     public final static String OBJ_OSS_PATH = "scene_view_data/%s/data/mesh";
     public final static String GLB_OSS_PATH = "fusion/%s/model/glb/%s/mesh.glb";

+ 10 - 0
src/main/java/com/fdkankan/fusion/common/PageInfo.java

@@ -6,6 +6,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -30,6 +31,15 @@ public class PageInfo<T> {
             .list(page.getRecords())
             .build();
     }
+
+    public static PageInfo PageInfoEmpty(){
+        return PageInfo.builder()
+                .pageNum(1)
+                .pageSize(10)
+                .total(0)
+                .list(new ArrayList<>())
+                .build();
+    }
     public static PageInfo PageInfo(Long currentPage, Long pageSize, Long total, List<?> list){
         return PageInfo.builder()
             .pageNum(currentPage)

+ 3 - 1
src/main/java/com/fdkankan/fusion/common/ResultCode.java

@@ -46,6 +46,7 @@ public enum ResultCode {
     UPLOAD_ERROR(7001,"文件上传失败"),
     UPLOAD_FILE_NO_EXIST(7002,"上传文件不存在"),
     UPLOAD_FILE_TO_LONG(7003,"文件上传过大"),
+    HOT_ICON_NOT_EXIST(7004,"热点icon不存在"),
     UPLOAD_FILE_TYPE_ERROR(7005,"文件类型错误"),
     UPLOAD_FILE_MSG_ERROR(7006,"文件内容错误"),
     UPLOAD_FILE_OBJ_ERROR(7007,"文件内容错误,缺少obj,或者mtl文件"),
@@ -62,7 +63,8 @@ public enum ResultCode {
     SCENE_DATA_SOURCE_EMPTY(7018,"场景资源文件为空,无法添加"),
     CASE_HAVE_SETTINGS(7019,"案件已有设置,无法新增"),
 
-    HOT_ICON_NOT_EXIST(7004,"热点icon不存在");
+    SS_SCENE_DOWN_ERROR(7020,"深时点云场景下载失败"),
+    FILE_NOT_EXIST(7021,"文件不存在,或已被刪除");
 
     public int code;
     public String msg;

+ 21 - 0
src/main/java/com/fdkankan/fusion/common/enums/DownloadStatusEnum.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.common.enums;
+
+public enum DownloadStatusEnum {
+    DOWNLOADING(1000, "文件正在下载"),
+    DOWNLOAD_COMPRESSING(1001, "文件正在压缩"),
+    DOWNLOAD_SUCCESS(1002, "文件压缩成功/下载处理成功"),
+    DOWNLOAD_FAILED(1003, "下载处理失败");
+
+    public static final int DOWNLOADING_CODE = 1000;
+    public static final int DOWNLOAD_COMPRESSING_CODE = 1001;
+    public static final int DOWNLOAD_SUCCESS_CODE = 1002;
+    public static final int DOWNLOAD_FAILED_CODE = 1003;
+
+    private int status;
+    private String desc;
+
+    DownloadStatusEnum(int status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+}

+ 13 - 0
src/main/java/com/fdkankan/fusion/common/util/CameraUtil.java

@@ -0,0 +1,13 @@
+package com.fdkankan.fusion.common.util;
+
+public class CameraUtil {
+
+    public static String getCameraNameByType(Integer sceneSource){
+        switch (sceneSource){
+            case 3 : return "双目转台";
+            case 4 : return "激光转台";
+            case 5 : return "激光移动";
+            default: return "八目";
+        }
+    }
+}

+ 3 - 0
src/main/java/com/fdkankan/fusion/common/util/LocalToOssUtil.java

@@ -2,10 +2,12 @@ package com.fdkankan.fusion.common.util;
 
 import cn.hutool.core.io.FileUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.io.File;
+import java.nio.charset.Charset;
 import java.util.Map;
 
 @Component
@@ -46,6 +48,7 @@ public class LocalToOssUtil {
                 return null;
             }
             FileUtil.copy(filePath, getOssPath(bucket, remoteFilePath), true);
+            //FileUtils.contentEqualsIgnoreEOL(new File(filePath),new File(getOssPath(bucket, remoteFilePath)), "UTF-8");
         }catch (Exception e){
             log.error("上传文件失败,filePath:{},remoteFilePath:{}", filePath, remoteFilePath);
             log.error("上传文件失败", e);

+ 3 - 0
src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java

@@ -2,6 +2,7 @@ package com.fdkankan.fusion.common.util;
 
 public class RedisKeyUtil {
 
+
     public static Long tokenTime = 2 * 60 * 60L;
     public static Long projectRandCodeKeyTime = 14 * 24 * 60 * 60L ;
     public static String mergerVideoKey = "fusion:merger:video:";
@@ -17,4 +18,6 @@ public class RedisKeyUtil {
 
 
     public static String loginAuthCode = "fusion:login:auth:%s";
+
+    public static final String SCENE_VERSION = "scenejson:num:%s";
 }

+ 5 - 3
src/main/java/com/fdkankan/fusion/config/SaTokenConfigure.java

@@ -51,11 +51,13 @@ public class SaTokenConfigure {
                     if(StringUtils.isNotBlank(share) && "1".equals(share)){ //分享请求头
                         return;
                     }
+                    SaRouter.match("/sceneDownLog/list", r -> StpUtil.checkRole("admin-super"));
+
                     // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
                     SaRouter.match("/**", "/fdLogin", r ->checkLogin() );
                     String menu = redisUtil.get(RedisKey.MANAGE_MENU);
                     if(StringUtils.isBlank(menu)){
-                        SaRouter.match("/**", r -> StpUtil.checkRole("super-admin"));
+                        SaRouter.match("/**", r -> StpUtil.checkRole("admin-super"));
                         return;
                     }
 
@@ -67,7 +69,7 @@ public class SaTokenConfigure {
                         if(StringUtils.isEmpty(url) || StringUtils.isEmpty(perm)){
                             continue;
                         }
-                        if(StpUtil.hasRole("super-admin")){
+                        if(StpUtil.hasRole("admin-super")){
                             continue;
                         }
                         SaRouter.match(url, r -> StpUtil.checkPermission(perm));
@@ -84,7 +86,7 @@ public class SaTokenConfigure {
                     }
                     else if(e instanceof NotRoleException) {		// 如果是角色异常
                         NotRoleException ee = (NotRoleException) e;
-                        aj =  ResultData.error(ResultCode.NOT_ROLE);
+                        aj =  ResultData.error(ResultCode.NOT_PERMISSION);
                     }
                     else if(e instanceof NotPermissionException) {	// 如果是权限异常
                         NotPermissionException ee = (NotPermissionException) e;

+ 1 - 1
src/main/java/com/fdkankan/fusion/controller/LoginController.java

@@ -87,7 +87,7 @@ public class LoginController extends BaseController{
                     //.setExtra("fdToken",data.getToken())
                     .setExtra("userName",data.getUser().getUserName())
                     .setExtra("deptId",tmUser.getDeptId())
-                    .setExtra("nickName",data.getUser().getNickName()));
+                    .setExtra("nickName",tmUser.getNickName()));
             data.setFdToken(data.getToken());
             data.setToken(StpUtil.getTokenValue());
             tmUserService.setRoleAndPermToRedis(tmUser);

+ 66 - 0
src/main/java/com/fdkankan/fusion/controller/SceneDownLogController.java

@@ -0,0 +1,66 @@
+package com.fdkankan.fusion.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.request.SceneDownLogParam;
+import com.fdkankan.fusion.service.IDownService;
+import com.fdkankan.fusion.service.ISceneDownLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@RestController
+@RequestMapping("/sceneDownLog")
+public class SceneDownLogController extends BaseController{
+
+    @Autowired
+    ISceneDownLogService sceneDownLogService;
+    @Autowired
+    IDownService downService;
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody SceneDownLogParam param){
+
+        return ResultData.ok(sceneDownLogService.pageList(param));
+    }
+
+
+    /**
+     * 检查下载
+     * num      场景码
+     */
+    @GetMapping("/checkDownLoad")
+    public ResultData checkDownLoad(@RequestParam(required = false) String num,
+                                    @RequestParam(required = false,defaultValue = "0") Integer isObj){
+        return ResultData.ok(downService.checkDownLoad(num,isObj));
+    }
+
+    /**
+     * 下载场景
+     * num      场景码
+     */
+    @GetMapping("/downScene")
+    public ResultData downScene(@RequestParam(required = false) String num,
+                                @RequestParam(required = false,defaultValue = "0") Integer isObj){
+        return ResultData.ok(downService.down(num,isObj));
+    }
+
+    /**
+     * 下载场景进度条
+     * num      场景码
+     */
+    @GetMapping("/downloadProcess")
+    public ResultData downloadProcess(@RequestParam(required = false) String num,
+                                      @RequestParam(required = false,defaultValue = "0") Integer isObj){
+        return ResultData.ok(downService.downloadProcess(num,isObj));
+    }
+}
+

+ 84 - 0
src/main/java/com/fdkankan/fusion/entity/Camera.java

@@ -0,0 +1,84 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 相机主表
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Getter
+@Setter
+@TableName("t_camera")
+public class Camera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机的Mac地址
+     */
+    @TableField("child_name")
+    private String childName;
+
+    /**
+     * 激活时间
+     */
+    @TableField("activated_time")
+    private Date activatedTime;
+
+    /**
+     * 相机密码
+     */
+    @TableField("child_password")
+    private String childPassword;
+
+    /**
+     * sn码
+     */
+    @TableField("sn_code")
+    private String snCode;
+
+    /**
+     * wifi名称
+     */
+    @TableField("wifi_name")
+    private String wifiName;
+
+    /**
+     * wifi密码
+     */
+    @TableField("wifi_password")
+    private String wifiPassword;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 168 - 0
src/main/java/com/fdkankan/fusion/entity/CameraDetail.java

@@ -0,0 +1,168 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 相机子表
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Getter
+@Setter
+@TableName("t_camera_detail")
+public class CameraDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 余额
+     */
+    @TableField("balance")
+    private String balance;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 0表示客户,1表示员工,2表示赠送,3表示其他,4经销商销售
+     */
+    @TableField("own")
+    private Integer own;
+
+    /**
+     * 订单号
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 0表示本国,1表示国外
+     */
+    @TableField("country")
+    private Integer country;
+
+    /**
+     * 经销商
+     */
+    @TableField("agency")
+    private String agency;
+
+    /**
+     * 相机类型,0表示双目,1四维看看pro,2 四维看看lite,9 双目转台,10 激光转台
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 总容量
+     */
+    @TableField("total_space")
+    private Long totalSpace;
+
+    /**
+     * 已使用容量
+     */
+    @TableField("used_space")
+    private Long usedSpace;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 商品表t_goods的id
+     */
+    @TableField("goods_id")
+    private Long goodsId;
+
+    /**
+     * 企业表t_company的id
+     */
+    @TableField("company_id")
+    private Long companyId;
+
+    /**
+     * 代理商架构管理t_agent_framework的id
+     */
+    @TableField("agent_framework_id")
+    private Long agentFrameworkId;
+
+    /**
+     * 相机协作用户id
+     */
+    @TableField("cooperation_user")
+    private Long cooperationUser;
+
+    /**
+     * 设备地址(追溯管理后台)
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("user_camera_version")
+    private String userCameraVersion;
+
+    @TableField("app_version")
+    private String appVersion;
+
+    @TableField("last_request_time")
+    private Date lastRequestTime;
+
+    @TableField("out_time")
+    private Date outTime;
+
+    /**
+     * 代理商id
+     */
+    @TableField("agent_id")
+    private Integer agentId;
+
+    /**
+     * 购买时间
+     */
+    @TableField("buy_date")
+    private Date buyDate;
+
+    /**
+     * 相机容量单位,GB ,SP
+     */
+    @TableField("unit")
+    private String unit;
+
+
+}

+ 129 - 0
src/main/java/com/fdkankan/fusion/entity/SceneDownLog.java

@@ -0,0 +1,129 @@
+package com.fdkankan.fusion.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 jdk.nashorn.internal.ir.annotations.Ignore;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Getter
+@Setter
+@TableName("t_scene_down_log")
+public class SceneDownLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 下载场景记录表
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 场景码
+     */
+    @TableField("scene_num")
+    private String sceneNum;
+
+    /**
+     * 场景标题
+     */
+    @TableField("scene_title")
+    private String sceneTitle;
+
+    /**
+     * 用户账号
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 场景相机sn
+     */
+    @TableField("sn_code")
+    private String snCode;
+
+    /**
+     * 组织名称
+     */
+    @TableField("dept_name")
+    private String deptName;
+
+    /**
+     * 组织类型
+     */
+    @TableField("dept_level")
+    private Integer deptLevel;
+
+    /**
+     * 组织类型
+     */
+    @TableField(exist = false)
+    private String deptLevelStr;
+
+    /**
+     * 组织id
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 0下载中,1下载完成,2下载失败
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 场景版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    @TableField("down_url")
+    private String downUrl;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+    public String getDeptLevelStr() {
+        if(deptLevel != null){
+            switch (deptLevel){
+                case 0 : return "平台";
+                case 1 : return "总队";
+                case 2 : return "支队";
+                case 3 : return "大队";
+                default: return "";
+            }
+        }
+        return deptLevelStr;
+    }
+
+}

+ 201 - 0
src/main/java/com/fdkankan/fusion/entity/SceneEditInfo.java

@@ -0,0 +1,201 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@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;
+
+    /**
+     * 用户是否上传户型图(0-否,1-是)
+     */
+    @TableField("floor_plan_user")
+    private Integer floorPlanUser;
+
+    /**
+     * 是否有热点数据(0-否,1-是)
+     */
+    @TableField("tags")
+    private Integer tags;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 图片版本
+     */
+    @TableField("img_version")
+    private Integer imgVersion;
+
+    /**
+     * 场景关联版本
+     */
+    @TableField("link_version")
+    private Integer linkVersion;
+
+    /**
+     * 是否上传模型
+     */
+    @TableField("is_upload_obj")
+    private Integer 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("box_models")
+    private String boxModels;
+
+    /**
+     * 是否需要处理球幕视频
+     */
+    @TableField("build_video_status")
+    private Integer buildVideoStatus;
+
+    /**
+     * 初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 加载logo名
+     */
+    @TableField("loading_logo")
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    @TableField("loading_logo_file")
+    private String loadingLogoFile;
+
+    /**
+     * 用户上传自定义平面图数据
+     */
+    @TableField("floor_plan_upload")
+    private String floorPlanUpload;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 120 - 0
src/main/java/com/fdkankan/fusion/entity/ScenePlus.java

@@ -0,0 +1,120 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 场景主表
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@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;
+
+    /**
+     * 是否有housetype文件(0-否,1-是)
+     */
+    @TableField("house_type")
+    private Integer houseType;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 193 - 0
src/main/java/com/fdkankan/fusion/entity/ScenePlusExt.java

@@ -0,0 +1,193 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@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("orig_space")
+    private Long origSpace;
+
+    /**
+     * 云服务器类型
+     */
+    @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;
+
+    /**
+     * 分辨率(2k,4k)
+     */
+    @TableField("scene_resolution")
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    @TableField("scene_from")
+    private String sceneFrom;
+
+    /**
+     * 切图方式(tiles:瓦片图,face:切片图,pano:全景图 ,local:本地切片,cube:立体图)
+     */
+    @TableField("scene_kind")
+    private String sceneKind;
+
+    /**
+     * 算法生成模型类型(dam,3dtiles)
+     */
+    @TableField("model_kind")
+    private String modelKind;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * oss桶名
+     */
+    @TableField("yun_file_bucket")
+    private String yunFileBucket;
+
+    /**
+     * 算法计算完成时间
+     */
+    @TableField("algorithm_time")
+    private Date algorithmTime;
+
+    /**
+     * 计算耗时
+     */
+    @TableField("compute_time")
+    private Long computeTime;
+
+    /**
+     * 拍摄模式:3(SFM架站式-看看场景), 
+ 
+4(SFM架站式-看见/深时/深光场景),
+5(SLAM移动定位模式) , 
+6(SLAM移动定位模式-有点位)
+     */
+    @TableField("location")
+    private Integer location;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("is_obj")
+    private Integer isObj;
+
+
+}

+ 68 - 0
src/main/java/com/fdkankan/fusion/httpClient/LaserService.java

@@ -0,0 +1,68 @@
+package com.fdkankan.fusion.httpClient;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.fusion.httpClient.client.LaserClient;
+import com.fdkankan.fusion.httpClient.request.SSDownSceneParam;
+import com.fdkankan.fusion.httpClient.response.FdkkResponse;
+import com.fdkankan.fusion.httpClient.response.SSDownSceneVo;
+import com.fdkankan.redis.util.RedisUtil;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class LaserService {
+
+   @Autowired
+   LaserClient laserClient;
+
+    public SSDownSceneVo downOfflineSceneStatus(String num) {
+        try {
+            SSDownSceneVo vo ;
+            SSDownSceneParam param = new SSDownSceneParam();
+            param.setSceneCode(num);
+            FdkkResponse responseEntity = laserClient.downOfflineSceneStatus(param);
+            if( responseEntity.getCode() != HttpStatus.OK.value()){
+                log.error("downOfflineSceneStatus-根据场景码获取激光转台下载状态失败:{}",responseEntity);
+                return null;
+            }
+            vo = JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getData()), SSDownSceneVo.class);
+            return vo;
+
+        }catch (Exception e){
+            log.error("downOfflineSceneStatus-根据场景码获取激光转台下载状态失败!",e);
+        }
+        return null ;
+    }
+
+    public SSDownSceneVo downOfflineScene(String num) {
+        try {
+            SSDownSceneVo vo ;
+            SSDownSceneParam param = new SSDownSceneParam();
+            param.setSceneCode(num);
+            FdkkResponse responseEntity = laserClient.downOfflineScene(param);
+            if( responseEntity.getCode() != HttpStatus.OK.value()){
+                log.error("downOfflineScene-根据场景码获取激光转台下载失败:{}",responseEntity);
+                return null;
+            }
+            vo = JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getData()), SSDownSceneVo.class);
+            return vo ;
+        }catch (Exception e){
+            log.error("downOfflineScene-根据场景码获取激光转台下载状态失败!",e);
+        }
+        return null ;
+    }
+
+}

+ 16 - 0
src/main/java/com/fdkankan/fusion/httpClient/client/LaserClient.java

@@ -6,6 +6,7 @@ import com.dtflys.forest.annotation.JSONBody;
 import com.dtflys.forest.annotation.Post;
 import com.fdkankan.fusion.httpClient.address.LaserAddressSource;
 import com.fdkankan.fusion.httpClient.request.LaserSceneParam;
+import com.fdkankan.fusion.httpClient.request.SSDownSceneParam;
 import com.fdkankan.fusion.httpClient.response.FdkkResponse;
 import com.fdkankan.fusion.request.ScenePram;
 
@@ -33,4 +34,19 @@ public interface LaserClient {
 
     @Post("/laser/4dage/sceneDetail")
     FdkkResponse sceneDetail(@JSONBody LaserSceneParam param, @Header ("fdToken") String fdToken);
+
+
+    /**
+     * 下载深时场景
+     * status :0:正在生成 1,初次生成  2,已经生成直接下载 3,重新生成
+     */
+    @Post("/laser/4dage/downOfflineScene")
+    FdkkResponse downOfflineScene(@JSONBody SSDownSceneParam param) ;
+    /**
+     * 检测深时场景是否需要重新生成
+     *
+     * status :离线包状态是否需要重新生成 0未生成,1 不需要 2需要
+     */
+    @Post("/laser/4dage/downOfflineSceneStatus")
+    FdkkResponse downOfflineSceneStatus(@JSONBody SSDownSceneParam param) ;
 }

+ 8 - 0
src/main/java/com/fdkankan/fusion/httpClient/request/SSDownSceneParam.java

@@ -0,0 +1,8 @@
+package com.fdkankan.fusion.httpClient.request;
+
+import lombok.Data;
+
+@Data
+public class SSDownSceneParam {
+    private String sceneCode;
+}

+ 10 - 0
src/main/java/com/fdkankan/fusion/httpClient/response/SSDownSceneVo.java

@@ -0,0 +1,10 @@
+package com.fdkankan.fusion.httpClient.response;
+
+import lombok.Data;
+
+@Data
+public class SSDownSceneVo {
+                                //离线包状态是否需要重新生成 1 不需要 2需要
+    private Integer status;     //0:正在生成 1,初次生成  2,已经生成直接下载 3,重新生成
+    private String url;         //下载地址
+}

+ 21 - 0
src/main/java/com/fdkankan/fusion/mapper/ICameraDetailMapper.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.CameraDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机子表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Mapper
+public interface ICameraDetailMapper extends BaseMapper<CameraDetail> {
+
+}

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

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

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ISceneDownLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.SceneDownLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Mapper
+public interface ISceneDownLogMapper extends BaseMapper<SceneDownLog> {
+
+}

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

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

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

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

+ 22 - 0
src/main/java/com/fdkankan/fusion/mapper/IScenePlusMapper.java

@@ -0,0 +1,22 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.ScenePlus;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Mapper
+public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
+
+
+}

+ 20 - 0
src/main/java/com/fdkankan/fusion/request/SceneDownLogParam.java

@@ -0,0 +1,20 @@
+package com.fdkankan.fusion.request;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+@Data
+public class SceneDownLogParam extends RequestBase {
+
+    private String deptId;
+    private String userName;
+    private String nickName;
+    private String createTime;
+    private String sceneTitle;
+    private String sceneNum;
+    private String snCode;
+
+    private String startCreateTime;
+    private String endCreateTime;
+
+}

+ 2 - 0
src/main/java/com/fdkankan/fusion/request/ScenePram.java

@@ -21,6 +21,8 @@ public class ScenePram extends RequestBase {
 
     private String share;
 
+    private String num;
+
     public String getSceneName() {
         return sceneName== null ?null :sceneName.trim();
     }

+ 9 - 0
src/main/java/com/fdkankan/fusion/response/DownVo.java

@@ -0,0 +1,9 @@
+package com.fdkankan.fusion.response;
+
+import lombok.Data;
+
+@Data
+public class DownVo {
+    private Integer downloadStatus = 0;     //0未下载过,1打包资源下载,2已下载过,3下载过,并且没有修改过,无需打包直接返回下载地址,-1没下载次数不足
+    private String downloadUrl;         //下载连击
+}

+ 12 - 0
src/main/java/com/fdkankan/fusion/response/DownloadProcessVo.java

@@ -0,0 +1,12 @@
+package com.fdkankan.fusion.response;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class DownloadProcessVo {
+    private Integer status = 1000;
+    private String url;
+    private Integer percent = 0;
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/service/ICameraDetailService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.CameraDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机子表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+public interface ICameraDetailService extends IService<CameraDetail> {
+
+}

+ 17 - 0
src/main/java/com/fdkankan/fusion/service/ICameraService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.Camera;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 相机主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+public interface ICameraService extends IService<Camera> {
+
+    Camera getByCameraId(Long cameraId);
+}

+ 14 - 0
src/main/java/com/fdkankan/fusion/service/IDownService.java

@@ -0,0 +1,14 @@
+package com.fdkankan.fusion.service;
+
+
+import com.fdkankan.fusion.response.DownVo;
+import com.fdkankan.fusion.response.DownloadProcessVo;
+
+public interface IDownService {
+
+    DownVo checkDownLoad(String sceneNum, Integer isObj);
+
+    DownVo down(String sceneNum,Integer isObj);
+
+    DownloadProcessVo downloadProcess(String num, Integer isObj);
+}

+ 20 - 0
src/main/java/com/fdkankan/fusion/service/ISceneDownLogService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.SceneDownLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.request.SceneDownLogParam;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+public interface ISceneDownLogService extends IService<SceneDownLog> {
+
+    Object pageList(SceneDownLogParam param);
+
+    SceneDownLog getByStatusAndNum(String sceneNum, Integer status,Integer version);
+}

+ 17 - 0
src/main/java/com/fdkankan/fusion/service/ISceneEditInfoService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.SceneEditInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+public interface ISceneEditInfoService extends IService<SceneEditInfo> {
+
+    SceneEditInfo getByScenePlusId(Long plusId);
+}

+ 16 - 0
src/main/java/com/fdkankan/fusion/service/IScenePlusExtService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.ScenePlusExt;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+public interface IScenePlusExtService extends IService<ScenePlusExt> {
+
+}

+ 21 - 0
src/main/java/com/fdkankan/fusion/service/IScenePlusService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.ScenePlus;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+public interface IScenePlusService extends IService<ScenePlus> {
+
+    ScenePlus getByNum(String sceneNum);
+
+
+}

+ 24 - 0
src/main/java/com/fdkankan/fusion/service/impl/CameraDetailServiceImpl.java

@@ -0,0 +1,24 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fdkankan.fusion.entity.CameraDetail;
+import com.fdkankan.fusion.mapper.ICameraDetailMapper;
+import com.fdkankan.fusion.service.ICameraDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机子表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Service
+@DS("db2")
+public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, CameraDetail> implements ICameraDetailService {
+
+}

+ 26 - 0
src/main/java/com/fdkankan/fusion/service/impl/CameraServiceImpl.java

@@ -0,0 +1,26 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fdkankan.fusion.entity.Camera;
+import com.fdkankan.fusion.mapper.ICameraMapper;
+import com.fdkankan.fusion.service.ICameraService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 相机主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Service
+@DS("db2")
+public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
+
+    @Override
+    public Camera getByCameraId(Long cameraId) {
+        return this.getById(cameraId);
+    }
+}

+ 279 - 0
src/main/java/com/fdkankan/fusion/service/impl/DownService.java

@@ -0,0 +1,279 @@
+package com.fdkankan.fusion.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.enums.DownloadStatusEnum;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.*;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.httpClient.LaserService;
+import com.fdkankan.fusion.httpClient.response.SSDownSceneVo;
+import com.fdkankan.fusion.response.DownVo;
+import com.fdkankan.fusion.response.DownloadProcessVo;
+import com.fdkankan.fusion.service.*;
+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.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class DownService implements IDownService {
+
+    @Autowired
+    ISceneDownLogService sceneDownloadLogService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    LaserService laserService;
+    @Autowired
+    ITmDepartmentService tmDepartmentService;
+    @Autowired
+    ICameraService cameraService;
+
+
+
+    private Integer getSceneVersion( ScenePlus scenePlus) {
+        Integer version = 0;
+        if(scenePlus !=null){
+            String redisKey = String.format(RedisKeyUtil.SCENE_VERSION,scenePlus.getNum());
+            if(!redisUtil.hasKey(redisKey) || StringUtils.isBlank(redisUtil.get(redisKey))) {
+                SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+                if(sceneEditInfo == null){
+                    throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
+                }
+                version = sceneEditInfo.getVersion();
+            }else {
+                String redisObj = redisUtil.get(redisKey);
+                JSONObject obj = JSONObject.parseObject(redisObj);
+                version = obj.getInteger("version");
+            }
+
+        }
+        return version;
+    }
+
+    @Override
+    public DownVo checkDownLoad(String sceneNum, Integer isObj) {
+        if(StringUtils.isEmpty(sceneNum)){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        ScenePlus plus = scenePlusService.getByNum(sceneNum);
+        if(plus == null){
+            throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
+        }
+        Integer sceneType =  plus.getSceneSource();
+        log.info("checkDownLoad--sceneType:{},isObj:{}",sceneType,isObj);
+        if((sceneType == 4 || sceneType == 5) && isObj !=1){ //深时场景
+            return SSCheckDownload(sceneNum);
+        }
+        SceneDownLog sceneDownloadLog;
+        Integer sceneVersion = getSceneVersion(plus);
+
+        sceneDownloadLog = sceneDownloadLogService.getByStatusAndNum(sceneNum,0,sceneVersion);
+        DownVo downVo = new DownVo();
+        if(sceneDownloadLog != null){
+            downVo.setDownloadStatus(1);
+            return downVo;
+        }
+        sceneDownloadLog = sceneDownloadLogService.getByStatusAndNum(sceneNum,1,sceneVersion);
+        //下载过,有更改
+        if(sceneDownloadLog == null){
+            String redisKey = RedisKey.PREFIX_DOWNLOAD_PROGRESS;
+            downVo.setDownloadStatus(2);
+            redisUtil.del(String.format(redisKey,sceneNum));  // 清除旧的下载信息
+            return downVo;
+        }
+        saveLog(plus,sceneVersion);
+        //3下载过,并且没有修改过
+        downVo.setDownloadStatus(3);
+        downVo.setDownloadUrl(sceneDownloadLog.getDownUrl());
+        return downVo;
+
+    }
+
+
+    @Override
+    public DownVo down(String sceneNum,Integer isObj) {
+        if(StringUtils.isEmpty(sceneNum) ){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
+        if( scenePlus == null){
+            throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
+        }
+
+        Long userId =  scenePlus.getUserId();
+
+        Integer sceneType =  scenePlus.getSceneSource();
+        Integer sceneVersion = getSceneVersion( scenePlus);
+        log.info("down--sceneType:{},isObj:{}",sceneType,isObj);
+        saveLog(scenePlus,sceneVersion);
+        if((sceneType == 4 || sceneType == 5) && isObj !=1){ //深时场景
+            return SSDownload(sceneNum,userId);
+        }
+        String redisKeyProcess = RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4;
+        // 刪除下载进度
+        redisUtil.del(String.format(redisKeyProcess,sceneNum));
+        DownVo downVo = new DownVo();
+
+        String redisKey = RedisKey.SCENE_DOWNLOADS_TASK_V4;
+        Map<String,String> params = new HashMap<>(2);
+        params.put("type","local");
+        params.put("num",sceneNum);
+        redisUtil.lRightPush(redisKey, JSONObject.toJSONString(params));
+
+        downVo.setDownloadStatus(1);
+        return downVo;
+    }
+
+    private void saveLog(ScenePlus scenePlus,Integer sceneVersion){
+        String userName =  (String) StpUtil.getExtra("userName");
+        String nickName =  (String) StpUtil.getExtra("nickName");
+        String deptId = tmDepartmentService.getDeptId();
+        TmDepartment tmDepartment = tmDepartmentService.getById(deptId);
+        Camera camera = cameraService.getByCameraId(scenePlus.getCameraId());
+        SceneDownLog sceneDownloadLogEntity = new SceneDownLog();
+        sceneDownloadLogEntity.setSceneNum(scenePlus.getNum());
+        sceneDownloadLogEntity.setSceneTitle(scenePlus.getTitle());
+        sceneDownloadLogEntity.setUserName(userName);
+        sceneDownloadLogEntity.setNickName(nickName);
+        sceneDownloadLogEntity.setSnCode(camera.getSnCode());
+        sceneDownloadLogEntity.setDeptName(tmDepartment.getName());
+        sceneDownloadLogEntity.setDeptLevel(tmDepartment.getDeptType());
+        sceneDownloadLogEntity.setDeptId(deptId);
+        sceneDownloadLogEntity.setStatus(0);
+        sceneDownloadLogEntity.setVersion(sceneVersion);
+        sceneDownloadLogService.save(sceneDownloadLogEntity);
+    }
+
+    //downloads:progress:v4:SS-t-8H5pZsMnHGL
+    @Override
+    public DownloadProcessVo downloadProcess(String sceneNum, Integer isObj) {
+        if (StringUtils.isEmpty(sceneNum)) {
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
+        if( scenePlus == null){
+            throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
+        }
+        Integer sceneType =  scenePlus.getSceneSource();
+        log.info("downloadProcess--sceneType:{},isObj:{}",sceneType,isObj);
+        if((sceneType == 4 || sceneType == 5) && isObj !=1){ //深时场景
+            return SSDownloadProcess(sceneNum);
+        }
+        String redisKey = RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4;
+        // 获取下载进度
+        String result = redisUtil.get(String.format(redisKey,sceneNum));
+        log.info("redis-down-msg:{}",result);
+        if(StringUtils.isEmpty(result)){
+            return new DownloadProcessVo();
+        }
+        SceneDownLog sceneDownloadLog = sceneDownloadLogService.getByStatusAndNum(sceneNum,0,getSceneVersion(scenePlus));
+
+        DownloadProcessVo downloadProcessVo = JSONObject.parseObject(result, DownloadProcessVo.class);
+        if(sceneDownloadLog != null){
+            switch (downloadProcessVo.getStatus()) {
+                case DownloadStatusEnum.DOWNLOAD_SUCCESS_CODE:
+                    String url = downloadProcessVo.getUrl();
+                    if (!StringUtils.isEmpty(url)) {
+                        sceneDownloadLog.setDownUrl(url);
+                        sceneDownloadLog.setStatus(1);
+                        break;
+                    }
+                case DownloadStatusEnum.DOWNLOAD_FAILED_CODE:
+                    sceneDownloadLog.setStatus(-1);
+                    break;
+            }
+            sceneDownloadLogService.updateById(sceneDownloadLog);
+        }
+        return downloadProcessVo;
+    }
+
+    /**
+     * status :离线包状态是否需要重新生成  0 未生成:1 不需要  2需要   3 生成中
+     */
+    private DownVo SSCheckDownload(String sceneNum) {
+        DownVo downVo = new DownVo();
+        SSDownSceneVo vo = laserService.downOfflineSceneStatus(sceneNum);
+        if(vo == null){
+            throw new BusinessException(ResultCode.SS_SCENE_DOWN_ERROR);
+        }
+        downVo.setDownloadStatus(0);
+        if(vo.getStatus() == 1){
+            downVo.setDownloadStatus(3);
+            downVo.setDownloadUrl(vo.getUrl());
+        }
+        if(vo.getStatus() == 2){
+            downVo.setDownloadStatus(2);
+        }
+        if(vo.getStatus() == 3){
+            downVo.setDownloadStatus(1);
+        }
+        return downVo;
+    }
+
+    /**
+     * downloadStatus -1下载失败  1下载成功
+     */
+    private DownVo SSDownload(String sceneNum,Long userId) {
+        DownVo downVo = new DownVo();
+
+        //status :0:正在生成 1,初次生成  2,已经生成直接下载 3,重新生成
+        SSDownSceneVo vo = laserService.downOfflineScene(sceneNum);
+        if(vo == null){
+            throw new BusinessException(ResultCode.SS_SCENE_DOWN_ERROR);
+        }
+
+        downVo.setDownloadStatus(1);
+        return downVo;
+    }
+
+    public static HashMap<String,Integer> ssNumProcessNumMap = new HashMap<>();
+
+    private DownloadProcessVo SSDownloadProcess(String sceneNum) {
+        DownloadProcessVo downVo = new DownloadProcessVo();
+        SSDownSceneVo vo = laserService.downOfflineSceneStatus(sceneNum);
+        if(vo == null){
+            throw new BusinessException(ResultCode.SS_SCENE_DOWN_ERROR);
+        }
+        downVo.setStatus(1003);
+
+        if(vo.getStatus() == 0 || vo.getStatus() == 2 || vo.getStatus() == 3){    //下载中
+            ssNumProcessNumMap.merge(sceneNum, 1, Integer::sum);
+            Integer percent = ssNumProcessNumMap.get(sceneNum);
+            percent = percent /2;
+            if(percent >50){
+                percent = 50;
+            }
+            downVo.setStatus(1001);
+            downVo.setPercent(percent);
+        }
+        if(vo.getStatus() == 1){    //下载完成
+            ssNumProcessNumMap.remove(sceneNum);
+            downVo.setPercent(100);
+            downVo.setUrl(vo.getUrl());
+            downVo.setStatus(1002);
+
+            LambdaUpdateWrapper<SceneDownLog> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(SceneDownLog::getSceneNum,sceneNum);
+            wrapper.eq(SceneDownLog::getStatus,0);
+            wrapper.set(SceneDownLog::getDownUrl,vo.getUrl());
+            wrapper.set(SceneDownLog::getStatus,1);
+            sceneDownloadLogService.update(wrapper);
+        }
+        return downVo;
+    }
+
+}

+ 86 - 0
src/main/java/com/fdkankan/fusion/service/impl/SceneDownLogServiceImpl.java

@@ -0,0 +1,86 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.fusion.common.PageInfo;
+import com.fdkankan.fusion.entity.SceneDownLog;
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.fdkankan.fusion.mapper.ISceneDownLogMapper;
+import com.fdkankan.fusion.request.SceneDownLogParam;
+import com.fdkankan.fusion.service.ISceneDownLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.fusion.service.ITmDepartmentService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Service
+public class SceneDownLogServiceImpl extends ServiceImpl<ISceneDownLogMapper, SceneDownLog> implements ISceneDownLogService {
+
+    @Autowired
+    ITmDepartmentService departmentService;
+
+
+    @Override
+    public Object pageList(SceneDownLogParam param) {
+        LambdaQueryWrapper<SceneDownLog> wrapper = new LambdaQueryWrapper<>();
+        if(StringUtils.isNotBlank(param.getDeptId())){
+            List<TmDepartment> sonByDeptId = departmentService.getSonByDeptId(param.getDeptId());
+            List<String> deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList());
+            deptIds.add(param.getDeptId());
+            wrapper.in(SceneDownLog::getDeptId,deptIds);
+        }
+        if(StringUtils.isNotBlank(param.getUserName())){
+            wrapper.like(SceneDownLog::getUserName,param.getUserName());
+        }
+        if(StringUtils.isNotBlank(param.getNickName())){
+            wrapper.like(SceneDownLog::getNickName,param.getNickName());
+        }
+        if(StringUtils.isNotBlank(param.getCreateTime())){
+            wrapper.like(SceneDownLog::getCreateTime,param.getCreateTime());
+        }
+        if(StringUtils.isNotBlank(param.getSceneTitle())){
+            wrapper.like(SceneDownLog::getSceneTitle,param.getSceneTitle());
+        }
+        if(StringUtils.isNotBlank(param.getSceneNum())){
+            wrapper.like(SceneDownLog::getSceneNum,param.getSceneNum());
+        }
+        if(StringUtils.isNotBlank(param.getSnCode())){
+            wrapper.like(SceneDownLog::getSnCode,param.getSnCode());
+        }
+        if(StringUtils.isNotBlank(param.getStartCreateTime())){
+            wrapper.ge(SceneDownLog::getCreateTime,param.getStartCreateTime());
+        }
+        if(StringUtils.isNotBlank(param.getEndCreateTime())){
+            wrapper.le(SceneDownLog::getCreateTime,param.getEndCreateTime());
+        }
+        wrapper.orderByDesc(SceneDownLog::getCreateTime);
+        Page<SceneDownLog> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public SceneDownLog getByStatusAndNum(String sceneNum, Integer status,Integer sceneVersion) {
+        LambdaQueryWrapper<SceneDownLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SceneDownLog::getSceneNum,sceneNum);
+        wrapper.eq(SceneDownLog::getStatus,status);
+        wrapper.eq(SceneDownLog::getVersion,sceneVersion);
+        wrapper.orderByDesc(SceneDownLog::getId);
+        List<SceneDownLog> list = this.list(wrapper);
+        if(list != null && !list.isEmpty()){
+            return list.get(0);
+        }
+        return null;
+    }
+}

+ 29 - 0
src/main/java/com/fdkankan/fusion/service/impl/SceneEditInfoServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.entity.SceneEditInfo;
+import com.fdkankan.fusion.mapper.ISceneEditInfoMapper;
+import com.fdkankan.fusion.service.ISceneEditInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-01-09
+ */
+@Service
+@DS("db2")
+public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper, SceneEditInfo> implements ISceneEditInfoService {
+
+    @Override
+    public SceneEditInfo getByScenePlusId(Long plusId) {
+        LambdaQueryWrapper<SceneEditInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SceneEditInfo::getScenePlusId,plusId);
+        return this.getOne(wrapper);
+    }
+}

+ 22 - 0
src/main/java/com/fdkankan/fusion/service/impl/ScenePlusExtServiceImpl.java

@@ -0,0 +1,22 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fdkankan.fusion.entity.ScenePlusExt;
+import com.fdkankan.fusion.mapper.IScenePlusExtMapper;
+import com.fdkankan.fusion.service.IScenePlusExtService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Service
+@DS("db2")
+public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
+
+}

+ 34 - 0
src/main/java/com/fdkankan/fusion/service/impl/ScenePlusServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.entity.ScenePlus;
+import com.fdkankan.fusion.mapper.IScenePlusMapper;
+import com.fdkankan.fusion.service.IScenePlusService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-28
+ */
+@Service
+@DS("db2")
+public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
+
+    @Override
+    public ScenePlus getByNum(String sceneNum) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlus::getNum,sceneNum);
+        return this.getOne(wrapper);
+    }
+
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/fusion/service/impl/SceneService.java

@@ -123,7 +123,7 @@ public class SceneService implements ISceneService {
             param.setSnCodes(snCodes);
         }
         if(CollectionUtil.isEmpty(param.getSnCodes()) && CollectionUtil.isEmpty(param.getNumList())){
-            param.setSnCodes( Arrays.asList("no_snCode"));
+            return PageInfo.PageInfoEmpty();
         }
         List<SceneVo> sceneVoList = new ArrayList<>();
         long total = 0;

+ 8 - 3
src/main/java/com/fdkankan/fusion/service/impl/UploadService.java

@@ -93,10 +93,15 @@ public class UploadService {
             if(fileName.length() >50){
                 fileName =  fileName.substring(0,50);
             }
-            localFile = File.createTempFile(fileName + suffixName,suffixName);
+            //localFile = File.createTempFile(fileName + suffixName,suffixName);
+            localFile = new File(FilePath.MNT_PATH_TMP+ UUID.randomUUID().toString().replace("-","")+"/" + fileName + suffixName);
+            if(!localFile.getParentFile().exists()){
+                localFile.getParentFile().mkdirs();
+            }
+
             file.transferTo(localFile);
             String path = localFile.getPath();
-            uploadToOssUtil.uploadOss(path,filePathAdd+ fileName + suffixName);
+            ShellUtil.yunUpload(path,filePathAdd+ fileName + suffixName);
             if(!uploadToOssUtil.existKey(filePathAdd + fileName + suffixName)){
                 throw new BusinessException(ResultCode.UPLOAD_ERROR.code,ResultCode.UPLOAD_ERROR.msg);
             }
@@ -106,7 +111,7 @@ public class UploadService {
             throw new BusinessException(ResultCode.UPLOAD_ERROR.code,ResultCode.UPLOAD_ERROR.msg);
         }finally {
             if(localFile!=null){
-                localFile.delete();
+                localFile.getParentFile().delete();
             }
         }
 

+ 18 - 15
src/main/resources/application.yaml

@@ -14,22 +14,25 @@ spring:
       max-file-size: 1000MB
       maxRequestSize: 1000MB
   datasource:
-    type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
-    driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
+    type: com.alibaba.druid.pool.DruidDataSource
     #120.25.146.52
-    #url: jdbc:mysql://120.25.146.52:13306/fd_fusion?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
-    url: jdbc:mysql://4dkankan-mix3d-mysql:3306/fd_fusion_sd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
-    username: root
-    password: 4dkk2024cuikuan%
-    hikari:
-      connection-timeout: 30000         # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
-      minimum-idle: 5                   # 最小连接数
-      maximum-pool-size: 20             # 最大连接数
-      auto-commit: true                 # 事务自动提交
-      idle-timeout: 600000              # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
-      pool-name: DateSourceHikariCP     # 连接池名字
-      max-lifetime: 1800000             # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
-      connection-test-query: SELECT 1   # 连接测试语句
+    dynamic:
+      primary: db1
+      strict: false
+      datasource:
+        db1:
+          driver-class-name: com.mysql.jdbc.Driver
+          #url: jdbc:mysql://120.25.146.52:13306/fd_fusion?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+          url: jdbc:mysql://4dkankan-mix3d-mysql:3306/fd_fusion_sd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+          username: root
+          password: 4dkk2024cuikuan%
+        db2:
+          driver-class-name: com.mysql.jdbc.Driver
+          url: jdbc:mysql://4dkankan-mix3d-mysql:3306/4dkankan_v4?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+          username: root
+          password: 4dkk2024cuikuan%
+
+
   redis:
     host: 4dkankan-mix3d-redis
     port: 6379

+ 6 - 0
src/main/resources/mapper/fusion/CameraDetailMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ICameraDetailMapper">
+
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/fusion/CameraMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ICameraMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/fusion/SceneDownLogMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ISceneDownLogMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/fusion/SceneEditInfoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ISceneEditInfoMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/fusion/ScenePlusExtMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.IScenePlusExtMapper">
+
+</mapper>

+ 6 - 0
src/main/resources/mapper/fusion/ScenePlusMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.IScenePlusMapper">
+
+
+</mapper>