Parcourir la source

已删除v3场景原始资源清理定时任务

dsx il y a 2 ans
Parent
commit
a9c5ad7616
20 fichiers modifiés avec 386 ajouts et 120 suppressions
  1. 5 0
      src/main/java/com/fdkankan/scene/bean/SceneJsonBean.java
  2. 0 45
      src/main/java/com/fdkankan/scene/config/Test.java
  3. 6 0
      src/main/java/com/fdkankan/scene/entity/SceneCleanOrig.java
  4. 6 0
      src/main/java/com/fdkankan/scene/entity/SceneEditInfoExt.java
  5. 5 0
      src/main/java/com/fdkankan/scene/mapper/IScenePlusMapper.java
  6. 7 0
      src/main/java/com/fdkankan/scene/mapper/ISceneProMapper.java
  7. 102 26
      src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java
  8. 5 0
      src/main/java/com/fdkankan/scene/service/ICameraService.java
  9. 8 0
      src/main/java/com/fdkankan/scene/service/ISceneCleanOrigService.java
  10. 6 0
      src/main/java/com/fdkankan/scene/service/IScenePlusService.java
  11. 6 0
      src/main/java/com/fdkankan/scene/service/ISceneProService.java
  12. 11 0
      src/main/java/com/fdkankan/scene/service/impl/CameraServiceImpl.java
  13. 122 49
      src/main/java/com/fdkankan/scene/service/impl/SceneCleanOrigServiceImpl.java
  14. 16 0
      src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java
  15. 15 0
      src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java
  16. 13 0
      src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java
  17. 6 0
      src/main/java/com/fdkankan/scene/vo/SceneEditInfoParamVO.java
  18. 5 0
      src/main/java/com/fdkankan/scene/vo/SceneInfoVO.java
  19. 22 0
      src/main/resources/mapper/scene/ScenePlusMapper.xml
  20. 20 0
      src/main/resources/mapper/scene/SceneProMapper.xml

+ 5 - 0
src/main/java/com/fdkankan/scene/bean/SceneJsonBean.java

@@ -208,5 +208,10 @@ public class SceneJsonBean {
      */
     private Integer surveillances;
 
+    /**
+     * 分享信息
+     */
+    private JSONObject sns;
+
 
 }

+ 0 - 45
src/main/java/com/fdkankan/scene/config/Test.java

@@ -1,45 +0,0 @@
-package com.fdkankan.scene.config;
-
-/**
- * <p>
- *  这是一个测试类
- * </p>
- *
- * @author dengsixing
- * @date 2022/1/12
- **/
-public class Test {
-
-    /**
-     * 这是一个类属性
-     */
-    private static final String TEST = "test";
-
-
-    /**
-     * <p>
-     *   这是一个测试方法
-     * </p>
-     * @author dengsixing
-     * @date 2022/1/12
-     * @param id 主键id
-     * @param name  姓名
-     * @return java.lang.String
-     **/
-    public String test(long id, String name){
-        return id + "-" + name;
-    }
-
-    public static void main(String[] args) {
-
-        //方法体内的单行注释
-        String test =  Test.TEST;
-
-        /*
-          方法体内多行注释
-         */
-        String test1 = new Test().test(1, "zhangsan");
-        System.out.println(test1);
-
-    }
-}

+ 6 - 0
src/main/java/com/fdkankan/scene/entity/SceneCleanOrig.java

@@ -29,6 +29,12 @@ public class SceneCleanOrig implements Serializable {
     private String num;
 
     /**
+     * type
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
      * 0-处理中,1-成功,-1失败
      */
     @TableField("state")

+ 6 - 0
src/main/java/com/fdkankan/scene/entity/SceneEditInfoExt.java

@@ -91,6 +91,12 @@ public class SceneEditInfoExt {
     private String shareLogoImg;
 
     /**
+     * 分享配置信息
+     */
+    @TableField("sns_info")
+    private String snsInfo;
+
+    /**
      * 创建时间
      */
     @TableField("create_time")

+ 5 - 0
src/main/java/com/fdkankan/scene/mapper/IScenePlusMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -21,4 +22,8 @@ public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
 
     List<SceneBean> selectCleanOrigScene(Date time);
 
+    List<SceneBean> selectCleanOrigSceneDeleted(Date time);
+
+    List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, Date time);
+
 }

+ 7 - 0
src/main/java/com/fdkankan/scene/mapper/ISceneProMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -21,4 +22,10 @@ public interface ISceneProMapper extends BaseMapper<ScenePro> {
 
     List<SceneBean> selectCleanOrigScene(Date time);
 
+    List<SceneBean> listCleanOss4DeletedScene(Date time);
+
+    List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, Date time);
+
+
+
 }

+ 102 - 26
src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.schedule;
 
+import cn.hutool.core.util.StrUtil;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
@@ -8,6 +9,7 @@ import com.fdkankan.scene.service.ISceneAsynOperLogService;
 import com.fdkankan.scene.service.ISceneCleanOrigService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -19,6 +21,9 @@ import javax.annotation.PostConstruct;
 @Component
 public class ScheduleJob {
 
+    @Value("${environment:#{null}}")
+    private String environment;
+
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
     @Autowired
@@ -36,43 +41,114 @@ public class ScheduleJob {
         log.info("定时清除全景图压缩包完毕");
     }
 
-    /**
-     * 删除场景原始资源
-     * 每天凌晨执行
-     */
-    @Scheduled(cron="0 0 1 * * ?")
-    public void cleanOssHomeV3() {
-        log.info("删除v3场景原始资源开始");
-        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V3;
-        try {
-            boolean lock = redisLockUtil.lock(lockKey, RedisKey.CAMERA_EXPIRE_7_TIME);
-            if(!lock){
-                return;
-            }
-            sceneCleanOrigService.cleanOrigV3();
-        }finally {
-            redisLockUtil.unlockLua(lockKey);
-        }
-        log.info("删除v3场景原始资源结束");
-    }
+//    /**
+//     * 删除场景原始资源
+//     * 每天凌晨执行
+//     */
+//    @Scheduled(cron="0 0 1 * * ?")
+//    public void cleanOssHomeV3() {
+//        log.info("删除v3场景原始资源开始");
+//        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V3;
+//        try {
+//            boolean lock = redisLockUtil.lock(lockKey, 24*60*60);
+//            if(!lock){
+//                return;
+//            }
+//            sceneCleanOrigService.cleanOrigV3();
+//        }finally {
+//            redisLockUtil.unlockLua(lockKey);
+//        }
+//        log.info("删除v3场景原始资源结束");
+//    }
+//
+//    /**
+//     * 删除场景原始资源
+//     * 每天凌晨执行
+//     */
+//    @Scheduled(cron="0 0 1 * * ?")
+//    public void cleanOssHomeV4() {
+//        log.info("删除v4场景原始资源开始");
+//        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V4;
+//        try {
+//            boolean lock = redisLockUtil.lock(lockKey, 24*60*60);
+//            if(!lock){
+//                return;
+//            }
+//            sceneCleanOrigService.cleanOrigV4();
+//        }finally {
+//            redisLockUtil.unlockLua(lockKey);
+//        }
+//        log.info("删除v4场景原始资源结束");
+//    }
 
     /**
-     * 删除场景原始资源
+     * 删除已删除场景原始资源及caches
      * 每天凌晨执行
      */
+    @PostConstruct
     @Scheduled(cron="0 0 1 * * ?")
-    public void cleanOssHomeV4() {
-        log.info("删除v4场景原始资源开始");
-        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_ORIG_V4;
+    public void cleanOss4DeletedSceneV3() {
+        log.info("删除已删除V3场景原始资源开始");
+        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_DELETED_ORIG_V3;
         try {
-            boolean lock = redisLockUtil.lock(lockKey, RedisKey.CAMERA_EXPIRE_7_TIME);
+            boolean lock = redisLockUtil.lock(lockKey, 24*60*60);
             if(!lock){
                 return;
             }
-            sceneCleanOrigService.cleanOrigV4();
+            sceneCleanOrigService.cleanOss4DeletedSceneV3();
         }finally {
             redisLockUtil.unlockLua(lockKey);
         }
-        log.info("删除v4场景原始资源结束");
+        log.info("删除已删除V3场景原始资源结束");
     }
+
+
+//    /**
+//     * 删除已删除场景原始资源及caches
+//     * 每天凌晨执行
+//     */
+//    @Scheduled(cron="0 0 1 * * ?")
+//    public void cleanOss4DeletedSceneV4() {
+//        log.info("删除已删除V4场景原始资源开始");
+//        String lockKey = RedisLockKey.LOCK_CLEAN_SCENE_DELETED_ORIG_V4;
+//        try {
+//            boolean lock = redisLockUtil.lock(lockKey, 24*60*60);
+//            if(!lock){
+//                return;
+//            }
+//            sceneCleanOrigService.cleanOss4DeletedSceneV4();
+//        }finally {
+//            redisLockUtil.unlockLua(lockKey);
+//        }
+//        log.info("删除已删除V4场景原始资源结束");
+//    }
+
+//    /**
+//     * 删除测试相机场景原始资源及caches
+//     * 每天凌晨执行
+//     */
+//    @Scheduled(cron="0 0 1 * * ?")
+//    public void cleanOss4TestCameraV3() {
+//        if(StrUtil.isEmpty(environment) || !environment.equals("dev")){
+//            return;
+//        }
+//        log.info("删除已删除V4场景原始资源开始");
+//        sceneCleanOrigService.cleanOss4TestCameraV3();
+//        log.info("删除已删除V4场景原始资源结束");
+//    }
+//
+//
+//    /**
+//     * 删除测试相机场景原始资源及caches
+//     * 每天凌晨执行
+//     */
+//    @Scheduled(cron="0 0 1 * * ?")
+//    public void cleanOss4TestCameraV4() {
+//        if(StrUtil.isEmpty(environment) || !environment.equals("dev")){
+//            return;
+//        }
+//        log.info("删除已删除V4场景原始资源开始");
+//        sceneCleanOrigService.cleanOss4TestCameraV4();
+//        log.info("删除已删除V4场景原始资源结束");
+//    }
 }

+ 5 - 0
src/main/java/com/fdkankan/scene/service/ICameraService.java

@@ -3,6 +3,8 @@ package com.fdkankan.scene.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.entity.Camera;
 
+import java.util.List;
+
 /**
  * <p>
  * 相机主表 服务类
@@ -15,4 +17,7 @@ public interface ICameraService extends IService<Camera> {
 
     Camera findByChildName(String childName);
 
+    List<Camera> listBySnCodes(List<String> snCodes);
+
+
 }

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

@@ -17,4 +17,12 @@ public interface ISceneCleanOrigService extends IService<SceneCleanOrig> {
 
     void cleanOrigV4();
 
+    void cleanOss4DeletedSceneV3();
+
+    void cleanOss4DeletedSceneV4();
+
+    void cleanOss4TestCameraV3();
+
+    void cleanOss4TestCameraV4();
+
 }

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

@@ -5,6 +5,8 @@ import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.scene.vo.BaseSceneParamVO;
 import java.util.List;
+import java.util.Set;
+
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.vo.SceneCheckKeyParamVO;
 import org.springframework.web.multipart.MultipartFile;
@@ -37,4 +39,8 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     List<SceneBean> listCleanOrigScene(int cleanOrigMonth);
 
+    List<SceneBean> listCleanOss4DeletedScene(int cleanOrigMonth);
+
+    List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, int cleanOrigMonth);
+
 }

+ 6 - 0
src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -15,6 +15,8 @@ import com.fdkankan.scene.vo.SceneEditParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
 import java.util.List;
+import java.util.Set;
+
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -52,4 +54,8 @@ public interface ISceneProService extends IService<ScenePro> {
 
     List<SceneBean> listCleanOrigScene(int cleanOrigMonth);
 
+    List<SceneBean> listCleanOss4DeletedScene(int month);
+
+    List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, int month);
+
 }

+ 11 - 0
src/main/java/com/fdkankan/scene/service/impl/CameraServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.scene.entity.Camera;
@@ -7,6 +8,8 @@ import com.fdkankan.scene.mapper.ICameraMapper;
 import com.fdkankan.scene.service.ICameraService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 相机主表 服务实现类
@@ -22,4 +25,12 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     public Camera findByChildName(String childName) {
         return this.getOne(new LambdaQueryWrapper<Camera>().eq(Camera::getChildName, childName));
     }
+
+    @Override
+    public List<Camera> listBySnCodes(List<String> snCodes) {
+        if(CollUtil.isEmpty(snCodes)){
+            return null;
+        }
+        return this.list(new LambdaQueryWrapper<Camera>().in(Camera::getSnCode, snCodes));
+    }
 }

+ 122 - 49
src/main/java/com/fdkankan/scene/service/impl/SceneCleanOrigServiceImpl.java

@@ -8,21 +8,22 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.CommonSuccessStatus;
+import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.OperationType;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
 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.Camera;
 import com.fdkankan.scene.entity.SceneCleanOrig;
 import com.fdkankan.scene.mapper.ISceneCleanOrigMapper;
 import com.fdkankan.scene.mapper.IScenePlusExtMapper;
-import com.fdkankan.scene.service.ISceneCleanOrigService;
+import com.fdkankan.scene.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-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;
@@ -30,10 +31,8 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
 import sun.font.TextRecord;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -50,6 +49,15 @@ public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper
 
     @Value("${scene.cleanOrig.month}")
     private Integer cleanOrigMonth;
+    @Value("${scene.cleanDeleted.month}")
+    private Integer cleanDeletedMonth;
+    @Value("#{'${scene.cleanTestCamera.snCode:}'.split(',')}")
+    private List<String> testSnCodeList;
+    @Value("${scene.cleanTestCamera.month}")
+    private Integer cleanTestCameraMonth;
+    @Autowired
+    private ICameraService cameraService;
+
 
     @Autowired
     private ISceneProService sceneProService;
@@ -66,73 +74,68 @@ public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper
     public void cleanOrigV4() {
         //查询所有计算时间超过限定时间的场景,计算成功、未被删除、最后一次计算后未被删除过的
         List<SceneBean> sceneBeans = scenePlusService.listCleanOrigScene(cleanOrigMonth);
-        if(CollUtil.isEmpty(sceneBeans)){
-            return;
-        }
-
-        sceneBeans.parallelStream().forEach(scene->{
-            this.cleanOrigHandler(scene);
-        });
+        this.cleanOrig(sceneBeans);
     }
 
     @Override
     public void cleanOrigV3() {
         //查询所有计算时间超过限定时间的场景,计算成功、未被删除
         List<SceneBean> sceneBeans = sceneProService.listCleanOrigScene(cleanOrigMonth);
+        this.cleanOrig(sceneBeans);
+
+    }
+
+    private void cleanOrig(List<SceneBean> sceneBeans){
         if(CollUtil.isEmpty(sceneBeans)){
             return;
         }
-
         sceneBeans.parallelStream().forEach(scene->{
-            this.cleanOrigHandler(scene);
+            boolean lock = this.lock(scene.getDataSource());
+            try {
+                if(lock) {
+                    this.cleanOrigHandler(scene);
+                    this.saveLog(scene.getNum(), 1, CommonSuccessStatus.SUCCESS.code(), null);
+                }
+            }catch (Exception e){
+                log.error("删除原始资源失败,num : " + scene.getNum(), e);
+                this.saveLog(scene.getNum(), 1, CommonSuccessStatus.FAIL.code(), ExceptionUtil.stacktraceToString(e, 3000));
+            }finally {
+                this.releaseLock(scene.getDataSource());
+            }
         });
     }
 
     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 = fYunFileService.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{
-                        fYunFileService.deleteFolder(homePath);
-                    }
+        String dataSource = scene.getDataSource();
+        if(StrUtil.isNotEmpty(dataSource)){
+            String homePath = dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, ConstantFilePath.OSS_PREFIX);
+            //由于国内测试和生产用的bucket是同一个,这里需要做一个安全校验,保证不会删错
+            String fileContent = fYunFileService.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)){
+                    throw new RuntimeException("dataSource与data.fdage文件不匹配");
+                }else{
+                    fYunFileService.deleteFolder(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){
+    private void saveLog(String num, int type, int status, String reason){
         //清除旧的日志
         this.remove(new LambdaQueryWrapper<SceneCleanOrig>().eq(SceneCleanOrig::getNum, num));
         SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
         sceneCleanOrig.setNum(num);
+        sceneCleanOrig.setType(type);
         sceneCleanOrig.setState(status);
         sceneCleanOrig.setReason(reason);
         this.saveOrUpdate(sceneCleanOrig);
@@ -158,4 +161,74 @@ public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper
         redisUtil.del(String.format(RedisKey.SCENE_OSS_HOME_DIR_DELETE, uuid));
     }
 
+
+    @Override
+    public void cleanOss4DeletedSceneV3() {
+        List<SceneBean> sceneBeans = sceneProService.listCleanOss4DeletedScene(cleanDeletedMonth);
+        this.cleanOrig4Delete(sceneBeans, false, 2);
+    }
+
+    @Override
+    public void cleanOss4DeletedSceneV4() {
+        //查询所有计算时间超过限定时间的场景,计算成功、未被删除、最后一次计算后未被删除过的
+        List<SceneBean> sceneBeans = scenePlusService.listCleanOss4DeletedScene(cleanDeletedMonth);
+        this.cleanOrig4Delete(sceneBeans, true, 2);
+    }
+
+    /**
+     * 删除已删除场景的原始资源及caches目录(v3场景不需要删除caches目录)
+     * @param sceneBeans
+     * @param deleteCaches 是否需要删除caches目录
+     */
+    private void cleanOrig4Delete(List<SceneBean> sceneBeans, boolean deleteCaches, Integer type){
+        if(CollUtil.isEmpty(sceneBeans)){
+            return;
+        }
+        sceneBeans.parallelStream().forEach(scene->{
+            try {
+                //删除caches文件
+                if(deleteCaches){
+                    this.deleteResultCaches(scene.getNum());
+                }
+                //删除原始资源
+                this.cleanOrigHandler(scene);
+
+                this.saveLog(scene.getNum(), type, CommonSuccessStatus.SUCCESS.code(), null);
+            }catch (Exception e){
+                log.error("删除已删除场景资源失败,num : " + scene.getNum(), e);
+                this.saveLog(scene.getNum(), type, CommonSuccessStatus.FAIL.code(), ExceptionUtil.stacktraceToString(e, 3000));
+            }
+        });
+    }
+
+    private void deleteResultCaches(String num){
+        String cachesPath = String.format(UploadFilePath.scene_result_data_path, num).concat("caches");
+        if(CollUtil.isEmpty(fYunFileService.listRemoteFiles(cachesPath))){
+            return;
+        }
+        fYunFileService.deleteFolder(cachesPath);
+    }
+
+    @Override
+    public void cleanOss4TestCameraV3() {
+        List<Camera> cameras = cameraService.listBySnCodes(testSnCodeList);
+        if(CollUtil.isEmpty(cameras)){
+            return;
+        }
+        Set<Long> cameraIds = cameras.stream().map(Camera::getId).collect(Collectors.toSet());
+        List<SceneBean> sceneBeans = sceneProService.listCleanOss4TestCamera(cameraIds, cleanTestCameraMonth);
+        this.cleanOrig4Delete(sceneBeans, false, 3);
+    }
+
+    @Override
+    public void cleanOss4TestCameraV4() {
+        List<Camera> cameras = cameraService.listBySnCodes(testSnCodeList);
+        if(CollUtil.isEmpty(cameras)){
+            return;
+        }
+        Set<Long> cameraIds = cameras.stream().map(Camera::getId).collect(Collectors.toSet());
+        List<SceneBean> sceneBeans = scenePlusService.listCleanOss4TestCamera(cameraIds, cleanTestCameraMonth);
+        this.cleanOrig4Delete(sceneBeans, true, 3);
+    }
+
 }

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

@@ -195,6 +195,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             sceneEditInfo.setVersion(sceneEditInfoDb.getVersion() + 1);
             this.updateById(sceneEditInfo);
         }
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
+        if(Objects.nonNull(param.getSns())){
+            sceneEditInfoExt.setSnsInfo(JSON.toJSONString(param.getSns()));
+        }
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
 
         if(Objects.nonNull(param.getControls())){
             SceneEditControls sceneEditControls = BeanUtil.copyProperties(param.getControls(), SceneEditControls.class);
@@ -286,6 +291,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //发布马赛克列表
         sceneJson.setMosaicList(this.getMosaicList(num));
 
+        //发布分享配置
+        sceneJson.setSns(JSON.parseObject(sceneEditInfoExt.getSnsInfo()));
+
         //处理热点数据,生成hot.json
         this.publicHotData(num, sceneEditInfo, bucket);
 
@@ -298,6 +306,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //发布摄像头数据
         this.publicSurveillance(num, sceneEditInfoExt.getSurveillances(), bucket);
 
+
         //本地写sceneJson文件
         String localSceneJsonPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "scene.json";
         FileUtils.writeFile(localSceneJsonPath, JSON.toJSONString(sceneJson));
@@ -485,6 +494,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             sceneInfoVO.setMosaicList(this.getMosaicList(num));
         }
         sceneInfoVO.setSpace(FileSizeUtil.convert(scenePlusExt.getSpace(), FileSizeUnitType.MB.code()));
+        sceneInfoVO.setSns(JSON.parseObject(sceneEditInfoExt.getSnsInfo()));
 
         this.SortBoxVideos(sceneInfoVO);
 
@@ -493,6 +503,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         return sceneInfoVO;
     }
 
+    public static void main(String[] args) {
+        String test = "";
+        JSONObject jsonObject = JSON.parseObject(test);
+        System.out.println(jsonObject);
+    }
+
     private void SortBoxVideos(SceneInfoVO sceneInfoVO){
         String boxVideos = sceneInfoVO.getBoxVideos();
         if(StrUtil.isEmpty(boxVideos)){

+ 15 - 0
src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java

@@ -251,4 +251,19 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -cleanOrigMonth));
         return this.baseMapper.selectCleanOrigScene(time);
     }
+
+    @Override
+    public List<SceneBean> listCleanOss4DeletedScene(int month) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -month));
+        return this.baseMapper.selectCleanOrigSceneDeleted(time);
+    }
+
+    @Override
+    public List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, int month) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -month));
+        return this.baseMapper.listCleanOss4TestCamera(cameraIds, time);
+
+    }
 }

+ 13 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -1135,4 +1135,17 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         return this.baseMapper.selectCleanOrigScene(time);
     }
 
+    @Override
+    public List<SceneBean> listCleanOss4DeletedScene(int month) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -month));
+        return this.baseMapper.listCleanOss4DeletedScene(time);
+    }
+
+    @Override
+    public List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, int month) {
+        Date time = Calendar.getInstance().getTime();
+        time = DateUtil.beginOfDay(DateUtil.offset(time, DateField.MONTH, -month));
+        return this.baseMapper.listCleanOss4TestCamera(cameraIds, time);
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.vo;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -73,6 +74,11 @@ public class SceneEditInfoParamVO extends BaseSceneParamVO{
 
     private SceneEditControlsParamVO controls;
 
+    /**
+     * 分享配置
+     */
+    private JSONObject sns;
+
 
 
 

+ 5 - 0
src/main/java/com/fdkankan/scene/vo/SceneInfoVO.java

@@ -234,5 +234,10 @@ public class SceneInfoVO {
      */
     private Integer space;
 
+    /**
+     * 分享信息
+     */
+    private JSONObject sns;
+
 
 }

+ 22 - 0
src/main/resources/mapper/scene/ScenePlusMapper.xml

@@ -11,4 +11,26 @@
         and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = plus.num and ext.algorithm_time <![CDATA[ < ]]> o.create_time)
     </select>
 
+    <select id="selectCleanOrigSceneDeleted" resultType="com.fdkankan.scene.bean.SceneBean">
+        select plus.num, ext.data_source
+        from t_scene_plus plus
+        left join t_scene_plus_ext ext on plus.id = ext.plus_id
+        where plus.rec_status = 'I' and plus.update_time <![CDATA[ < ]]> #{time}
+        and ext.data_source is NOT null
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = plus.num and o.type = 2)
+    </select>
+
+    <select id="listCleanOss4TestCamera" resultType="com.fdkankan.scene.bean.SceneBean">
+        select plus.num, ext.data_source
+        from t_scene_plus plus
+        left join t_scene_plus_ext ext on plus.id = ext.plus_id
+        where plus.scene_status in (1,-2) and plus.rec_status = 'A' and ext.algorithm_time <![CDATA[ < ]]> #{time}
+        and ext.data_source is NOT null
+        and plus.camera_id in
+        <foreach collection="cameraIds" item="cameraId" open="(" close=")" separator=",">
+            #{cameraId}
+        </foreach>
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = plus.num and o.type = 3 and ext.algorithm_time <![CDATA[ < ]]> o.create_time)
+    </select>
+
 </mapper>

+ 20 - 0
src/main/resources/mapper/scene/SceneProMapper.xml

@@ -10,4 +10,24 @@
         and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = pro.num and pro.create_time <![CDATA[ < ]]> o.create_time)
     </select>
 
+    <select id="listCleanOss4DeletedScene" resultType="com.fdkankan.scene.bean.SceneBean">
+        select pro.num, pro.data_source
+        from t_scene_pro pro
+        where pro.rec_status = 'I' and pro.update_time <![CDATA[ < ]]> #{time}
+        and pro.data_source is not null
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = pro.num and o.type = 2)
+    </select>
+
+    <select id="listCleanOss4TestCamera" resultType="com.fdkankan.scene.bean.SceneBean">
+        select pro.num, pro.data_source
+        from t_scene_pro pro
+        where pro.status in (1,-2) and pro.rec_status = 'A' and pro.create_time <![CDATA[ < ]]> #{time}
+        and pro.data_source is not null
+        and pro.camera_id in
+        <foreach collection="cameraIds" item="cameraId" open="(" close=")" separator=",">
+            #{cameraId}
+        </foreach>
+        and NOT EXISTS (select o.num from t_scene_clean_orig o where o.rec_status = 'A' and o.num = pro.num and o.type = 3 and pro.create_time <![CDATA[ < ]]> o.create_time)
+    </select>
+
 </mapper>