异步导出(CompletableFuture异步任务+阿里云)

//控制层代码
@ApiOperation("技术咨询单-导出")
@RequestMapping(path = "exportDlrTechnicalAdvice",method = RequestMethod.POST)
public EntityResult exportDlrTechnicalAdvice(@RequestBody TechnicalAdviceQueryDTO dto,HttpServletRequest request,HttpServletResponse response) throws IOException, ExecutionException, InterruptedException {
	return technicalAdviceService.exportToOss(dto,request,response);
}
//异步导出 给前端返回提示去下载中心查看下载记录,同时异步执行把excel导出 该项目使用的是阿里云,把文件上传到阿里云 ,成功后返回附件路径
    @Override
    public EntityResult exportToOss(TechnicalAdviceQueryDTO dto, HttpServletRequest request, HttpServletResponse response) {
        EntityResult result = new EntityResult<>();
        UserEntity userInfo = ContextHelper.getUserInfo();
        List<String> roleTypes = userInfo.getRoleTypes();
         //构建传参
        Map<String, Object> mapParam = buildQueryParam(dto, userInfo);
        mapParam.put("language", language);
        mapParam.put("language2", language2);
        List<TechnicalAdviceExportVO> list = tsAdvisoryOrderDao.queryTechnicalAdviceForExport(mapParam);
        if (CollectionUtils.isEmpty(list)) {
            //数据为空
            result.setMsg("40000000011");
            result.setResult("0");
            return result;
        }

        //添加记录表
        DownloadCenterRecord record = new DownloadCenterRecord();
        record.setIsDown(0);
        record.setOperType(1); //操作类型
        record.setDownNum(0);
        //record.setStatus(0);
        record.setScenCode(CommonConstant.TS_ORDER_TYPE_1);
        record.setCreatedBy(userInfo.getUserId());
        record.setCreatedOn(new Date());
        //record.setModifiedBy(userInfo.getUserId());
        //record.setModifiedOn(new Date());
        downloadCenterRecordDao.insert(record);

        //异步执行导出
        CompletableFuture.runAsync(()->{
            self.exportDlrTechnicalAdvice2(list,mapParam,record,userInfo,response);
        },AsyncTaskManager.getThreadPoolExecutor()).whenComplete((v,throwable)->{
            if (throwable != null) {
                log.error("exportToOss Exception: ", throwable);
            } else {
                log.info("exportToOss completed successfully.");
            }
        });
        //正在导出中,请到下载中心查看
        result.setMsg("1400000000249");
        result.setRows(record.getId());
        return result;
    @Override
    public void exportDlrTechnicalAdvice2(List<TechnicalAdviceExportVO> list,Map<String, Object> mapParam, DownloadCenterRecord record, UserEntity userInfo, HttpServletResponse response) {
        try {
 //此处省略拼接数据逻辑
 //返回文件上传Oss
            MultipartFile file = ExcelUtils.export2("导出", exportList, col, keys);
            String uuid = RandomUtil.randomString(8);
            String dateStr = DateUtil.format(new Date(), "yyyyMd");
            //自定义名称
            String fileName = "导出.xlsx";
            String directory = "techAdvice";
            String objectName = directory + "/" + dateStr + "-" + uuid + "/" + fileName;
            aliyunOSSService.uploadOssObject(objectName,file.getInputStream());

            record.setOssUrl(objectName);
            record.setOssFileName(fileName);
            record.setStatus(1);
            record.setModifiedBy(userInfo.getUserId());
            record.setModifiedOn(new Date());
            downloadCenterRecordDao.updateById(record);

            log.info("--10000000000100000000000000000000000000000000000000000");
        } catch (Exception e) {
            record.setStatus(0);
            record.setRemark(e.getMessage());
            record.setOssFileName("导出失败");
            downloadCenterRecordDao.updateById(record);
            log.error("exportDlrTechnicalAdvice, {}", e);
            throw new RuntimeException(e);
        }
    }
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值