异步导出报表

本文介绍如何解决库存报表导出超时问题,通过实现异步导出并结合WebSocket进行通知。首先,修改代码为异步非阻塞方式,并在异常时发送钉钉消息。其次,报表生成后,通过WebSocket发送URL通知前端。前端接收到消息后,拼接参数下载报表。
摘要由CSDN通过智能技术生成

库存报表导出异常,超时。改为异步。

一、库存报表异步导出

1、生成库存报表

@Override
    public BaseResultVo generateReport(WarehouseInventoryDTO dto) {
        String billPath = "/app/upload/bill";
        Long loginUserId = LoginUserUtil.getLoginUserId();
        Callable<BaseResultVo> c = () -> {
            log.info("生成库存报表,用户id:" + loginUserId);
            BaseResultVo baseResultVo = list(dto);
            return baseResultVo;
        }; //等待结果
        Future<BaseResultVo> ft = ThreadPoolService.submit(c); //阻塞,等待结果。这里有问题。需要改成非阻塞的。
        try {
            BaseResultVo baseResultVo = ft.get();
            if (baseResultVo.getData() != null) {
                List<Object[]> objects = new ArrayList<>();
                List<String> rowNameList = Arrays.asList("仓库名称", "所属货主", "商品编码", "商品大类", "商品名称", "单位",
                        "实际库存", "可用库存", "占用库存", "冻结库存");
      
                StringBuffer buffer = new StringBuffer();
                buffer.append(billPath).append("/").append(loginUserId).append("-").append(DateUtil.formatShort(new Date())).append(ExcelConstants.XLS);
                String fileName = buffer.toString();
                ExcelUtils.export("即时库存报表", fileName, rowName, objects);
                //把文件写到文件服务器
                File file = new File(fileName);
                //内部上传
                String url = fileUploadUtil.fileUpload(file.getName(), file);
                if (null != url) {
                    //推送消息
                    Map<String, String> map = Maps.newHashMap();
                    map.put("url", url);
                    map.put("message", "库存报表已生成完毕");
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值