Browse Source

深时迁移,复制

lyhzzz 2 years ago
parent
commit
79fa1dcb4e

+ 2 - 2
src/main/java/com/fdkankan/manage/entity/ScenePlus.java

@@ -98,13 +98,13 @@ public class ScenePlus implements Serializable {
      * 创建时间
      */
     @TableField("create_time")
-    private Date createTime;
+    private String createTime;
 
     /**
      * 更新时间
      */
     @TableField("update_time")
-    private Date updateTime;
+    private String updateTime;
 
     @TableField("rec_status")
     @TableLogic(value = "A",delval = "I")

+ 6 - 0
src/main/java/com/fdkankan/manage/httpClient/client/LaserClient.java

@@ -4,6 +4,7 @@ import com.dtflys.forest.annotation.Address;
 import com.dtflys.forest.annotation.JSONBody;
 import com.dtflys.forest.annotation.Post;
 import com.fdkankan.manage.httpClient.address.LaserAddressSource;
+import com.fdkankan.manage.httpClient.param.LaserSceneMoveParam;
 import com.fdkankan.manage.httpClient.param.LaserSceneParam;
 import com.fdkankan.manage.httpClient.vo.FdkkResponse;
 
@@ -18,4 +19,9 @@ public interface LaserClient {
      */
     @Post("/laser/4dage/managerSceneList")
     FdkkResponse sceneList(@JSONBody LaserSceneParam param);
+    /**
+     * 相机迁移
+     */
+    @Post("/laser/4dage/scene/migrate")
+    FdkkResponse migrate(@JSONBody LaserSceneMoveParam param);
 }

+ 13 - 0
src/main/java/com/fdkankan/manage/httpClient/param/LaserSceneMoveParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.manage.httpClient.param;
+
+import lombok.Data;
+
+@Data
+public class LaserSceneMoveParam {
+
+    private String phone;
+    private String sceneCode;
+    private String snCode;
+    private String toSnCode;
+    private Integer userId;
+}

+ 54 - 0
src/main/java/com/fdkankan/manage/httpClient/service/LaserService.java

@@ -4,28 +4,42 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.response.PageInfo;
+import com.fdkankan.common.response.Result;
+import com.fdkankan.common.util.DateUtil;
+import com.fdkankan.manage.entity.User;
 import com.fdkankan.manage.httpClient.client.LaserClient;
+import com.fdkankan.manage.httpClient.param.LaserSceneMoveParam;
 import com.fdkankan.manage.httpClient.param.LaserSceneParam;
 import com.fdkankan.manage.httpClient.vo.FdkkResponse;
+import com.fdkankan.manage.service.IUserService;
 import com.fdkankan.manage.vo.request.SceneParam;
 import com.fdkankan.manage.vo.response.SceneVo;
+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.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
+@Slf4j
 public class LaserService {
 
     @Resource
     LaserClient laserClient;
     @Value("${4dkk.laserService.basePath}")
     private String basePath;
+    @Autowired
+    IUserService userService;
 
     public PageInfo pageList(SceneParam param) {
         LaserSceneParam newParam = new LaserSceneParam();
@@ -85,4 +99,44 @@ public class LaserService {
             default: return "";
         }
     }
+
+    public void move(String num, String snCode, String toSnCode) {
+        LaserSceneMoveParam param = new LaserSceneMoveParam();
+        param.setSceneCode(num);
+        param.setSnCode(snCode);
+        param.setToSnCode(toSnCode);
+        laserClient.migrate(param);
+    }
+
+
+    private RestTemplate restTemplate = new RestTemplate();
+
+
+    public void copy(String snCode, String createTime, String newNum, Integer status, String sceneKey, String sceneName, Long userId){
+        String phone = null;
+        if(userId != null){
+            User user = userService.getById(userId);
+            if(user != null){
+                phone = user.getUserName();
+            }
+        }
+        String url = basePath + String.format("/laser/init/%s/saveOrEdit",newNum);
+        Map<String,Object> params = new HashMap<>();
+        params.put("childName",snCode);
+        params.put("createTime", createTime);
+        params.put("phone", phone);
+        params.put("sceneCode", newNum);
+        params.put("snCode",snCode);
+        params.put("status", status);
+        params.put("password", sceneKey);
+        params.put("title", sceneName);
+        params.put("userId", userId);
+        params.put("copy", true);
+        log.info("自研激光转台相机同步,url:{},params:{}",url, JSONObject.toJSONString(params));
+        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
+        log.info("自研激光转台相机同步,url:{},params:{},结果,{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
+            log.error("激光场景状态同步失败!");
+        }
+    }
 }

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

@@ -16,7 +16,7 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     ScenePlus getByNum(String sceneNum);
 
-    void copyV4Scene(ScenePlus scenePlus, String newNum, CameraDetail detailEntity) throws Exception;
+    void copyV4Scene(ScenePlus scenePlus, String newNum, CameraDetail detailEntity,String snCode) throws Exception;
 
     void unbindCamera(Long cameraId);
 }

+ 4 - 2
src/main/java/com/fdkankan/manage/service/ISceneProService.java

@@ -39,9 +39,9 @@ public interface ISceneProService extends IService<ScenePro> {
 
     ScenePro getByNum(String sceneNum);
 
-    void copyV3Scene(ScenePro scenePro, String newNum, CameraDetail detailEntity) throws Exception;
+    void copyV3Scene(ScenePro scenePro, String newNum, CameraDetail detailEntity,String snCode) throws Exception;
 
-    String setDataSource(String preDataSource, Integer sceneSource) throws Exception;
+    String setDataSource(String preDataSource,String time) throws Exception;
 
     ScenePro findByFileId(String concat);
 
@@ -54,4 +54,6 @@ public interface ISceneProService extends IService<ScenePro> {
     void updateSceneJson(String v3, String videos, String newNum, String sceneName, String webSite, String thumb, Long id) throws Exception;
 
     void uploadNewSceneToOss(String newNum);
+
+    void copyDataSource(String newDataSource,String oldDataSource,Integer sceneType,String time) throws Exception;
 }

+ 14 - 3
src/main/java/com/fdkankan/manage/service/impl/ScenePlusServiceImpl.java

@@ -2,6 +2,8 @@ package com.fdkankan.manage.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.util.DateUtil;
+import com.fdkankan.manage.httpClient.service.LaserService;
 import com.fdkankan.manage.util.MangerUploadToOssUtil;
 import com.fdkankan.manage.entity.*;
 import com.fdkankan.manage.mapper.IScenePlusMapper;
@@ -10,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -39,6 +42,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     MangerUploadToOssUtil mangeUploadToOssUtil;
     @Autowired
     ISceneProService sceneProService;
+    @Autowired
+    LaserService laserService;
 
     @Override
     public ScenePlus getByNum(String sceneNum) {
@@ -60,7 +65,7 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     }
 
     @Override
-    public void copyV4Scene(ScenePlus scenePlus,String newNum, CameraDetail cameraDetail) throws Exception {
+    public void copyV4Scene(ScenePlus scenePlus,String newNum, CameraDetail cameraDetail,String snCode) throws Exception {
         String num = scenePlus.getNum();
         Long plusId = scenePlus.getId();
         scenePlus.setSceneStatus(0);
@@ -83,8 +88,10 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         plusExt.setThumb(plusExt.getThumb().replace(num,newNum));
         plusExt.setVideos(videos);
         plusExt.setViewCount(0);
+        String oldDataSource = plusExt.getDataSource();
+        String time = DateUtil.date2String(new Date(),DateUtil.YYYYMMDDHHMMSSSSS_DATA_FORMAT);
 
-        String newDataSource = sceneProService.setDataSource(plusExt.getDataSource(), scenePlus.getSceneSource());
+        String newDataSource = sceneProService.setDataSource(plusExt.getDataSource(),time);
         plusExt.setDataSource(newDataSource);
         scenePlusExtService.save(plusExt);
 
@@ -114,6 +121,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         sceneEditControls.setEditInfoId(sceneEditInfo.getId());
         sceneEditControlsService.save(sceneEditControls);
 
+        sceneProService.copyDataSource(newDataSource,oldDataSource,scenePlus.getSceneType(),time);
+
         sceneProService.setQrCode("V3",newNum);
         sceneProService.copyOssSource("v4",num,newNum);
         sceneProService.copyLocalSource(num,newNum);
@@ -121,6 +130,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
         scenePlus.setSceneStatus(-2);
         this.updateById(scenePlus);
-
+        if(scenePlus.getSceneType() == 4){  //深时场景
+            laserService.copy(snCode,scenePlus.getCreateTime(),newNum,scenePlus.getSceneStatus(),sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId());
+        }
     }
 }

+ 54 - 39
src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.manage.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,11 +10,9 @@ import com.fdkankan.common.constant.SceneConstant;
 import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.response.PageInfo;
-import com.fdkankan.common.util.CreateObjUtil;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.common.util.MatrixToImageWriterUtil;
-import com.fdkankan.common.util.RandomUtil;
+import com.fdkankan.common.util.*;
 import com.fdkankan.manage.httpClient.service.LaserService;
+import com.fdkankan.manage.util.CreateObjUtilSelf;
 import com.fdkankan.manage.util.MangerUploadToOssUtil;
 import com.fdkankan.manage.common.CameraConstant;
 import com.fdkankan.manage.entity.*;
@@ -80,6 +79,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
     @Value("${scene.pro.new.url}")
     private String sceneProNewUrl;
+    @Value("${oss.bucket}")
+    private String bucket;
 
     @Override
     public ScenePro getByNum(String num) {
@@ -296,6 +297,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             scenePlus.setUserId(cameraDetail.getUserId());
             scenePlusService.updateById(scenePlus);
         }
+        if(cameraDetail.getType() == 10){       //深时场景
+            laserService.move(param.getNum(),oldCamera.getSnCode(),camera.getSnCode());
+        }
 
     }
 
@@ -307,18 +311,22 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
         }
         Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
-
+        Camera camera = cameraService.getById(cameraId);
+        if(camera == null){
+            throw new BusinessException(CameraConstant.FAILURE_CODE_6029, CameraConstant.FAILURE_MSG_6029);
+        }
         CameraDetail detailEntity = cameraDetailService.getByCameraId(cameraId);
         if(detailEntity == null){
             throw new BusinessException(CameraConstant.FAILURE_CODE_6029, CameraConstant.FAILURE_MSG_6029);
         }
         String newNum = scene3dNumService.generateSceneNum(detailEntity.getType());
 
+
         if(scenePro !=null){        //v3场景复制
-            this.copyV3Scene(scenePro,newNum,detailEntity);
+            this.copyV3Scene(scenePro,newNum,detailEntity,camera.getSnCode());
         }
         if(scenePlus != null){      //v4场景复制
-            scenePlusService.copyV4Scene(scenePlus,newNum,detailEntity);
+            scenePlusService.copyV4Scene(scenePlus,newNum,detailEntity,camera.getSnCode());
         }
     }
 
@@ -339,7 +347,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     }
 
     @Override
-    public void copyV3Scene(ScenePro oldScene,String newNum,CameraDetail cameraDetail) throws Exception {
+    public void copyV3Scene(ScenePro oldScene,String newNum,CameraDetail cameraDetail,String snCode) throws Exception {
         SceneProEdit oldEditScene = sceneProEditService.getByProId(oldScene.getId());
 
         String oldNum = oldScene.getNum();
@@ -353,7 +361,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         oldScene.setVideos(oldScene.getVideos().replace(oldNum,newNum));
         oldScene.setViewCount(0);
         String preDataSource = oldScene.getDataSource();
-        oldScene.setDataSource(this.setDataSource(preDataSource,oldScene.getSceneSource()));
+        String time = DateUtil.date2String(new Date(),DateUtil.YYYYMMDDHHMMSSSSS_DATA_FORMAT);
+        oldScene.setDataSource(this.setDataSource(preDataSource,time));
 
         this.save(oldScene);
 
@@ -377,6 +386,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             try {
                 log.info("开始复制场景-{}", new Date());
 
+                this.copyDataSource(oldScene.getDataSource(),preDataSource,oldScene.getSceneType(),time);
                 //oss复制计算结果资源
                 this.copyOssSource("v3",oldNum,newNum);
                 this.copyLocalSource(oldNum,newNum);
@@ -391,6 +401,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
                 log.error("复制场景异常", e);
             }
         });
+        if(oldScene.getSceneType() == 4){  //深时场景
+            laserService.copy(snCode,oldScene.getCreateTime(),newNum,oldScene.getStatus(),oldEditScene.getSceneKey(),oldScene.getSceneName(),oldScene.getUserId());
+        }
     }
 
     @Override
@@ -431,36 +444,12 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     }
 
     @Override
-    public String setDataSource(String preDataSource,Integer sceneSource) throws Exception {
-        String datasourceFix;
-        String newDataSource;
-        // 判断场景是否拷贝过
-        ScenePro entity;
-        do{
-            datasourceFix = RandomUtil.generateShortUuid();
-            entity = this.findByFileId(preDataSource.concat(datasourceFix));
-        }while(!ObjectUtils.isEmpty(entity));
-        newDataSource =  datasourceFix.concat(datasourceFix);
-
-        //oss复制源文件
-        String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
-        if(sceneSource.equals(4)){
-            buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
-        }
-        CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX +newDataSource.replace(buildModelPath, "")+"/", newDataSource);
-
-        List<String> urlList = new ArrayList<>();
-        FileUtils.readfilePath(newDataSource, urlList);
-        Map<String,String> fileMap = new HashMap<>();
-        for(String url : urlList){
-            fileMap.put(url, ConstantFilePath.OSS_PREFIX + url.replace(buildModelPath, ""));
-        }
-        mangeUploadToOssUtil.uploadMulFiles(fileMap);
-
-        FileUtils.delAllFile(newDataSource);
-
-        FileUtils.copyFolderAllFiles(preDataSource+"/",newDataSource+"/", true);
-        return datasourceFix.concat(datasourceFix);
+    public String setDataSource(String preDataSource,String time) throws Exception {
+        SnowflakeIdGenerator snowflakeIdGenerator = new SnowflakeIdGenerator(16,16);
+        String[] datasource = preDataSource.split("/");
+        datasource[4] = snowflakeIdGenerator.nextId()+"";
+        datasource[5] = datasource[3]+"_"+ time;
+        return  Arrays.stream(datasource).collect(Collectors.joining("/"));
     }
 
     @Override
@@ -522,4 +511,30 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             FileUtils.writeFile(filePath,content);
         }
     }
+
+    public void copyDataSource(String newDataSource,String oldDataSource,Integer sceneType,String time) throws Exception{
+        //oss复制源文件
+        String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
+        if(sceneType == 4){ //深时
+            buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
+        }
+        CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX + oldDataSource.replace(buildModelPath, "")+"/", newDataSource);
+
+        // 修改data.fdage
+        String data = FileUtils.readFile(newDataSource + "/data.fdage");
+        JSONObject jsonObject = JSONObject.parseObject(data);
+        if(ObjectUtils.isEmpty(jsonObject)){
+            log.error("data.fdage文件不存在");
+            throw new BusinessException(-1,"拷贝场景出错,data.fdage文件不存在");
+        }
+        jsonObject.put("uuidtime",time);
+        FileUtils.writeFile(newDataSource + "/data.fdage", jsonObject.toJSONString());
+        CreateObjUtilSelf.ossUtilCpFolder(newDataSource, bucket.concat("/" + ConstantFilePath.OSS_PREFIX + newDataSource.replace(buildModelPath, "")));
+
+
+        FileUtils.delAllFile(newDataSource);
+
+        FileUtils.copyFolderAllFiles(oldDataSource+"/",newDataSource+"/", true);
+    }
+
 }

+ 25 - 0
src/main/java/com/fdkankan/manage/util/CreateObjUtilSelf.java

@@ -0,0 +1,25 @@
+package com.fdkankan.manage.util;
+
+import com.fdkankan.common.util.ConstantCmd;
+import com.fdkankan.common.util.CreateObjUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+
+@Slf4j
+public class CreateObjUtilSelf extends CreateObjUtil {
+
+    static  String oss_folder ="bash /opt/ossutil/upload.sh %s %s";
+
+    public static void ossUtilCpFolder(String sourceFolder , String targetFolder){
+        File sourceFile = new File(sourceFolder);
+        if (!sourceFile.exists()) {
+            log.error("oss文件夹上传异常,文件夹不存在{}", sourceFolder);
+        }
+        String command = String.format(oss_folder,targetFolder,sourceFolder);
+        Long start = System.currentTimeMillis();
+        log.info("开始上传oss文件夹:" + command);
+        callshell(command);
+        log.info("oss文件夹上传完成,时间为:" + (System.currentTimeMillis() - start));
+    }
+}