浏览代码

复制场景

lyhzzz 2 年之前
父节点
当前提交
4a53bb6b3e

+ 1 - 0
src/main/java/com/fdkankan/manage_jp/ManageApplication.java

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 

+ 26 - 0
src/main/java/com/fdkankan/manage_jp/config/ThreadPoolConfig.java

@@ -0,0 +1,26 @@
+package com.fdkankan.manage_jp.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+@Configuration
+@EnableAsync
+public class ThreadPoolConfig {
+
+    @Bean("taskExecutor")
+    public Executor taskExecutor() {
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        taskExecutor.setCorePoolSize(10);
+        taskExecutor.setMaxPoolSize(50);
+        taskExecutor.setQueueCapacity(200);
+        taskExecutor.setKeepAliveSeconds(60);
+        taskExecutor.setThreadNamePrefix("Thread-");
+        taskExecutor.setAwaitTerminationSeconds(60);
+        return taskExecutor;
+    }
+}
+

+ 92 - 92
src/main/java/com/fdkankan/manage_jp/service/impl/ScenePlusServiceImpl.java

@@ -16,7 +16,9 @@ import com.fdkankan.manage_jp.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.manage_jp.util.SceneResourcePath;
 import lombok.extern.slf4j.Slf4j;
+import org.bytedeco.javacpp.presets.opencv_core;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
@@ -96,100 +98,98 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         scenePlus.setId(null);
         this.save(scenePlus);
 
-        ExecutorService executor = ThreadUtil.newSingleExecutor();
-        CompletableFuture.runAsync(() -> {
-            String oldDataSource = plusExt.getDataSource();
-
-            String newDataSource = sceneCommonService.getNewDataSource(oldDataSource);
-
-            log.info("sceneCopy-V4-oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
-                    oldNum,oldDataSource,newNum,newDataSource);
-
-
-
-            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(newDataSource);
-            plusExt.setWebSite(plusExt.getWebSite().replace(oldNum, newNum));
-            plusExt.setThumb(plusExt.getThumb().replace(oldNum, 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);
-
-            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(scenePlus.getSceneSource() == 4){  //深时复制
-                laserService.copy(scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,0,null,
-                        sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4");
-            }else {
-                laserService.cloudPointBuild(oldNum,newNum);
-            }
-
-            try {
-                //重新生成编辑页基础设置二维码
-                sceneCommonService.createNewQrCode(SceneVersionType.V4.code(),sceneEditInfoExt.getShareLogoImg(),newNum,plusExt.getWebSite());
-                //copyDataSource
-                cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
-
-                this.copyOssAndNas(oldNum,newNum);
-
-                //修改 oss status.json ,nas scene.json
-                String targetData = String.format(SceneResourcePath.DATA_VIEW_PATH,newNum);
-                sceneCommonService.updateOssJson(targetData,oldNum,newNum,"v4");
-
-                sceneCommonService.updateNasSceneJson(targetData,oldNum,newNum,oldSceneName,scenePlus.getTitle(),"v4");
-
-                if(scenePlus.getSceneSource() == 4){  //深时复制
-                    String laserPath = laserService.copyDataSource(oldDataSource,plusExt.getDataSource());
-                    laserService.copy(scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,2,laserPath,
-                            sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4");
-                }
-                scenePlus.setSceneStatus(-2);
-                this.updateById(scenePlus);
-            }catch (Exception e){
-                log.error("复制场景失败-V4-sceneNum:{},error:{}",oldNum,e);
-                scenePlus.setSceneStatus(-1);
-                this.updateById(scenePlus);
-                throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
-            }
-        }, executor).whenComplete((reslut, e) -> {
-            log.info("copy-success-");
-        });
+        try {
+            v4Async(plusExt,oldNum,newNum,scenePlus,plusId,oldSceneName);
+        }catch (Exception e){
+            log.error("复制场景失败-sceneNum:{},error:{}",oldNum,e);
+            scenePlus.setSceneStatus(-1);
+            this.updateById(scenePlus);
+            throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
+        }
+        return scenePlus;
+    }
 
+    @Async
+    public void v4Async(ScenePlusExt plusExt, String oldNum,String newNum,ScenePlus scenePlus,Long plusId,String oldSceneName){
+        String oldDataSource = plusExt.getDataSource();
 
-        return scenePlus;
+        String newDataSource = sceneCommonService.getNewDataSource(oldDataSource);
+
+        log.info("sceneCopy-V4-oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
+                oldNum,oldDataSource,newNum,newDataSource);
+
+
+
+        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(newDataSource);
+        plusExt.setWebSite(plusExt.getWebSite().replace(oldNum, newNum));
+        plusExt.setThumb(plusExt.getThumb().replace(oldNum, 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);
+
+        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(scenePlus.getSceneSource() == 4){  //深时复制
+            laserService.copy(scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,0,null,
+                    sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4");
+        }else {
+            laserService.cloudPointBuild(oldNum,newNum);
+        }
+
+        //重新生成编辑页基础设置二维码
+        sceneCommonService.createNewQrCode(SceneVersionType.V4.code(),sceneEditInfoExt.getShareLogoImg(),newNum,plusExt.getWebSite());
+        //copyDataSource
+        cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
+
+        this.copyOssAndNas(oldNum,newNum);
+
+        //修改 oss status.json ,nas scene.json
+        String targetData = String.format(SceneResourcePath.DATA_VIEW_PATH,newNum);
+        sceneCommonService.updateOssJson(targetData,oldNum,newNum,"v4");
+
+        sceneCommonService.updateNasSceneJson(targetData,oldNum,newNum,oldSceneName,scenePlus.getTitle(),"v4");
+
+        if(scenePlus.getSceneSource() == 4){  //深时复制
+            String laserPath = laserService.copyDataSource(oldDataSource,plusExt.getDataSource());
+            laserService.copy(scenePlus.getCameraId(),scenePlus.getCreateTime(),newNum,2,laserPath,
+                    sceneEditInfo.getScenePassword(),scenePlus.getTitle(),scenePlus.getUserId(),"V4");
+        }
+        scenePlus.setSceneStatus(-2);
+        this.updateById(scenePlus);
     }
 
     private  void copyOssAndNas(String oldNum,String newNum){

+ 65 - 67
src/main/java/com/fdkankan/manage_jp/service/impl/SceneProServiceImpl.java

@@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
@@ -221,34 +222,44 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         scenePro.setStatus(0);
         this.save(scenePro);
 
-        ExecutorService executor = ThreadUtil.newSingleExecutor();
-        CompletableFuture.runAsync(() -> {
+        try {
+            v3Async(scenePro,oldNum,newNum,sceneProId,oldSceneName);
+        }catch (Exception e){
+            log.error("复制场景失败-sceneNum:{},error:{}",oldNum,e);
+            scenePro.setStatus(-1);
+            this.updateById(scenePro);
+            throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
+        }
+        return scenePro;
+    }
 
-            String oldDataSource = scenePro.getDataSource();
-            String newDataSource = sceneCommonService.getNewDataSource(oldDataSource);
+    @Async
+    public void v3Async(ScenePro scenePro,String oldNum,String newNum,Long sceneProId,String oldSceneName){
 
-            log.info("sceneCopy--oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
-                    oldNum,oldDataSource,newNum,newDataSource);
+        String oldDataSource = scenePro.getDataSource();
+        String newDataSource = sceneCommonService.getNewDataSource(oldDataSource);
 
-            scenePro.setDataSource(newDataSource);
-            this.updateById(scenePro);
+        log.info("sceneCopy--oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
+                oldNum,oldDataSource,newNum,newDataSource);
 
-            SceneProEdit oldEditScene = sceneProEditService.getByProId(sceneProId);
-            oldEditScene.setId(null);
-            oldEditScene.setProId(scenePro.getId());
-            oldEditScene.setScreencapVoiceSrc(oldEditScene.getScreencapVoiceSrc() == null ? null : oldEditScene.getScreencapVoiceSrc().replace(oldNum, scenePro.getNum()));
-            oldEditScene.setScreencapVoiceSound(oldEditScene.getScreencapVoiceSound() == null ? null : oldEditScene.getScreencapVoiceSound().replace(oldNum, scenePro.getNum()));
-            oldEditScene.setScreencapVoiceSoundsync(oldEditScene.getScreencapVoiceSoundsync() == null ? null : oldEditScene.getScreencapVoiceSoundsync().replace(oldNum, scenePro.getNum()));
-            oldEditScene.setPlayData(oldEditScene.getPlayData() == null ? null : oldEditScene.getPlayData().replace(oldNum, scenePro.getNum()));
-            oldEditScene.setScreencapThumb(oldEditScene.getScreencapThumb() == null ? null : oldEditScene.getScreencapThumb().replace(oldNum, scenePro.getNum()));
-            oldEditScene.setFloorPlanPng(oldEditScene.getFloorPlanPng() == null ? null : oldEditScene.getFloorPlanPng().replace(oldNum, scenePro.getNum()));
-            sceneProEditService.save(oldEditScene);
-
-            if(scenePro.getSceneSource() == 4){  //深时复制
-                laserService.copy(scenePro.getCameraId(),scenePro.getCreateTime(),newNum,0,null,
-                        oldEditScene.getSceneKey(),scenePro.getSceneName(),scenePro.getUserId(),"V3");
-            }
+        scenePro.setDataSource(newDataSource);
+        this.updateById(scenePro);
 
+        SceneProEdit oldEditScene = sceneProEditService.getByProId(sceneProId);
+        oldEditScene.setId(null);
+        oldEditScene.setProId(scenePro.getId());
+        oldEditScene.setScreencapVoiceSrc(oldEditScene.getScreencapVoiceSrc() == null ? null : oldEditScene.getScreencapVoiceSrc().replace(oldNum, scenePro.getNum()));
+        oldEditScene.setScreencapVoiceSound(oldEditScene.getScreencapVoiceSound() == null ? null : oldEditScene.getScreencapVoiceSound().replace(oldNum, scenePro.getNum()));
+        oldEditScene.setScreencapVoiceSoundsync(oldEditScene.getScreencapVoiceSoundsync() == null ? null : oldEditScene.getScreencapVoiceSoundsync().replace(oldNum, scenePro.getNum()));
+        oldEditScene.setPlayData(oldEditScene.getPlayData() == null ? null : oldEditScene.getPlayData().replace(oldNum, scenePro.getNum()));
+        oldEditScene.setScreencapThumb(oldEditScene.getScreencapThumb() == null ? null : oldEditScene.getScreencapThumb().replace(oldNum, scenePro.getNum()));
+        oldEditScene.setFloorPlanPng(oldEditScene.getFloorPlanPng() == null ? null : oldEditScene.getFloorPlanPng().replace(oldNum, scenePro.getNum()));
+        sceneProEditService.save(oldEditScene);
+
+        if(scenePro.getSceneSource() == 4){  //深时复制
+            laserService.copy(scenePro.getCameraId(),scenePro.getCreateTime(),newNum,0,null,
+                    oldEditScene.getSceneKey(),scenePro.getSceneName(),scenePro.getUserId(),"V3");
+        }
         /*
          *cp oss nas
          * data/data{SceneNum}
@@ -256,50 +267,37 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
          * video/video{SceneNum}
          * voice/voice{SceneNum}
          */
-
-            try {
-                //重新生成编辑页基础设置二维码
-                sceneCommonService.createNewQrCode(SceneVersionType.V3.code(),oldEditScene.getShareLogo(),newNum,scenePro.getWebSite());
-                //copyDataSource
-                cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
-
-                String sourceData = String.format(SceneResourcePath.dataPath, oldNum);
-                String targetData = String.format(SceneResourcePath.dataPath, scenePro.getNum());
-                this.copyOssAndNas(oldNum,scenePro.getNum(),sourceData,targetData);
-                //修改 oss status.json ,nas scene.json
-                sceneCommonService.updateOssJson(targetData,oldNum,newNum,"v3");
-                sceneCommonService.updateNasSceneJson(targetData,oldNum,newNum,oldSceneName,scenePro.getSceneName(),"v3");
-
-                String sourceImages = String.format(SceneResourcePath.imagesPath, oldNum);
-                String targetImages = String.format(SceneResourcePath.imagesPath, scenePro.getNum());
-                this.copyOssAndNas(oldNum,scenePro.getNum(),sourceImages,targetImages);
-
-                String sourceVideo = String.format(SceneResourcePath.videoPath, oldNum);
-                String targetVideo = String.format(SceneResourcePath.videoPath, scenePro.getNum());
-                this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVideo,targetVideo);
-
-                String sourceVoice = String.format(SceneResourcePath.voicePath, oldNum);
-                String targetVoice = String.format(SceneResourcePath.voicePath, scenePro.getNum());
-                this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVoice,targetVoice);
-
-                if(scenePro.getSceneSource() == 4){  //深时复制
-                    String laserPath = laserService.copyDataSource(oldDataSource,scenePro.getDataSource());
-                    laserService.copy(scenePro.getCameraId(),scenePro.getCreateTime(),newNum,2,laserPath,
-                            oldEditScene.getSceneKey(),scenePro.getSceneName(),scenePro.getUserId(),"V3");
-                }
-                scenePro.setStatus(-2);
-                this.updateById(scenePro);
-            }catch ( Exception e){
-                log.error("复制场景失败-sceneNum:{},error:{}",oldNum,e);
-                scenePro.setStatus(-1);
-                this.updateById(scenePro);
-                throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
-            }
-        }, executor).whenComplete((reslut, e) -> {
-            log.info("copy-success-");
-        });
-
-        return scenePro;
+        //重新生成编辑页基础设置二维码
+        sceneCommonService.createNewQrCode(SceneVersionType.V3.code(),oldEditScene.getShareLogo(),newNum,scenePro.getWebSite());
+        //copyDataSource
+        cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
+
+        String sourceData = String.format(SceneResourcePath.dataPath, oldNum);
+        String targetData = String.format(SceneResourcePath.dataPath, scenePro.getNum());
+        this.copyOssAndNas(oldNum,scenePro.getNum(),sourceData,targetData);
+        //修改 oss status.json ,nas scene.json
+        sceneCommonService.updateOssJson(targetData,oldNum,newNum,"v3");
+        sceneCommonService.updateNasSceneJson(targetData,oldNum,newNum,oldSceneName,scenePro.getSceneName(),"v3");
+
+        String sourceImages = String.format(SceneResourcePath.imagesPath, oldNum);
+        String targetImages = String.format(SceneResourcePath.imagesPath, scenePro.getNum());
+        this.copyOssAndNas(oldNum,scenePro.getNum(),sourceImages,targetImages);
+
+        String sourceVideo = String.format(SceneResourcePath.videoPath, oldNum);
+        String targetVideo = String.format(SceneResourcePath.videoPath, scenePro.getNum());
+        this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVideo,targetVideo);
+
+        String sourceVoice = String.format(SceneResourcePath.voicePath, oldNum);
+        String targetVoice = String.format(SceneResourcePath.voicePath, scenePro.getNum());
+        this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVoice,targetVoice);
+
+        if(scenePro.getSceneSource() == 4){  //深时复制
+            String laserPath = laserService.copyDataSource(oldDataSource,scenePro.getDataSource());
+            laserService.copy(scenePro.getCameraId(),scenePro.getCreateTime(),newNum,2,laserPath,
+                    oldEditScene.getSceneKey(),scenePro.getSceneName(),scenePro.getUserId(),"V3");
+        }
+        scenePro.setStatus(-2);
+        this.updateById(scenePro);
     }
 
     private void copyOssAndNas(String oldNum ,String newNum ,String sourcePath,String targetPath){