Procházet zdrojové kódy

场景批量上传下载全景图异步操作 清除定时任务

dengsixing před 2 roky
rodič
revize
3299057dde

+ 27 - 0
src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.schedule;
+
+import com.fdkankan.scene.service.ISceneAsynOperLogService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@RefreshScope
+@Log4j2
+@Component
+public class ScheduleJob {
+
+    @Autowired
+    private ISceneAsynOperLogService sceneAsynOperLogService;
+
+    /**
+     * 每天凌晨一点执行
+     */
+    @Scheduled(cron="0 0/5 * * *")
+    public void cleanDownloadPanorama() {
+        log.info("定时清除全景图压缩包开始");
+        sceneAsynOperLogService.cleanDownloadPanorama();
+        log.info("定时清除全景图压缩包完毕");
+    }
+}

+ 2 - 0
src/main/java/com/fdkankan/scene/service/ISceneAsynOperLogService.java

@@ -19,4 +19,6 @@ public interface ISceneAsynOperLogService extends IService<SceneAsynOperLog> {
 
     ResultData getAsynOperLog(SceneAsynOperLogParamVO param);
 
+    void cleanDownloadPanorama();
+
 }

+ 53 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneAsynOperLogServiceImpl.java

@@ -1,19 +1,29 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.CommonOperStatus;
 import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.SceneAsynFuncType;
+import com.fdkankan.common.constant.SceneAsynModuleType;
+import com.fdkankan.common.constant.SceneAsynOperType;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.scene.entity.SceneAsynOperLog;
 import com.fdkankan.scene.mapper.ISceneAsynOperLogMapper;
 import com.fdkankan.scene.service.ISceneAsynOperLogService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.scene.vo.SceneAsynOperLogParamVO;
 import com.fdkankan.web.response.ResultData;
+import java.io.IOException;
+import java.util.Calendar;
 import java.util.List;
 import java.util.stream.Collectors;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -24,9 +34,14 @@ import org.springframework.stereotype.Service;
  * @author 
  * @since 2022-12-07
  */
+@Slf4j
 @Service
 public class SceneAsynOperLogServiceImpl extends ServiceImpl<ISceneAsynOperLogMapper, SceneAsynOperLog> implements ISceneAsynOperLogService {
 
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
+
+
     @Override
     public ResultData getAsynOperLog(SceneAsynOperLogParamVO param) {
 
@@ -62,4 +77,42 @@ public class SceneAsynOperLogServiceImpl extends ServiceImpl<ISceneAsynOperLogMa
 
         return ResultData.ok(list);
     }
+
+    @Override
+    public void cleanDownloadPanorama() {
+
+        List<SceneAsynOperLog> downloadList = this.list(
+            new LambdaQueryWrapper<SceneAsynOperLog>()
+                .eq(SceneAsynOperLog::getOperType, SceneAsynOperType.DOWNLOAD.code())
+                .eq(SceneAsynOperLog::getModule, SceneAsynModuleType.UPLOAD_DOWNLOAD.code())
+                .eq(SceneAsynOperLog::getFunc, SceneAsynFuncType.PANORAMIC_IMAGE));
+        if(CollUtil.isEmpty(downloadList)){
+            return;
+        }
+        DateTime preMonth = DateUtil.offsetMonth(Calendar.getInstance().getTime(), -1);
+        List<SceneAsynOperLog> deleteList = downloadList.parallelStream().filter(log -> {
+            if (log.getCreateTime().before(preMonth)) {
+                return Boolean.TRUE;
+            }
+            return false;
+        }).collect(Collectors.toList());
+        if(CollUtil.isEmpty(deleteList)){
+            return;
+        }
+
+        //删除数据库记录
+        List<Long> deleteIdList = deleteList.parallelStream().map(item -> item.getId()).collect(Collectors.toList());
+        this.removeByIds(deleteIdList);
+
+        deleteList.parallelStream().forEach(item -> {
+            if(StrUtil.isNotEmpty(item.getUrl())){
+                try {
+                    fYunFileService.deleteFile(item.getUrl());
+                } catch (IOException e) {
+                    log.warn("删除oss全景图下载压缩包失败,key:{}", item.getUrl());
+                }
+            }
+        });
+
+    }
 }

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

@@ -947,7 +947,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //查询是否存在等待中的异步操作记录,如果存在,抛出业务异常,终止操作
         this.checkSceneAsynOper(num, null, SceneAsynModuleType.UPLOAD_DOWNLOAD.code() , SceneAsynFuncType.PANORAMIC_IMAGE.code());
 
-        //清除全景图异步擦欧洲哦记录,防止再次下载的时候请求到旧的压缩包
+        //清除全景图异步操作记录,防止再次下载的时候请求到旧的压缩包
         sceneAsynOperLogService.remove(
             new LambdaQueryWrapper<SceneAsynOperLog>()
             .eq(SceneAsynOperLog::getNum, num)
@@ -1322,7 +1322,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
                     log.info("打包耗时:" + (end1 - start));
                     //上传压缩包
                     fYunFileService.uploadFileByCommand(bucket, zipPath, String.format(cacheFormat, num) + downloadName);
-                    String url = ossUrlPrefix + String.format(cacheFormat, num) + downloadName;
+                    String url = String.format(cacheFormat, num) + downloadName;
                     long end2 = Calendar.getInstance().getTimeInMillis();
                     log.info("上传耗时:" + (end2 - end1));
                     //删除本地压缩包