shiqian 3 rokov pred
rodič
commit
c610446430

+ 4 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/AjaxResult.java

@@ -157,6 +157,10 @@ public class AjaxResult extends HashMap<String, Object>
         return AjaxResult.error(msg, null);
     }
 
+    public static AjaxResult error(Object data) {
+        return new AjaxResult(HttpStatus.ERROR, "失败", data);
+    }
+
     /**
      * 返回错误消息
      * 

+ 9 - 0
boman-common/boman-common-redis/src/main/java/com/boman/common/redis/service/RedisService.java

@@ -34,6 +34,15 @@ public class RedisService
         redisTemplate.opsForValue().set(key, value);
     }
 
+    /**
+     * 功能描述: ttl
+     *
+     * @param key key
+     */
+    public <T> Long ttl(final String key) {
+        return redisTemplate.opsForValue().getOperations().getExpire(key);
+    }
+
     /**
      * 缓存基本的对象,Integer、String、实体类等
      *

+ 22 - 0
boman-modules/boman-file/src/main/java/com/boman/file/controller/ExcelController.java

@@ -1,8 +1,13 @@
 package com.boman.file.controller;
 
+import com.boman.common.core.utils.SecurityUtils;
+import com.boman.common.core.utils.obj.ObjectUtils;
+import com.boman.common.redis.RedisKey;
+import com.boman.common.redis.service.RedisService;
 import com.boman.domain.dto.AjaxResult;
 import com.boman.domain.dto.ExportExcelDto;
 import com.boman.file.service.ISysFileService;
+import com.boman.file.service.LocalSysFileServiceImpl;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -19,6 +24,8 @@ public class ExcelController {
 
     @Resource
     private ISysFileService fileService;
+    @Resource
+    private RedisService redisService;
 
     /**
      * 功能描述: 通用的导入接口
@@ -79,6 +86,21 @@ public class ExcelController {
         return AjaxResult.error("失败");
     }
 
+    /**
+     * 功能描述: 是否可以下载
+     *
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @GetMapping("/before/download")
+    public AjaxResult canDownloadIfOrNot() {
+        String redisKey = RedisKey.ASYNC_DOWNLOAD_SIGN + SecurityUtils.getUsername();
+        String sign = redisService.getCacheObject(redisKey);
+        if (LocalSysFileServiceImpl.DOWNLOADING.equals(sign)) {
+            return AjaxResult.success(false);
+        }
+
+        return AjaxResult.error(true);
+    }
 
     /**
      * 功能描述: 导出数据,只是sql不一样,其余的都是通用接口的内容

+ 16 - 4
boman-modules/boman-file/src/main/java/com/boman/file/service/LocalSysFileServiceImpl.java

@@ -1,6 +1,7 @@
 package com.boman.file.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.utils.poi.ExcelUtil;
 import com.boman.common.redis.RedisKey;
@@ -31,6 +32,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import static com.boman.common.core.utils.obj.ObjectUtils.map;
 
@@ -46,6 +48,7 @@ public class LocalSysFileServiceImpl implements ISysFileService
 {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(LocalSysFileServiceImpl.class);
+    public static final String DOWNLOADING = "downloading";
 
     @Resource
     private RemoteObjService remoteObjService;
@@ -201,26 +204,35 @@ public class LocalSysFileServiceImpl implements ISysFileService
         ExcelUtil<JSONObject> util = new ExcelUtil<>(JSONObject.class);
 
         ThreadPoolService.execute(() -> {
-            List<Map<String, Object>> list = null;
+            List<Map<String, Object>> list;
+            int size = 0;
             if (BooleanUtils.isTrue(empty)) {
                 list = new ArrayList<>(0);
             } else {
                 LOGGER.info("开始查询, 线程名称: {}", Thread.currentThread().getName());
                 long currentTimeMillis = System.currentTimeMillis();
                 list = getData(dto, tableName, columns);
-                LOGGER.info("查询到的数据长度为: {}", list.size());
-                LOGGER.info("查询耗时:{}秒", (System.currentTimeMillis() - currentTimeMillis) / 1000);
+                size = list.size();
+                LOGGER.info("查询到的数据长度为: {}, 查询耗时:{}秒", size, (System.currentTimeMillis() - currentTimeMillis) / 1000);
             }
 
             try {
                 util.asyncExportExcelCommon(new FileOutputStream(file), list, "sheet1", columns, empty, false);
+                long timeout = 1L;
+                if (size > 100000 && size < 500000) {
+                    timeout = 2L;
+                } else if(size > 500000){
+                    timeout = 4L;
+                }
+
+                redisService.setCacheObject(RedisKey.ASYNC_DOWNLOAD_SIGN + SecurityUtils.getUsername(), DOWNLOADING, timeout, TimeUnit.MINUTES);
             } catch (IOException e) {
                 LOGGER.error("导出失败", e);
                 e.printStackTrace();
             }
         });
 
-        redisService.setCacheObject("",null);
+
         return AjaxResult.success("成功", fileStaticPath);
     }