Browse Source

Merge branch 'bug-lyh-34963' into test

# Conflicts:
#	src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java
#	src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java
lyhzzz 2 years ago
parent
commit
567b3edd41

+ 1 - 1
src/main/java/com/fdkankan/ucenter/common/BaseController.java

@@ -87,7 +87,7 @@ public class BaseController {
     }
 
     protected String getToken(){
-        if(org.apache.commons.lang3.StringUtils.isNotBlank(request.getHeader("token")) ){
+        if(org.apache.commons.lang3.StringUtils.isBlank(request.getHeader("token")) ){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004);
         }
         return request.getHeader("token");

+ 122 - 112
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
@@ -36,6 +37,7 @@ import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 
 import com.fdkankan.ucenter.util.RoamingPointUtil;
@@ -182,93 +184,95 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         scenePlus.setSceneStatus(0);
         this.save(scenePlus);
 
-        CompletableFuture.runAsync(() -> {
-            try {
-                // 拷贝场景编辑资源
-                String oldEditPath = String.format(UploadFilePath.EDIT_PATH, num);
-                String newEditPath = String.format(UploadFilePath.EDIT_PATH, newNum);
-                fYunFileServiceInterface.copyFileInBucket(oldEditPath, newEditPath);
-
-                // 拷贝场景展示资源
-                String oldViewPath = String.format(UploadFilePath.VIEW_PATH, num);
-                String newViewPath = String.format(UploadFilePath.VIEW_PATH, newNum);
-                fYunFileServiceInterface.copyFileInBucket(oldViewPath, newViewPath);
-
-                //复制计算结果文件
-                String oldResultPath = String.format(UploadFilePath.SCENE_RESULT_DATA_PATH, num);
-                String newResultPath = String.format(UploadFilePath.SCENE_RESULT_DATA_PATH, newNum);
-                fYunFileServiceInterface.copyFileInBucket(oldResultPath, newResultPath);
-
-                // 拷贝本地资源
-                String oldPath = String.format("/mnt/4Dkankan/scene/%s/caches/images", num);
-                String newPath = String.format("/mnt/4Dkankan/scene/%s/caches/images", newNum);
-                if(new File(oldPath).exists()){
-                    FileUtils.copyDirectiory(oldPath, newPath);
-                }
+        ExecutorService executor = ThreadUtil.newSingleExecutor();
+        try {
+            CompletableFuture.runAsync(() -> {
+                try {
+                    // 拷贝场景编辑资源
+                    String oldEditPath = String.format(UploadFilePath.EDIT_PATH, num);
+                    String newEditPath = String.format(UploadFilePath.EDIT_PATH, newNum);
+                    fYunFileServiceInterface.copyFileInBucket(oldEditPath, newEditPath);
+
+                    // 拷贝场景展示资源
+                    String oldViewPath = String.format(UploadFilePath.VIEW_PATH, num);
+                    String newViewPath = String.format(UploadFilePath.VIEW_PATH, newNum);
+                    fYunFileServiceInterface.copyFileInBucket(oldViewPath, newViewPath);
+
+                    //复制计算结果文件
+                    String oldResultPath = String.format(UploadFilePath.SCENE_RESULT_DATA_PATH, num);
+                    String newResultPath = String.format(UploadFilePath.SCENE_RESULT_DATA_PATH, newNum);
+                    fYunFileServiceInterface.copyFileInBucket(oldResultPath, newResultPath);
+
+                    // 拷贝本地资源
+                    String oldPath = String.format("/mnt/4Dkankan/scene/%s/caches/images", num);
+                    String newPath = String.format("/mnt/4Dkankan/scene/%s/caches/images", newNum);
+                    if(new File(oldPath).exists()){
+                        FileUtils.copyDirectiory(oldPath, newPath);
+                    }
 
-                String scenePath = ConstantFilePath.SCENE_V4_PATH + num;
-                File file = new File(scenePath);
-                if(file.exists()){
-                    String newScenePath = ConstantFilePath.SCENE_V4_PATH + newNum;
-                    FileUtils.copyDirectiory(scenePath, newScenePath);
-                }
-                String newVideos = plusExt.getVideos();
-                if(StrUtil.isNotEmpty(newVideos)){
-                    newVideos = plusExt.getVideos().replaceAll("/data/data" + num, "/scene_view_data/" + newNum + "/data").replaceAll(num, newNum);
-                }
+                    String scenePath = ConstantFilePath.SCENE_V4_PATH + num;
+                    File file = new File(scenePath);
+                    if(file.exists()){
+                        String newScenePath = ConstantFilePath.SCENE_V4_PATH + newNum;
+                        FileUtils.copyDirectiory(scenePath, newScenePath);
+                    }
+                    String newVideos = plusExt.getVideos();
+                    if(StrUtil.isNotEmpty(newVideos)){
+                        newVideos = plusExt.getVideos().replaceAll("/data/data" + num, "/scene_view_data/" + newNum + "/data").replaceAll(num, newNum);
+                    }
 
-                String oldDataSource  = plusExt.getDataSource();
-                String newDataSource =  sceneProService.setDataSource(plusExt.getDataSource(),time);
+                    String oldDataSource  = plusExt.getDataSource();
+                    String newDataSource =  sceneProService.setDataSource(plusExt.getDataSource(),time);
 
-                String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
-                if(scenePlus.getSceneSource().equals(4)){
-                    buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
-                }
-                sceneProService.copyFdage(oldDataSource,newDataSource,buildModelPath,time);
-
-                plusExt.setId(null);
-                plusExt.setPlusId(scenePlus.getId());
-                plusExt.setDataSource(newDataSource);
-                plusExt.setWebSite(plusExt.getWebSite().replace(num, newNum));
-                plusExt.setThumb(plusExt.getThumb().replace(num, newNum));
-                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);
-
-                if(scenePlus.getSceneSource() == 4){  //深时复制
-                    laserService.copy(num,scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,0,null,
-                            sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4",plusExt.getIsObj());
-                }
+                    String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
+                    if(scenePlus.getSceneSource().equals(4)){
+                        buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
+                    }
+                    sceneProService.copyFdage(oldDataSource,newDataSource,buildModelPath,time);
+
+                    plusExt.setId(null);
+                    plusExt.setPlusId(scenePlus.getId());
+                    plusExt.setDataSource(newDataSource);
+                    plusExt.setWebSite(plusExt.getWebSite().replace(num, newNum));
+                    plusExt.setThumb(plusExt.getThumb().replace(num, newNum));
+                    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);
+
+                    if(scenePlus.getSceneSource() == 4){  //深时复制
+                        laserService.copy(num,scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,0,null,
+                                sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4",plusExt.getIsObj());
+                    }
 
-                List<Surveillance> list = surveillanceService.list(new LambdaQueryWrapper<Surveillance>().eq(Surveillance::getNum, num));
-                if (!Objects.isNull(list)) {
-                    list.stream().forEach(item -> {
-                        item.setNum(newNum);
-                        item.setId(null);
-                        surveillanceService.save(item);
-                    });
-                }
+                    List<Surveillance> list = surveillanceService.list(new LambdaQueryWrapper<Surveillance>().eq(Surveillance::getNum, num));
+                    if (!Objects.isNull(list)) {
+                        list.stream().forEach(item -> {
+                            item.setNum(newNum);
+                            item.setId(null);
+                            surveillanceService.save(item);
+                        });
+                    }
 
                 //复制马赛克数据
                 String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
@@ -284,24 +288,24 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
                 sceneJson.setNum(newNum);
                 sceneJson.setCreateTime(scenePlus.getCreateTime());
 
-                sceneJson.setSceneResolution(plusExt.getSceneResolution());
-                sceneJson.setSceneFrom(plusExt.getSceneFrom());
-                sceneJson.setSceneKind(plusExt.getSceneKind());
-                sceneJson.setModelKind(plusExt.getModelKind());
-                if(StrUtil.isNotEmpty(plusExt.getVideos())){
-                    sceneJson.setVideos(plusExt.getVideos());
-                }
-                sceneJson.setMosaicList(sceneEditInfoService.getMosaicList(num));
+                    sceneJson.setSceneResolution(plusExt.getSceneResolution());
+                    sceneJson.setSceneFrom(plusExt.getSceneFrom());
+                    sceneJson.setSceneKind(plusExt.getSceneKind());
+                    sceneJson.setModelKind(plusExt.getModelKind());
+                    if(StrUtil.isNotEmpty(plusExt.getVideos())){
+                        sceneJson.setVideos(plusExt.getVideos());
+                    }
+                    sceneJson.setMosaicList(sceneEditInfoService.getMosaicList(num));
 
-                log.info("开始生成本地json文件……");
-                String sceneJsonLocalPath = ConstantFilePath.SCENE_PATH + "data" + File.separator + "data" + newNum + File.separator + "scene.json";
-                FileUtils.writeFile(sceneJsonLocalPath, JSON.toJSONString(sceneJson));
+                    log.info("开始生成本地json文件……");
+                    String sceneJsonLocalPath = ConstantFilePath.SCENE_PATH + "data" + File.separator + "data" + newNum + File.separator + "scene.json";
+                    FileUtils.writeFile(sceneJsonLocalPath, JSON.toJSONString(sceneJson));
 
-                String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", newNum);
-                fYunFileServiceInterface.uploadFile(JSON.toJSONBytes(sceneJson), sceneJsonPath);
+                    String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", newNum);
+                    fYunFileServiceInterface.uploadFile(JSON.toJSONBytes(sceneJson), sceneJsonPath);
 
-                //删除scenejson缓存
-                redisUtil.del(String.format(RedisKey.SCENE_JSON, num));
+                    //删除scenejson缓存
+                    redisUtil.del(String.format(RedisKey.SCENE_JSON, num));
 
                 // 生成二维码
                 this.createQrCode(newNum, scenePlus.getCameraId(), plusExt.getWebSite(), sceneEditInfoExt.getShareLogoImg(), SceneVersionType.V4.code());
@@ -314,24 +318,30 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
 
                 if(scenePlus.getPayStatus() == -2){
                     sceneProService.updateOssStatus(String.format(OssPath.v4_statusPath,scenePlus.getNum()),-2);
-                    sceneProService.updateOssStatus(String.format(OssPath.v4_scenePath,scenePlus.getNum()),-2);
                 }
 
-                log.info("复制场景结束-{}", new Date());
-                if(scenePlus.getSceneSource() == 4){  //深时复制
-                    String laserPath = laserService.copyDataSource(oldDataSource,plusExt.getDataSource());
-                    laserService.copy(num,scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,2,laserPath,
-                            sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4",plusExt.getIsObj());
-                } else if(!"aws".equals(NacosProperty.uploadType)){
-                    laserService.cloudPointBuild(num,newNum);
+                    if(scenePlus.getSceneSource() == 4){  //深时复制
+                        String laserPath = laserService.copyDataSource(oldDataSource,plusExt.getDataSource());
+                        laserService.copy(num,scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,2,laserPath,
+                                sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4",plusExt.getIsObj());
+                    } else if(!"aws".equals(NacosProperty.uploadType)){
+                        laserService.cloudPointBuild(num,newNum);
+                    }
+                    sceneCopyLogService.saveByNum(num,newNum,scenePlus.getUserId());
+
+                }catch (Exception e){
+                    this.removeById(scenePlus.getId());
+                    log.error("复制场景异常", e);
                 }
-                sceneCopyLogService.saveByNum(num,newNum,scenePlus.getUserId());
+            }, executor).whenComplete((reslut, e) -> {
+                log.info("复制场景oldNum:{},newNum:{}结束-{}",num,newNum, new Date());
+            });
+        }catch (Exception e){
+            log.error("线程错误:{}",e);
+        }finally {
+            executor.shutdown();
+        }
 
-            }catch (Exception e){
-                this.removeById(scenePlus.getId());
-                log.error("复制场景异常", e);
-            }
-        }).join();
         return scenePlus.getId();
     }
 

+ 43 - 38
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -272,7 +273,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
         List<Long> lockedIds = new ArrayList<>();
 
-        if(totalSpace == -1){
+        if(totalSpace == -1 && payStatus == 1){
             List<Long> collect = list.stream().map(ScenePro::getId).collect(Collectors.toList());
             List<Long> collect2 = plusList.stream().map(ScenePlus::getId).collect(Collectors.toList());
             lockedIds.addAll(collect);
@@ -284,7 +285,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         Long beyondSpace =  0L;
         Long accumulateSpace = 0L;
         if(payStatus == 1){
-            beyondSpace =  totalSpace - cameraDetail.getUsedSpace();
+            beyondSpace =  totalSpace - cameraDetail.getTotalSpace();
             getScenePlusLockedIds(lockedIds, plusList, beyondSpace, accumulateSpace);
             getSceneLockedIds(lockedIds,list,beyondSpace,accumulateSpace);
         }else {
@@ -358,13 +359,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         List<ScenePlus> plusList = scenePlusService.list(pluWr);
         for (ScenePro scenePro : proList) {
             this.updateOssStatus(String.format(OssPath.v3_statusPath,scenePro.getNum()),payStatus);
-            this.updateOssStatus(String.format(OssPath.v3_scenePath,scenePro.getNum()),payStatus);
-
         }
         for (ScenePlus scenePlus : plusList) {
             this.updateOssStatus(String.format(OssPath.v4_statusPath,scenePlus.getNum()),payStatus);
-            this.updateOssStatus(String.format(OssPath.v4_scenePath,scenePlus.getNum()),payStatus);
-
         }
 
     }
@@ -793,21 +790,23 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         sceneProEditService.save(oldEditScene);
 
         this.setQrCode(oldScene.getBuildType(), oldScene.getNum(), oldScene.getCameraId(), oldEditScene.getShareLogo());
-        CompletableFuture.runAsync(() -> {
-            try {
-                log.info("开始复制场景-{}", new Date());
-                String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
-                if(oldScene.getSceneSource().equals(4)){
-                    buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
-                }
-                this.copyFdage(preDataSource,newDataSource,buildModelPath,time);
-                //oss复制计算结果资源
-                downloadFromOldNumFromOss(oldNum, newNum);
-                // 复制本地secen.json
-                copyOldSceneLocalToNew(oldNum, newNum);
-                FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + newNum + File.separator + "scene.json", map);
-                //上传资源到oss
-                uploadNewSceneToOss(newNum);
+        ExecutorService executor = ThreadUtil.newSingleExecutor();
+        try {
+            CompletableFuture.runAsync(() -> {
+                try {
+                    log.info("开始复制场景-{}", new Date());
+                    String buildModelPath = ConstantFilePath.BUILD_MODEL_PATH;
+                    if(oldScene.getSceneSource().equals(4)){
+                        buildModelPath = ConstantFilePath.BUILD_MODEL_LASER_PATH;
+                    }
+                    this.copyFdage(preDataSource,newDataSource,buildModelPath,time);
+                    //oss复制计算结果资源
+                    downloadFromOldNumFromOss(oldNum, newNum);
+                    // 复制本地secen.json
+                    copyOldSceneLocalToNew(oldNum, newNum);
+                    FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + newNum + File.separator + "scene.json", map);
+                    //上传资源到oss
+                    uploadNewSceneToOss(newNum);
 
                 FileUtils.delFolder(ConstantFilePath.SCENE_PATH + "images/images" + newNum);
                 FileUtils.delFolder(ConstantFilePath.SCENE_PATH + "data/data" + newNum);
@@ -824,25 +823,31 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
                 oldScene.setStatus(-2);
                 this.updateById(oldScene);
 
-                cameraDetail.setUsedSpace(cameraDetail.getUsedSpace() + oldScene.getSpace());
-                cameraDetailService.updateById(cameraDetail);
-                if(oldScene.getPayStatus() == -2){
-                    this.updateOssStatus(String.format(OssPath.v3_statusPath,oldScene.getNum()),-2);
-                    this.updateOssStatus(String.format(OssPath.v3_scenePath,oldScene.getNum()),-2);
-                }
-                log.info("复制场景结束-{}", new Date());
-                if(oldScene.getSceneSource() == 4){  //深时复制
-                    String laserPath = laserService.copyDataSource(preDataSource,oldScene.getDataSource());
-                    laserService.copy(oldNum,oldScene.getCameraId(),oldScene.getCreateTime(),newNum,2,laserPath,
-                            oldEditScene.getSceneKey(),oldScene.getSceneName(),oldScene.getUserId(),"V3",oldScene.getIsObj());
+                    cameraDetail.setUsedSpace(cameraDetail.getUsedSpace() + oldScene.getSpace());
+                    cameraDetailService.updateById(cameraDetail);
+                    if(oldScene.getPayStatus() == -2){
+                        this.updateOssStatus(String.format(OssPath.v3_statusPath,oldScene.getNum()),-2);
+                    }
+                    if(oldScene.getSceneSource() == 4){  //深时复制
+                        String laserPath = laserService.copyDataSource(preDataSource,oldScene.getDataSource());
+                        laserService.copy(oldNum,oldScene.getCameraId(),oldScene.getCreateTime(),newNum,2,laserPath,
+                                oldEditScene.getSceneKey(),oldScene.getSceneName(),oldScene.getUserId(),"V3",oldScene.getIsObj());
+                    }
+                    sceneCopyLogService.saveByNum(oldNum,newNum,oldScene.getUserId());
+
+                } catch (Exception e) {
+                    this.removeById(oldScene.getId());
+                    log.error("复制场景异常", e);
                 }
-                sceneCopyLogService.saveByNum(oldNum,newNum,oldScene.getUserId());
+            }, executor).whenComplete((reslut, e) -> {
+                log.info("复制场景oldNum:{},newNum:{}结束-{}",oldNum,newNum, new Date());
+            });
+        }catch (Exception e){
+            log.error("线程错误:{}",e);
+        }finally {
+            executor.shutdown();
+        }
 
-            } catch (Exception e) {
-                this.removeById(oldScene.getId());
-                log.error("复制场景异常", e);
-            }
-        }).join();
         return oldScene.getId();
     }