浏览代码

fix 修改下载接口,异步下载

DYH2020 2 年之前
父节点
当前提交
e7b5a1adee

+ 5 - 0
src/main/java/com/ywt/mg/domain/models/ConstantDef.java

@@ -90,4 +90,9 @@ public class ConstantDef {
      * 本地的下载文件路径
      */
     public static final String LOCAL_DOWNLOAD_FILE_PATH = "./download_file/";
+
+    /**
+     * excel的后缀格式
+     */
+    public static final String EXCEL_SUFFIX_FORMAT = ".xls";
 }

+ 11 - 0
src/main/java/com/ywt/mg/params/offline/DownloadOfflineListNewRequest.java

@@ -53,6 +53,9 @@ public class DownloadOfflineListNewRequest implements Serializable {
     @ApiModelProperty(value = "来源")
     private String source;
 
+    // 当用 异步 执行时,没法从 WebAppContext 里面获取 adminId
+    private int currentAdminId;
+
     public String getOrderNo() {
         return orderNo;
     }
@@ -156,4 +159,12 @@ public class DownloadOfflineListNewRequest implements Serializable {
     public void setSource(String source) {
         this.source = source;
     }
+
+    public int getCurrentAdminId() {
+        return currentAdminId;
+    }
+
+    public void setCurrentAdminId(int currentAdminId) {
+        this.currentAdminId = currentAdminId;
+    }
 }

+ 13 - 7
src/main/java/com/ywt/mg/services/DownloadRecordService.java

@@ -117,6 +117,7 @@ public class DownloadRecordService {
         record.setAdminId(currentAdminId);
         record.setAdminName(currentAdminName);
         record.setCreateTime(new Date());
+        record.setDeleted(false);
         record.setParamMd5(paramMd5);
         record.setParamJson(paramJson);
         record.setParamUrl(paramUrl);
@@ -199,7 +200,7 @@ public class DownloadRecordService {
             }
             DownloadRecord record = downloadRecordRepository.findOne(downloadRecordId);
             if (!Checker.isNone(record)) {
-                String fileName = record.getFileName() + ".xlsx";
+                String fileName = record.getFileName();
                 httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(), Constants.CHARSET_NAME));
                 httpServletResponse.setContentType("application/vnd.ms-excel;charset=UTF-8");
                 httpServletResponse.setHeader("Pragma", "no-cache");
@@ -234,16 +235,21 @@ public class DownloadRecordService {
      * @throws Exception
      */
     public void createFileAndUploadOssAndSaveToDataBase(String fileName, int downloadRecordId, ExcelDataMap map, List<ExcelCollectPojo> itemList) throws Exception {
-        fileName = fileName + FormatUtil.formatDate(new Date(), FormatUtil.FORMAT_DATE_SECOND_NUMBER);
+        // 前缀(路径)
         String preLocalPath = ConstantDef.LOCAL_DOWNLOAD_FILE_PATH;
-        // 写到服务器上
-        String localPath = preLocalPath + fileName + ".xlsx";
-        ExcelStyleMap excelStyleMap = new ExcelStyleMap(new String[]{});
+        // 后缀(下载时间和格式)
+        String suffixFormat = FormatUtil.formatDate(new Date(), FormatUtil.FORMAT_DATE_SECOND_NUMBER) + ConstantDef.EXCEL_SUFFIX_FORMAT;
+        // 写到本地,拼凑本地路径
+        String localPath = preLocalPath + fileName + suffixFormat;
+
         // 生成本地文件
+        ExcelStyleMap excelStyleMap = new ExcelStyleMap(new String[]{});
         excelDownloadSrv.generateAndReturnExcelFileWithNoStyleAndCollectLocal(fileName, localPath, map, excelStyleMap, itemList);
+
+        // 本地文件上传到oss,文件名带后缀
         String ossPath = String.format(ConstantDef.BIG_DATA_EXCEL_FILE_PATH, FormatUtil.formatDate(new Date(), "yyyy-MM"));
-        // 本地文件上传到oss
-        DataResponse dataResponse = fileSrv.localFileUploadToOss(localPath, fileName, ossPath);
+        String ossFileName = fileName + suffixFormat;
+        DataResponse dataResponse = fileSrv.localFileUploadToOss(localPath, ossFileName, ossPath);
         if (dataResponse.getCode() == BaseResponse.SUCCEED) {
             // 上传成功,将上传状态和地址保存到数据库
             saveUrlAndStatus(downloadRecordId, dataResponse.getData().toString(), DownloadRecordStatusEnum.SUCCESS.getValue());

+ 2 - 4
src/main/java/com/ywt/mg/services/OfflineNewService.java

@@ -76,7 +76,7 @@ public class OfflineNewService {
             // 添加测试账号过滤
             String testAdminIds = parameterConfigurer.getTestAdminIds();
             String testDoctorIds = parameterConfigurer.getTestDoctorIds();
-            String adminStr = "," + authService.getCurrentAdminId() + ",";
+            String adminStr = "," + request.getCurrentAdminId() + ",";
             String testAdminIdsStr = "," + testAdminIds + ",";
 
             // 不是测试账号
@@ -241,10 +241,8 @@ public class OfflineNewService {
         return "";
     }
 
-    public void downloadOfflineListCommon(int downloadRecordId, String name, String fileName, String paramUrl, DownloadOfflineListNewRequest request) {
-        String paramJson = JsonSerializer.toJson(request);
+    public void downloadOfflineListCommon(int downloadRecordId, String fileName, DownloadOfflineListNewRequest request) {
         try {
-            downloadRecordService.getOrInsertDownloadRecord(downloadRecordId, name, fileName, paramUrl, paramJson);
             // 单元格
             String col0 = "订单号";
             String col1 = "支付流水号";

+ 2 - 3
src/main/java/com/ywt/mg/web/common/ExcelDownloadSrv.java

@@ -285,7 +285,7 @@ public class ExcelDownloadSrv {
      * @throws AppMessageException 业务层异常抛出,如传入数据为空
      * @author Walker, added on 06/27/2019.
      */
-    public String generateAndReturnExcelFileWithNoStyleAndCollectLocal(String fileName, String path, ExcelDataMap data, ExcelStyleMap excelStyleMap,
+    public void generateAndReturnExcelFileWithNoStyleAndCollectLocal(String fileName, String path, ExcelDataMap data, ExcelStyleMap excelStyleMap,
                                                                        List<ExcelCollectPojo> collectList) throws AppMessageException {
         if (data == null || data.isEmpty()) {
             throw new AppMessageException("数据为空");
@@ -339,11 +339,10 @@ public class ExcelDownloadSrv {
             workbook.write();
             //关闭流
             workbook.close();
-
         } catch (Exception e) {
             logger.error("ExcelDownloadSrv#generateAndReturnExcelFileWithNoStyleAndCollectLocal(fileName={}, path={} ):\n {}",
                     fileName, path, e.getMessage(), e);
         }
-        return path;
+//        return path;
     }
 }

+ 13 - 4
src/main/java/com/ywt/mg/web/controllers/OfflineController.java

@@ -66,6 +66,9 @@ public class OfflineController {
     @Autowired
     private IdGenerator idGenerator;
 
+    @Autowired
+    private DownloadRecordService downloadRecordService;
+
     /**
      * 查询线下就诊列表
      *
@@ -306,17 +309,23 @@ public class OfflineController {
 */
     @RequestMapping({"/downloadOfflineList"})
     public BaseResponse downloadOfflineList(DownloadOfflineListNewRequest request) {
+        int currentAdminId = Checker.getIntegerValue(authService.getCurrentAdminId());
+        request.setCurrentAdminId(currentAdminId);
         // 插入记录
         int downloadRecordId = idGenerator.genDownloadRecordId();
-        String name = "线下就诊记录";
-        String fileName = "公司后台-订单管理-线下就诊";
+        String name = "公司后台-订单管理-线下就诊";
+        String fileName = "线下就诊记录";
+        String excelSuffixFormat = ConstantDef.EXCEL_SUFFIX_FORMAT;
         String paramUrl = "/offline/downloadOfflineList";
-        Thread t = new Thread(){
+        String paramJson = JsonSerializer.toJson(request);
+        downloadRecordService.getOrInsertDownloadRecord(downloadRecordId, name, fileName + excelSuffixFormat, paramUrl, paramJson);
+        Thread t = new Thread() {
             @Override
             public void run() {
-                offlineNewService.downloadOfflineListCommon(downloadRecordId, name, fileName, paramUrl, request);
+                offlineNewService.downloadOfflineListCommon(downloadRecordId, fileName, request);
             }
         };
+        t.start();
         return new BaseResponse().succeed("后台下载中...");
     }