浏览代码

删除场景优化

dsx 1 年之前
父节点
当前提交
aa28fe0914

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

@@ -127,7 +127,7 @@ public class SceneController extends BaseController {
 
     @PostMapping("/delete")
     public ResultData delete(@RequestBody SceneParamVO param) throws Exception {
-        sceneService.delete(param.getSceneNum(),getUserId());
+        sceneService.delete(param);
         return ResultData.ok();
     }
 

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

@@ -50,6 +50,6 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     List<ScenePlus> getListByNums(List<String> numList);
 
-    void deleteByList(List<ScenePlus> plusList,Long userId) throws FileSystemException;
+    void deleteByList(List<ScenePlus> plusList, List<String> reserve, boolean reserveSource) throws FileSystemException;
 
 }

+ 2 - 1
src/main/java/com/fdkankan/scene/service/ISceneService.java

@@ -2,6 +2,7 @@ package com.fdkankan.scene.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.entity.Scene;
+import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.web.response.ResultData;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -15,7 +16,7 @@ public interface ISceneService extends IService<Scene> {
 
     ResultData getBodySegmentStatus(String uuid);
 
-    void delete(String sceneNum,Long userId) throws FileSystemException;
+    void delete(SceneParamVO param) throws FileSystemException;
 
     void copyScene(String newNum, String sceneNum, String userName, String dataSource, String bucket) throws Exception;
 

+ 38 - 22
src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 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;
@@ -59,6 +60,7 @@ import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -534,38 +536,52 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     }
 
     @Override
-    public void deleteByList(List<ScenePlus> plusList,Long userId) throws FileSystemException {
-        HashMap<Long ,Long >cameraMap = new HashMap<>();
+    public void deleteByList(List<ScenePlus> plusList, List<String> reserve, boolean reserveSource) throws FileSystemException {
         if(CollUtil.isEmpty(plusList)){
             return;
         }
         List<Long> plusIds = plusList.parallelStream().map(ScenePlus::getId).collect(Collectors.toList());
         HashMap<Long, ScenePlusExt> plusMap = scenePlusExtService.getByPlusIds(plusIds);
 
-        for (ScenePlus scenePlus : plusList) {
-            if(scenePlus.getCameraId()!= null && plusMap.get(scenePlus.getId())!=null){
-                cameraMap.merge(scenePlus.getCameraId(), plusMap.get(scenePlus.getId()).getSpace(), Long::sum);
-            }
-            sceneDelLogService.saveLog(scenePlus.getNum(),userId);
-        }
-
-        //删除编辑和展示文件
-        for (ScenePlus plus : plusList) {
-            ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(plus.getId());
-            String bucket = scenePlusExt.getYunFileBucket();
-            ossUtil.deleteObject(bucket, String.format(UploadFilePath.VIEW_PATH, plus.getNum()));
-            ossUtil.deleteObject(bucket, String.format(UploadFilePath.EDIT_PATH, plus.getNum()));
-        }
         scenePlusService.removeByIds(plusIds);
         scenePlusExtService.removeByPlusIds(plusIds);
 
-        //删除原始资源文件
-        for (Long key : plusMap.keySet()) {
-            ScenePlusExt ext = plusMap.get(key);
-            if(StrUtil.isNotEmpty(ext.getDataSource()) && ext.getDataSource().length() > 5){
-                FileUtil.del(ext.getDataSource());
+        ThreadUtil.execAsync(() -> {
+            //删除编辑和展示文件
+            for (ScenePlus plus : plusList) {
+                try {
+                    ScenePlusExt scenePlusExt = plusMap.get(plus.getId());
+                    String bucket = scenePlusExt.getYunFileBucket();
+                        ossUtil.deleteObject(bucket, String.format(UploadFilePath.EDIT_PATH, plus.getNum()));
+                    if(CollUtil.isEmpty(reserve)){
+                        ossUtil.deleteObject(bucket, String.format(UploadFilePath.VIEW_PATH, plus.getNum()));
+                    }else{
+                        ossUtil.deleteObject(bucket, String.format(UploadFilePath.USER_VIEW_PATH, plus.getNum()));
+                        List<String> viewFiles = ossUtil.listFiles(bucket, String.format(UploadFilePath.VIEW_PATH, plus.getNum()));
+                        viewFiles.stream().forEach(key -> {
+                            if(!reserve.stream().anyMatch(path -> key.contains(path))){
+                                try {
+                                    ossUtil.deleteObject(bucket, key);
+                                } catch (FileSystemException e) {
+                                    log.info("删除失败,key:{}", key);
+                                }
+                            }
+                        });
+                    }
+                } catch (FileSystemException e) {
+                    log.error("删除场景展示数据失败, num:{}", plus.getNum(), e);
+                }
             }
-        }
 
+            //删除原始资源文件
+            if(!reserveSource){
+                for (Long key : plusMap.keySet()) {
+                    ScenePlusExt ext = plusMap.get(key);
+                    if(StrUtil.isNotEmpty(ext.getDataSource()) && ext.getDataSource().length() > 5){
+                        FileUtil.del(ext.getDataSource());
+                    }
+                }
+            }
+        });
     }
 }

+ 4 - 2
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -31,6 +31,7 @@ import com.fdkankan.scene.mapper.ISceneMapper;
 import com.fdkankan.scene.oss.OssUtil;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.util.OssBodySegmentUtil;
+import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -191,14 +192,15 @@ public class SceneServiceImpl extends ServiceImpl<ISceneMapper, Scene> implement
     }
 
     @Override
-    public void delete(String sceneNum,Long userId) throws FileSystemException {
+    public void delete(SceneParamVO param) throws FileSystemException {
+        String sceneNum = param.getSceneNum();
         if(StringUtils.isEmpty(sceneNum)){
             throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
         }
         String[] nums = sceneNum.split(",");
         List<String> numList = Arrays.asList(nums);
         List<ScenePlus> plusList = scenePlusService.getListByNums(numList);
-        scenePlusService.deleteByList(plusList,userId);
+        scenePlusService.deleteByList(plusList, param.getReserve(),  param.isReserveSource());
     }
 
     @Override

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

@@ -183,4 +183,10 @@ public class SceneParamVO extends RequestBase implements Serializable {
 
     private String bucket;
 
+    //需要保留的目录
+    private List<String> reserve;
+
+    //是否需要保留计算目录,默认fasle(删除)
+    private boolean reserveSource;
+
 }