dsx hace 2 años
padre
commit
6a0b50957a

+ 4 - 4
src/main/java/com/fdkankan/scene/controller/SceneController.java

@@ -84,13 +84,13 @@ public class SceneController extends BaseController {
     @PostMapping("/initScene")
     public ResultData initScene(@RequestBody InitSceneParamVO param){
         return scenePlusService.initScene(param.getNum(), param.getTitle(), param.getDes(),
-            param.getSceneSource(), param.getDataSource(), param.getSceneScheme(),
-            param.getSceneResolution(), param.getSceneFrom());
+                param.getSceneSource(), param.getDataSource(), param.getSceneScheme(),
+                param.getSceneResolution(), param.getSceneFrom());
     }
 
     /**
      * <p>
-            laser场景信息同步
+     laser场景信息同步
      * </p>
      * @author dengsixing
      * @date 2022/9/27
@@ -134,7 +134,7 @@ public class SceneController extends BaseController {
     @PostMapping("/copyScene")
     public ResultData copyScene(@RequestBody SceneParamVO param) throws Exception {
 //        String username = JwtUtil.getUsername(getToken());
-        sceneService.copyScene(param.getNewNum(), param.getSceneNum(),null);
+        sceneService.copyScene(param.getNewNum(), param.getSceneNum(),null, param.getDataSource());
         return ResultData.ok();
     }
 

+ 1 - 1
src/main/java/com/fdkankan/scene/controller/SceneMarkShapeController.java

@@ -65,7 +65,7 @@ public class SceneMarkShapeController extends BaseController
         if(ObjectUtil.isNotNull(scenePlus)) {
             ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
             if (ObjectUtil.isNotNull(scenePlus)) {
-                String publicUserPath = String.format(UploadFilePath.scene_result_data_path, param.getNum());
+                String publicUserPath = null;
                 List<String> panoramaList = ossUtil.listFiles(publicUserPath + "caches/images/");
                 List<String> panoramaListUrl = panoramaList.stream().filter(f -> FileUtil.extName(f).equals("jpg")).map(s -> ossUrlPrefix + s).collect(Collectors.toList());
                 return ResultData.ok(panoramaListUrl);

+ 270 - 0
src/main/java/com/fdkankan/scene/entity/Scene.java

@@ -0,0 +1,270 @@
+package com.fdkankan.scene.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-07-17
+ */
+@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("create_by")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    @TableField("update_by")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 逻辑未删除值0,逻辑已删除值1
+     */
+    @TableField("deleted")
+    @TableLogic(value = "0", delval = "1")
+    private String deleted;
+
+    /**
+     * 场景码
+     */
+    @TableField("scene_code")
+    private String sceneCode;
+
+    /**
+     * 文件基础路径
+     */
+    @TableField("path")
+    private String path;
+
+    /**
+     * 状态, 0:初始状态, 1:完成控制点
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 重算次数
+     */
+    @TableField("recount")
+    private Integer recount;
+
+    /**
+     * 标题
+     */
+    @TableField("title")
+    private String title;
+
+    @TableField("child_name")
+    private String childName;
+
+    /**
+     * sn码
+     */
+    @TableField("sn_code")
+    private String snCode;
+
+    /**
+     * 拍摄时间
+     */
+    @TableField("shoot_time")
+    private Date shootTime;
+
+    /**
+     * 展示链接
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_Id")
+    private Integer userId;
+
+    /**
+     * (用户名)手机号
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 封面图地址
+     */
+    @TableField("init_pic")
+    private String initPic;
+
+    /**
+     * 访问密码
+     */
+    @TableField("password")
+    private String password;
+
+    /**
+     * 是否公开,默认公开
+     */
+    @TableField("is_open")
+    private Integer isOpen;
+
+    /**
+     * 是否要禁止显示平面图 默认false
+     */
+    @TableField("disable_floor_pan")
+    private Integer disableFloorPan;
+
+    /**
+     * 平面图类型,默认default
+     */
+    @TableField("floor_pan_type")
+    private String floorPanType;
+
+    /**
+     * 默认las文件地址
+     */
+    @TableField("las_url")
+    private String lasUrl;
+
+    /**
+     * 0表示全景图 1表示点云
+     */
+    @TableField("show_mode")
+    private Integer showMode;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * 协作人id
+     */
+    @TableField("cooperation_user_id")
+    private Integer cooperationUserId;
+
+    /**
+     * 协作人手机号
+     */
+    @TableField("cooperation_user_name")
+    private String cooperationUserName;
+
+    /**
+     * 数据集ID
+     */
+    @TableField("dataset_id")
+    private String datasetId;
+
+    /**
+     * 上传次数
+     */
+    @TableField("upload_count")
+    private Integer uploadCount;
+
+    /**
+     * 默认ply文件地址
+     */
+    @TableField("ply_url")
+    private String plyUrl;
+
+    /**
+     * unicode
+     */
+    @TableField("unicode")
+    private String unicode;
+
+    /**
+     * 默认obj文件地址
+     */
+    @TableField("obj_url")
+    private String objUrl;
+
+    /**
+     * 生成OBJ状态,0,未生成 1完成,2计算中
+     */
+    @TableField("build_obj_status")
+    private Integer buildObjStatus;
+
+    /**
+     * 逻辑删除
+     */
+    @TableField("delete_flag")
+    private Date deleteFlag;
+
+    /**
+     * 是否复制,默认否
+     */
+    @TableField("is_copy")
+    private Integer isCopy;
+
+    /**
+     * 复制时间
+     */
+    @TableField("copy_time")
+    private Date copyTime;
+
+    /**
+     * 场景版本
+     */
+    @TableField("scene_version")
+    private String sceneVersion;
+
+    /**
+     * 离线包版本,和重算次数对比
+     */
+    @TableField("offline_ver")
+    private Integer offlineVer;
+
+    /**
+     * 离线包地址
+     */
+    @TableField("offline_url")
+    private String offlineUrl;
+
+    /**
+     * 离线包状态是否需要重新生成 1 不需要 2需要
+     */
+    @TableField("offline_status")
+    private Integer offlineStatus;
+
+
+}

+ 3 - 3
src/main/java/com/fdkankan/scene/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"scene", getTables(new String[]{
-                "t_scene_download_log"
+                "t_scene"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,8 +46,8 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4",
-            "root","4Dage@4Dage#@168")
+        FastAutoGenerator.create("jdbc:mysql://localhost:3307/laser",
+            "root","laser")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)

+ 18 - 0
src/main/java/com/fdkankan/scene/mapper/ISceneMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.scene.mapper;
+
+import com.fdkankan.scene.entity.Scene;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 初始化信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-17
+ */
+@Mapper
+public interface ISceneMapper extends BaseMapper<Scene> {
+
+}

+ 0 - 16
src/main/java/com/fdkankan/scene/service/ISceneCleanOrigService.java

@@ -13,20 +13,4 @@ import com.fdkankan.scene.entity.SceneCleanOrig;
  */
 public interface ISceneCleanOrigService extends IService<SceneCleanOrig> {
 
-    void cleanOrigV3();
-
-    void cleanOrigV4();
-
-    void cleanOss4DeletedSceneV3();
-
-    void cleanOss4DeletedSceneV4();
-
-    void cleanOss4TestCameraV3();
-
-    void cleanOss4TestCameraV4();
-
-    void coldStorageHomeV3();
-
-    void coldStorageHomeV4();
-
 }

+ 8 - 4
src/main/java/com/fdkankan/scene/service/ISceneService.java

@@ -1,13 +1,13 @@
 package com.fdkankan.scene.service;
 
-import com.fdkankan.scene.bean.BodySegmentStatusBean;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.web.response.ResultData;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.nio.file.FileSystemException;
 
-public interface ISceneService {
+public interface ISceneService extends IService<Scene> {
 
     ResultData uploadBodySegment(MultipartFile file,Integer rotate) throws Exception;
 
@@ -17,6 +17,10 @@ public interface ISceneService {
 
     void delete(String sceneNum,Long userId) throws FileSystemException;
 
-    void copyScene(String newNum, String sceneNum, String userName) throws Exception;
+    void copyScene(String newNum, String sceneNum, String userName, String dataSource) throws Exception;
+
+    Scene getBySceneCode(String sceneCode);
+
+    String getDataSource(String num, Integer sceneSource, String dataSource);
 
 }

+ 1 - 131
src/main/java/com/fdkankan/scene/service/impl/SceneCleanOrigServiceImpl.java

@@ -1,153 +1,23 @@
 package com.fdkankan.scene.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.exceptions.ExceptionUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.CommonSuccessStatus;
-import com.fdkankan.model.constants.ConstantFilePath;
-import com.fdkankan.model.utils.SceneUtil;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.entity.SceneCleanOrig;
 import com.fdkankan.scene.mapper.ISceneCleanOrigMapper;
-import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.ISceneCleanOrigService;
-import com.fdkankan.scene.service.IScenePlusExtService;
-import com.fdkankan.scene.service.IScenePlusService;
-import com.fdkankan.scene.service.ISceneProService;
 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.util.List;
-import java.util.Map;
-
 /**
  * <p>
  * 删除oss原始资源记录 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-03-29
  */
 @Slf4j
 @Service
 public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper, SceneCleanOrig> implements ISceneCleanOrigService {
 
-    @Value("${scene.cleanOrig.month:6}")
-    private Integer cleanOrigMonth;
-
-    @Autowired
-    private ISceneProService sceneProService;
-    @Autowired
-    private IScenePlusService scenePlusService;
-    @Autowired
-    private IScenePlusExtService scenePlusExtService;
-    @Autowired
-    private OssUtil ossUtil;
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @Override
-    public void cleanOrigV4() {
-        //查询所有计算时间超过限定时间的场景,计算成功、未被删除、最后一次计算后未被删除过的
-        List<SceneBean> sceneBeans = scenePlusService.listCleanOrigScene(cleanOrigMonth);
-        if(CollUtil.isEmpty(sceneBeans)){
-            return;
-        }
-
-        sceneBeans.parallelStream().forEach(scene->{
-            this.cleanOrigHandler(scene);
-        });
-    }
-
-    @Override
-    public void cleanOrigV3() {
-        //查询所有计算时间超过限定时间的场景,计算成功、未被删除
-        List<SceneBean> sceneBeans = sceneProService.listCleanOrigScene(cleanOrigMonth);
-        if(CollUtil.isEmpty(sceneBeans)){
-            return;
-        }
-
-        sceneBeans.parallelStream().forEach(scene->{
-            this.cleanOrigHandler(scene);
-        });
-    }
-
-    private void cleanOrigHandler(SceneBean scene){
-        try {
-            boolean lock = this.lock(scene.getDataSource());
-            if(!lock){
-                throw new RuntimeException("场景正在上传");
-            }
-            int successStatus = CommonSuccessStatus.SUCCESS.code();
-            String reason = null;
-            String dataSource = scene.getDataSource();
-            if(StrUtil.isNotEmpty(dataSource)){
-                String homePath = dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, ConstantFilePath.OSS_PREFIX);
-                //由于国内测试和生产用的bucket是同一个,这里需要做一个安全校验,保证不会删错
-                String fileContent = ossUtil.getFileContent(homePath.concat("/").concat("data.fdage"));
-                if(StrUtil.isNotBlank(fileContent)){
-                    JSONObject jsonObject = JSON.parseObject(fileContent);
-                    String snCode = jsonObject.getJSONObject("cam").getString("uuid");
-                    String uuidTime = jsonObject.getString("uuidtime");
-                    if(StrUtil.isEmpty(snCode)
-                            || StrUtil.isEmpty(uuidTime)
-                            || !homePath.contains(snCode)
-                            || !homePath.contains(uuidTime)){
-                        successStatus = CommonSuccessStatus.FAIL.code();
-                        reason = "dataSource与data.fdage文件不匹配";
-                    }else{
-                        ossUtil.deleteObject(homePath);
-                    }
-                }
-            }
-            this.saveLog(scene.getNum(), successStatus, reason);
-        }catch (Exception e){
-            log.error("删除原始资源失败,num : " + scene.getNum(), e);
-            this.saveLog(scene.getNum(), CommonSuccessStatus.FAIL.code(), ExceptionUtil.stacktraceToString(e, 3000));
-        }finally {
-            this.releaseLock(scene.getDataSource());
-        }
-    }
-
-
-
-
-    private void saveLog(String num, int status, String reason){
-        //清除旧的日志
-        this.remove(new LambdaQueryWrapper<SceneCleanOrig>().eq(SceneCleanOrig::getNum, num));
-        SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
-        sceneCleanOrig.setNum(num);
-        sceneCleanOrig.setState(status);
-        sceneCleanOrig.setReason(reason);
-        this.saveOrUpdate(sceneCleanOrig);
-    }
-
-    private boolean lock(String dataSource){
-        Map<String, String> property = SceneUtil.getPropertyFromDataSource(dataSource);
-        String homePath = property.get("homePath");
-        String uuid = property.get("uuid");
-
-        String uploadLock = redisUtil.get(String.format(RedisKey.SCENE_OSS_HOME_DIR_UPLOAD, uuid));
-        //场景正在上传,不删除
-        if(StrUtil.isNotEmpty(uploadLock)){
-            return false;
-        }
-        redisUtil.set(String.format(RedisKey.SCENE_OSS_HOME_DIR_DELETE, uuid), homePath, 8*60*60);
-        return true;
-    }
-
-    private void releaseLock(String dataSource){
-        Map<String, String> property = SceneUtil.getPropertyFromDataSource(dataSource);
-        String uuid = property.get("uuid");
-        redisUtil.del(String.format(RedisKey.SCENE_OSS_HOME_DIR_DELETE, uuid));
-    }
 
 }

+ 3 - 3
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoExtServiceImpl.java

@@ -12,7 +12,6 @@ import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.redis.constant.RedisKey;
@@ -25,6 +24,7 @@ import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
 import com.fdkankan.scene.mapper.ISceneEditInfoExtMapper;
+import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
 import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.IScenePlusExtService;
@@ -62,7 +62,7 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
     @Autowired
     private RedisLockUtil redisLockUtil;
     @Autowired
-    private FYunFileServiceInterface fYunFileService;
+    private OssUtil ossUtil;
 
     @Override
     public SceneEditInfoExt getByScenePlusId(long scenePlusId) {
@@ -178,7 +178,7 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
             if(StrUtil.isEmpty(icon)){
                 continue;
             }
-            fYunFileService.deleteFile(bucket, userDataPath.concat(icon));
+            ossUtil.deleteObject(userDataPath.concat(icon));
         }
     }
 

+ 20 - 40
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -18,7 +18,6 @@ import com.fdkankan.common.constant.*;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileSizeUtil;
 import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.model.constants.ConstantCmd;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.ComputerUtil;
@@ -30,14 +29,12 @@ import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.bean.*;
-import com.fdkankan.scene.constant.CmdConstant;
 import com.fdkankan.scene.constant.ConstantFileLocPath;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneEditInfoMapper;
 import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.util.CmdBuildUtil;
-import com.fdkankan.scene.util.CmdUtils;
 import com.fdkankan.scene.util.MergeVideoUtil;
 import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.response.ResultData;
@@ -104,6 +101,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     private ISurveillanceService surveillanceService;
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
+    @Autowired
+    private ISceneService sceneService;
 
     @Transactional
     @Override
@@ -378,11 +377,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum) + "billboards.json";
         List<String> list = redisUtil.hgetValues(Key);
         if(CollUtil.isEmpty(list)){
-            fYunFileService.deleteFile(bucket, userEditPath);
+            ossUtil.deleteObject(userEditPath);
             return;
         }
         List<JSONObject> collect = list.stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
-        fYunFileService.uploadFile(bucket, JSON.toJSONString(collect).getBytes(), userEditPath);
+        ossUtil.uploadFileBytes(userEditPath, JSON.toJSONString(collect).getBytes());
     }
 
     @Override
@@ -645,24 +644,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         ScenePlusExt scenePlusExt = scenePlusExtService
             .getScenePlusExtByPlusId(scenePlus.getId());
         String bucket = scenePlusExt.getYunFileBucket();
-//        String path = scenePlusExt.getDataSource();
-
-        //户型图上传 恢复默认并发布同时点击刷新查看页面,平面图会变形,所以这里先注释掉 bug-36281 2023-05-04
-//        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
-//        String floorplanCadPath = ossResultPath + "floorplan_cad/";
-//        fYunFileService.copyFileBetweenBucket(bucket, floorplanCadPath, bucket, String.format(UploadFilePath.USER_EDIT_PATH, num));
-
-//        String  userEditPath = UploadFilePath.USER_EDIT_PATH + "floor-cad-%s.%s";
-//        String floorCadPath = path + "/results/floorplan_cad";
-//        List<String> floorCadList = FileUtils.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("\\.");
-//                ossUtil.uploadFile(String.format(userEditPath, num, arr2[0], arr2[1]), str, false);
-//            });
-//        }
 
         //根据floorplan_cad.json生成houseType.json
         this.uploadHouseTypeJson(num, bucket);
@@ -1044,9 +1025,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         CreateObjUtil.convertVisionmodeldataToTxt(target + File.separator + "extras" + File.separator + "vision.modeldata",
             target + File.separator + "extras" + File.separator + "vision.txt");
 
-        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
-        ossUtil.downloadFile(ossResultPath + "data.json", target + File.separator+"data.json");
-        ossUtil.downloadFile(ossResultPath + "project.json", target + File.separator+"project.json");
+        String  ossResultPath = sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource());
+        FileUtil.copy(ossResultPath + "data.json", target + File.separator+"data.json", true);
+        FileUtil.copy(ossResultPath + "project.json", target + File.separator+"project.json", true);
 
         //data.json增加extras为执行重建算法
         String data = FileUtils.readFile(target + File.separator+"data.json");
@@ -1148,6 +1129,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     public void uploadPanoramaHandler(String num, String bucket, String target, String imgViewPath, List<String> uploadFileList, String targetImagesPath) throws Exception {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+
         CmdBuildUtil.BuildModelCommand(target);
 
         String uploadJsonPath= target + File.separator + "results" +File.separator+"upload.json";
@@ -1208,17 +1192,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
 
         //用户上传的全景图上传到ossresult目录
-        String ossCachesImagesPath = String.format(UploadFilePath.scene_result_data_path, num) + "caches/images/";
-        uploadFileList.stream().forEach(srcPath->{
-            map.put(srcPath, srcPath.replace(targetImagesPath, ossCachesImagesPath));
-        });
-
-        if(map.size()>0) {
-            ossUtil.uploadMulFiles(map);
-        }
+        String dataSource = sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource());
+        String ossCachesImagesPath = dataSource + "caches/images/";
+        FileUtil.copy(targetImagesPath, ossCachesImagesPath, true);
 
         //更新数据库版本号
-        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
         SceneEditInfo sceneEditInfo = this.getByScenePlusId(scenePlus.getId());
         this.upgradeVersionAndImgVersionById(sceneEditInfo.getId());
         //更新scenejson缓存和oss文件版本号
@@ -1268,7 +1246,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
         //标记是否是异步操作,默认是同步操作
         //如果入参文件名不为空,则是单个文件下载,不需要打包
-        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num) + "caches/images/";
+        String dataSource = sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource());
+        String ossResultPath = dataSource + "caches/images/";
         if(StrUtil.isNotEmpty(fileName)){
             //如果是单张图片,直接提供oss url
 //            if(!fYunFileService.fileExist(bucket, ossResultPath + fileName)){
@@ -1277,8 +1256,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             if(!panoramaImageList.contains(fileName)){
                 throw new BusinessException(ErrorCode.FAILURE_CODE_5063);
             }
-            String url = ossResultPath + fileName;
             String downloadName = fileName;
+            String url = String.format(cacheFormat, num) + downloadName;
+            ossUtil.uploadFile(String.format(cacheFormat, num) + downloadName, ossResultPath.concat(downloadName), true);
             map.put("asyn", CommonStatus.NO.code());
             map.put("fileUrl", url + "?t=" + System.currentTimeMillis());
             map.put("fileName", downloadName);
@@ -1918,9 +1898,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         file.transferTo(targetFile);
 
         //调用算法切全景图
-        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
-        ossUtil.downloadFile(ossResultPath + "data.json", target + File.separator+"data.json");
-        ossUtil.downloadFile(ossResultPath + "project.json", target + File.separator+"project.json");
+        String ossResultPath = sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource());
+        FileUtil.copy(ossResultPath + "data.json", target + File.separator+"data.json", true);
+        FileUtil.copy(ossResultPath + "project.json", target + File.separator+"project.json", true);
         JSONObject visionJson = new JSONObject();
         JSONArray visionArray = new JSONArray();
         visionJson.put("uuid", sid);

+ 12 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -9,6 +10,7 @@ import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
 import com.fdkankan.scene.entity.SceneResource;
@@ -26,6 +28,7 @@ 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.ArrayList;
@@ -68,6 +71,8 @@ public class SceneEditServiceImpl implements ISceneEditService {
 
     @Autowired
     private MyClient myClient;
+    @Autowired
+    private ISceneService sceneService;
 
     @Override
     public SceneAuthVO getAuth(String num, SSOUser ssoUser){
@@ -90,7 +95,7 @@ public class SceneEditServiceImpl implements ISceneEditService {
         sceneAuthVO.setCompany(null);
 
         //判断data.json是否存在,如果存在,则证明计算在未被定时任务删除前上传过oss
-        boolean exist = ossUtil.doesObjectExist(String.format(UploadFilePath.scene_result_data_path, num).concat("data.json"));
+        boolean exist = FileUtil.exist(sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource()).concat("data.json"));
         if(!exist){
             sceneAuthVO.setSourceExpired(true);
         }
@@ -108,6 +113,12 @@ public class SceneEditServiceImpl implements ISceneEditService {
 
     }
 
+    public static void main(String[] args) {
+        String dataSource = "D:\\4DMega\\4DKK_PROGRAM_DATA\\dvt600001_202206291618176080\\web_laserData\\laserData";
+        String test = dataSource.substring(0, dataSource.indexOf("web_laserData"));
+        System.out.println(test);
+    }
+
 //    @Override
 //    public ResultData locales(LocalesParamVO param) throws Exception {
 //        String key = "v4/www/locales/" + param.getFile();

+ 100 - 80
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.CommonOperStatus;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.SceneConstant;
@@ -21,6 +22,7 @@ import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.bean.BodySegmentStatusBean;
 import com.fdkankan.scene.entity.*;
+import com.fdkankan.scene.mapper.ISceneMapper;
 import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.util.OssBodySegmentUtil;
@@ -46,7 +48,7 @@ import java.util.concurrent.ExecutorService;
 
 @Slf4j
 @Service("sceneService")
-public class SceneServiceImpl implements ISceneService {
+public class SceneServiceImpl extends ServiceImpl<ISceneMapper, Scene> implements ISceneService {//extends ServiceImpl<ISceneResourceMapper, SceneResource> implements ISceneResourceService
 
     private static String cloudPointFyunPath = "testdata/%s/data/bundle_%s/building/";
 
@@ -194,7 +196,7 @@ public class SceneServiceImpl implements ISceneService {
     }
 
     @Override
-    public void copyScene(String newNum, String sceneNum, String userName) throws Exception {
+    public void copyScene(String newNum, String sceneNum, String userName, String dataSource) throws Exception {
         if(StrUtil.isEmpty(newNum) || StrUtil.isEmpty(sceneNum)){
             throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
         }
@@ -205,6 +207,7 @@ public class SceneServiceImpl implements ISceneService {
         String oldNum = scenePlus.getNum();
         Long plusId = scenePlus.getId();
         ScenePlusExt plusExt = scenePlusExtService.getScenePlusExtByPlusId(plusId);
+        String oldDataSource = plusExt.getDataSource();
         if(plusExt == null){
             throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
         }
@@ -216,91 +219,108 @@ public class SceneServiceImpl implements ISceneService {
 
         ExecutorService executor = ThreadUtil.newSingleExecutor();
 //        CompletableFuture.runAsync(() -> {
-            String newVideos = plusExt.getVideos();
-            if(StrUtil.isNotEmpty(newVideos)){
-                newVideos = plusExt.getVideos().replaceAll("/data/data" + oldNum, "/scene_view_data/" + newNum + "/data").replaceAll(oldNum, newNum);
-            }
-            plusExt.setId(null);
-            plusExt.setPlusId(scenePlus.getId());
-            plusExt.setDataSource("");
-            plusExt.setVideos(newVideos);
-            plusExt.setViewCount(0);
-            scenePlusExtService.save(plusExt);
-
-            SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plusId);
-            Long sceneEditInfoId = sceneEditInfo.getId();
-
-            sceneEditInfo.setId(null);
-            sceneEditInfo.setScenePlusId(scenePlus.getId());
-            sceneEditInfo.setSceneProId(null);
-            sceneEditInfo.setTitle(scenePlus.getTitle());
-            sceneEditInfoService.save(sceneEditInfo);
-
-            SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoId);
-            sceneEditInfoExt.setId(null);
-            sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
-            sceneEditInfoExt.setScenePlusId(scenePlus.getId());
-            sceneEditInfoExt.setSceneProId(null);
-            sceneEditInfoExtService.save(sceneEditInfoExt);
-
-            SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfoId);
-            sceneEditControls.setId(null);
-            sceneEditControls.setEditInfoId(sceneEditInfo.getId());
-            sceneEditControlsService.save(sceneEditControls);
-
-            List<Surveillance> list = surveillanceService.list(new LambdaQueryWrapper<Surveillance>().eq(Surveillance::getNum, oldNum));
-            if (!Objects.isNull(list)) {
-                list.stream().forEach(item -> {
-                    item.setNum(newNum);
-                    item.setId(null);
-                    surveillanceService.save(item);
-                });
-            }
+        String newVideos = plusExt.getVideos();
+        if(StrUtil.isNotEmpty(newVideos)){
+            newVideos = plusExt.getVideos().replaceAll("/data/data" + oldNum, "/scene_view_data/" + newNum + "/data").replaceAll(oldNum, newNum);
+        }
+        plusExt.setId(null);
+        plusExt.setPlusId(scenePlus.getId());
+        plusExt.setDataSource(dataSource);
+        plusExt.setVideos(newVideos);
+        plusExt.setViewCount(0);
+        scenePlusExtService.save(plusExt);
+
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plusId);
+        Long sceneEditInfoId = sceneEditInfo.getId();
+
+        sceneEditInfo.setId(null);
+        sceneEditInfo.setScenePlusId(scenePlus.getId());
+        sceneEditInfo.setSceneProId(null);
+        sceneEditInfo.setTitle(scenePlus.getTitle());
+        sceneEditInfoService.save(sceneEditInfo);
+
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoId);
+        sceneEditInfoExt.setId(null);
+        sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
+        sceneEditInfoExt.setScenePlusId(scenePlus.getId());
+        sceneEditInfoExt.setSceneProId(null);
+        sceneEditInfoExtService.save(sceneEditInfoExt);
+
+        SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfoId);
+        sceneEditControls.setId(null);
+        sceneEditControls.setEditInfoId(sceneEditInfo.getId());
+        sceneEditControlsService.save(sceneEditControls);
+
+        List<Surveillance> list = surveillanceService.list(new LambdaQueryWrapper<Surveillance>().eq(Surveillance::getNum, oldNum));
+        if (!Objects.isNull(list)) {
+            list.stream().forEach(item -> {
+                item.setNum(newNum);
+                item.setId(null);
+                surveillanceService.save(item);
+            });
+        }
 
-            if (!ossUtil.doesObjectExist(String.format(cloudPointFyunPath,oldNum,oldNum) +"vision_edit.txt")){
-                return;
-            }
-            log.info("开始同步点云编辑文件");
-            // 上传点云编辑文件,并通知激光系统
-            ossUtil.copyObject(String.format(cloudPointFyunPath,oldNum,oldNum) + "vision_edit.txt",
-                    String.format(cloudPointFyunPath,newNum,newNum) + "vision_edit.txt");
+        if (!ossUtil.doesObjectExist(String.format(cloudPointFyunPath,oldNum,oldNum) +"vision_edit.txt")){
+            return;
+        }
+        log.info("开始同步点云编辑文件");
+        // 上传点云编辑文件,并通知激光系统
+        ossUtil.copyObject(String.format(cloudPointFyunPath,oldNum,oldNum) + "vision_edit.txt",
+                String.format(cloudPointFyunPath,newNum,newNum) + "vision_edit.txt");
 
-            ossUtil.copyObject(String.format(cloudPointFyunPath,oldNum,oldNum) + "uuidcloud",
-                    String.format(cloudPointFyunPath,newNum,newNum) + "uuidcloud");
+        ossUtil.copyObject(String.format(cloudPointFyunPath,oldNum,oldNum) + "uuidcloud",
+                String.format(cloudPointFyunPath,newNum,newNum) + "uuidcloud");
 
-            Map<String, Object> params = new HashMap<>();
-            params.put("sceneNum", newNum);
-            params.put("businessType", 0);
-            // TODO: 2023/7/6 调用文杰接口
+        Map<String, Object> params = new HashMap<>();
+        params.put("sceneNum", newNum);
+        params.put("businessType", 0);
+        // TODO: 2023/7/6 调用文杰接口
 
-            try {
+        try {
 
-                // 拷贝场景编辑资源
-                String oldEditPath = String.format(UploadFilePath.EDIT_PATH, oldNum);
-                String newEditPath = String.format(UploadFilePath.EDIT_PATH, newNum);
-                ossUtil.copyObject(oldEditPath, newEditPath);
-
-                // 拷贝场景展示资源
-                String oldViewPath = String.format(UploadFilePath.VIEW_PATH, oldNum);
-                String newViewPath = String.format(UploadFilePath.VIEW_PATH, newNum);
-                ossUtil.copyObject(oldViewPath, newViewPath);
-
-                //复制计算结果文件
-                String oldResultPath = String.format(UploadFilePath.scene_result_data_path, oldNum);
-                String newResultPath = String.format(UploadFilePath.scene_result_data_path, newNum);
-                ossUtil.copyObject(oldResultPath, newResultPath);
-
-                scenePlus.setSceneStatus(-2);
-                scenePlusService.updateById(scenePlus);
-
-            }catch (Exception e){
-                log.error("复制场景失败-V4-sceneNum:{},error:{}",oldNum,e);
-                scenePlus.setSceneStatus(-1);
-                scenePlusService.updateById(scenePlus);
-                throw new BusinessException(ErrorCode.SYSTEM_BUSY.code(),"复制失败!");
-            }
+            // 拷贝场景编辑资源
+            String oldEditPath = String.format(UploadFilePath.EDIT_PATH, oldNum);
+            String newEditPath = String.format(UploadFilePath.EDIT_PATH, newNum);
+            ossUtil.copyObject(oldEditPath, newEditPath);
+
+            // 拷贝场景展示资源
+            String oldViewPath = String.format(UploadFilePath.VIEW_PATH, oldNum);
+            String newViewPath = String.format(UploadFilePath.VIEW_PATH, newNum);
+            ossUtil.copyObject(oldViewPath, newViewPath);
+
+            //复制计算目录
+            FileUtil.copy(oldDataSource, dataSource, true);
+
+            scenePlus.setSceneStatus(-2);
+            scenePlusService.updateById(scenePlus);
+
+        }catch (Exception e){
+            log.error("复制场景失败-V4-sceneNum:{},error:{}",oldNum,e);
+            scenePlus.setSceneStatus(-1);
+            scenePlusService.updateById(scenePlus);
+            throw new BusinessException(ErrorCode.SYSTEM_BUSY.code(),"复制失败!");
+        }
 //        }, executor).whenComplete((reslut, e) -> {
 //            log.info("copy-success-");
 //        });
     }
+
+    @Override
+    public Scene getBySceneCode(String sceneCode) {
+        return this.getOne(new LambdaQueryWrapper<Scene>().eq(Scene::getSceneCode, sceneCode));
+    }
+
+    @Override
+    public String getDataSource(String num, Integer sceneSource, String dataSource) {
+        if(StrUtil.isEmpty(dataSource)){
+            Scene scene = this.getBySceneCode(num);
+            dataSource = scene.getPath();
+        }
+        if(sceneSource == 4){//D:\4DMega\4DKK_PROGRAM_DATA\dvt600001_202206291618176080\web_laserData\laserData
+            dataSource = dataSource.substring(0, dataSource.indexOf("web_laserData"));
+        }else{
+            dataSource.concat(File.separator);
+        }
+        return dataSource;
+    }
 }

+ 2 - 0
src/main/java/com/fdkankan/scene/vo/SceneParamVO.java

@@ -179,4 +179,6 @@ public class SceneParamVO extends RequestBase implements Serializable {
 
     private String newNum;
 
+    private String dataSource;
+
 }

+ 5 - 0
src/main/resources/mapper/scene/SceneMapper.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.scene.mapper.ISceneMapper">
+
+</mapper>