[log]报表的生成和下载

异步导出报表 库存报表导出异常,超时。改为异步。 一、库存报表异步导出 1、生成库存报表 @Override public BaseResultVo generateReport(WarehouseInventoryDTO dto) { String billPath = "/app/upload/bill"; Long loginUserId = LoginUserUtil.getLoginUserId(); Callable<BaseResultV 阅读详情

年底了,忙的抽不出来时间了。。。


记录下这几天写的报表生成和下载吧

前端的报表下载

前台使用的是vue,用的是form表单的方法,
下载还有几种办法,感觉这个比较符合需求,就使用了这种方法

 <form name="DownLoad" id="DownLoad" method="post" enctype="application/x-www-form-urlencoded"
              style="display:none" target="downLoadIframe">
            <input type="text" name="userId" id="userId"/>
            <input type="text" name="date" id="date"/>
        </form>
        <iframe name="downLoadIframe" id="downLoadIframe" style="display:none">
        </iframe>

参数的传递使用的是input

在action中直接写请求

 DownExcel() {
                var req = this.Base();
                var myForm = document.getElementById("DownLoad");
                if (this.value7.length != 0) {
                    let date = this.formatedDate(this.value7[0]) + ',' + this.formatedDate(this.value7[1])
                    document.getElementById("date").value = date;
                }
                document.getElementById("projectId").value = req.projectId;
                document.getElementById("userId").value = req.userId;
                let url = window.location.href;
                myForm.action = "请求.do";
          
                myForm.submit();
            },

后台报表生成

报表生成使用的是poi
从数据库查出来数据插入到表格中

// 生成报表
		public static String createExcel(String projectId, String tmpPath, ArrayList<Map> data) {

			// 表头
			ArrayList<String> titleRow = new ArrayList<String>();
			 
			// 表格数据
			ArrayList excelData = new ArrayList();
			for (int i = 0; i < data.size(); i++) {
				ArrayList<String> rowData = new ArrayList<String>();
				rowData.add(((Map) data.get(i)).get("name").toString());
				excelData.add(rowData);
			}

			// 表名
			Date nowDate = new Date(System.currentTimeMillis());
			SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
			String dateStr = sf.format(nowDate); // 文件名
			String fileName = dateStr + "-" + projectId + ".xls";
			String filePath = tmpPath + "/" + fileName; // Excel文件路径和文件名

			HSSFWorkbook workbook = new HSSFWorkbook();
			// 添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
			Sheet sheet1 = workbook.createSheet("sheet1");
			sheet1.setDefaultColumnWidth(20);
			// 新建文件
			FileOutputStream out = null;
			try {
				// 添加表头
				Row row = workbook.getSheet("sheet1").createRow(0); // 创建第一行
				for (int i = 0; i < titleRow.size(); i++) {
					Cell cell = row.createCell(i);
					cell.setCellValue(titleRow.get(i));
				}
				// 插入数据
				for (int i = 0; i < excelData.size(); i++) {
					Row rowData = workbook.getSheet("sheet1").createRow(i + 1);
					ArrayList rowArr = (ArrayList) excelData.get(i);
					for (int j = 0; j < rowArr.size(); j++) {
						Cell cell = rowData.createCell(j);
						cell.setCellValue(rowArr.get(j).toString());
					}
				}
				out = new FileOutputStream(filePath);
				workbook.write(out);
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return filePath;   // 报表生成之后,将报表的路径返回
		}

 //将报表转换成 buffer 进行返回
	        byte[] buffer=null;
	        
	        try{
	            buffer = this.getFileBytes(filePath);
	        }catch (IOException e){
	            logger.error(e.getMessage());
	            throw new Exception("file download error");
	        }



// 更改响应头
 private String contentType = "application/x-download";
    private String fileNameField = "DownloadFileName"; 
    private String fileContentField = "DownloadFileContent";

    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setContentType(getContentType());
        StringBuffer sb = new StringBuffer();
        sb.append("attachment; filename=");
        String fileName = URLEncoder.encode((String)model.get(this.fileNameField), "UTF-8");
        sb.append(fileName);
 
        response.setHeader("Content-Disposition", sb.toString());
        response.setContentType(contentType);
        if (this.log.isDebugEnabled())
            this.log.debug(sb.toString());
        try {
            ServletOutputStream sos = response.getOutputStream();
            byte[] arrayOfByte = (byte[]) model.get(this.fileContentField);
            sos.write(arrayOfByte);
            sos.flush();
        } catch (Exception exception) {
            this.log.error("render", exception);
        }
    }

后台使用Spring
到此完成此功能,当然还有需要优化的地方


虽然能够前后结合完成整个功能,
有好处也有坏处
这样的话可以对整个开发流程有一定的了解
造成的结果就是对知识的深度掌握不够

关于知识的深度只好自己做功课了,
先完成工作要紧

SpringBoot+AngularJS+Jaspersoft Studio实现多张报表打印控制 @RestController @RequestMapping(LevyDetailController.BASE_URL) public class LevyDetailController {public static Logger LOGGER = LoggerFactory.getLogger(LevyDetailController.class);/** 根路径 */ public 阅读详情

相关推荐

Java报表生成解决方案

该代码提供了word、excel、pdf三种类型的文档生成方案,其中word文档使用“freemarker + xml + 模板”技术;excel使用“POI + 模板”技术;pdf使用“freemarker + itext + flying saucer”技术

命令行运行python时找不到模块的问题“ImportError: No module named”

自己写了一个python脚本,使用的是eclipse + pydev插件的IDE 在IDE中执行没问题,在命令行中,就出现“ImportError: No module named” 错误 项目的目录结构   执行python LogAnalysis.py报错 ImportError: No module named com.util 在LogAnalysis.py中加入sys.p...

eric_wyf的专栏 2317

JAVA报表生成工具

非常好看的报表,3D饼型,柱形,适合做企业级开发的报表开发!

Java中的报表生成

大家好,我是城南。在Java开发中,生成报表是一个常见且重要的任务,尤其在企业应用中。报表的生成可以帮助我们更好地分析和展示数据,让决策者能够更直观地了解系统的运行状况和业务数据。今天,我们将深入探讨Java中的报表生成技术,涵盖从基础概念到实际应用的方方面面。

weixin_46372265的博客 2713

NextReports 快速报表生成工具

快速报表生成工具,能够快速链接数据库并通过拖拽生成报表。

报表导出报表导出报表导出

报表导出报表导出报表导出

EPLAN报表管理一:生成、添加

1、 项目—》工具—》报表—生成 2、模板—》新建—》目录—》确定 3、位置代号:报表文档,生成报表项如下 4、以此类推,选择如下5个报表,点击确定 5、插入设备后会自动生成报表

weixin_41883890的博客 6744

使用log_format为Nginx服务器设置更详细的日志格式方法

下面小编就为大家分享一篇使用log_format为Nginx服务器设置更详细的日志格式方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

从零开始搭建报表工具(一)在线填报及报告生成

在实际工作中经常会存在需要把 Excel 的数据转化为Word文档的操作,利用 Excel中作为数据源为报表提供数据支撑。为此,本章将优先开发数据填报部分。

weixin_42904425的博客 2421

Nvidia Isaac Sim图形界面 入门教程 2024(3)

在使用Isaac Sim时,最先接触到的应该是它的图形界面,此处将简单介绍图形界面中常用的一些组件:Isaac Sim的界面的常用内容可以分为几个板块。

m0_56661101的博客 4546

Xilinx的DDR4 IP

Xilinx的DDR4 IP

weixin_39896700的博客 4456

组态王7.5日月年报例程

组态王7.5日月年报例程说明

weixin_56922362的博客 1万+

SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

二维回波信号分析

zr2006_7的专栏 2万+

代码统计工具statsvn

代码统计工具statsvn   概述 该工具可以用来统计代码相关数据以及产生HTML格式的报表,方便了解整体项目的代码情况。 当然光从报表无法说明所有问题,有些开源的类库如果以源代码形式存在,则会误导最终的报表结果。   下载 1.    从这里下载statsvn 2.    从这里下载 SVN command line client 3.    下载JD

混迹于移动互联网和手机行业 1417

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

[Dify 实战] 如何在内网环境部署 Dify 应用:彻底离线的企业级方案解析

企业内网环境如何离线部署Dify?本文提供详细教程:Dify作为开源AI平台,支持完全离线部署,无需外网访问。文中介绍两种部署方式:推荐使用Docker一键部署,也可选择源码安装定制化方案。重点讲解内网模型配置(支持Ollama/GPT-OSS等)、知识库存储(MinIO/PostgreSQL)及内网代理设置,并给出常见问题排查方法。该方案适用于金融、政府等对数据安全要求高的场景,确保敏感数据不泄露,实现完全本地化的AI应用闭环。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 452

报表生成

Controller

weixin_43460109的博客 387

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2977

使用iReport工具生成报表 PDF

利用iReprot生成报表 首先,下载好iReport工具,打开程序,在这个可以开启一个新的文档。  开启后得到的一个新档案,右击档案调试模板各部位大小  通过Band Height调试各部位高度    顶部工具画表格,写文字使用。文字字段多元是我们以后在JAVA程序中传出的数据。     Parameters 中可以建我们所需要的参数,占位用 $P{ XXX } ...

weixin_41690497的博客 1064

基于深度学习的文字识别与检测算法研究

基于深度学习的文字识别与检测算法研究 1. 背景介绍 1.1 文字识别与检测的重要性 在当今信息时代,文字作为人类交流和传递信息的主要载体,无处不在。从日常生活中的路牌、广告牌,到办公场所的文件、合同,再到互联网上的网页、图片等

AI天才研究院 1043

使用AI预测彩票的架构思路

彩票是随机的数字游戏,不要过度依赖AI,本文仅供娱乐研究

淘淘小窝 9407

Grafana报表生成:定期报告和自动化导出

Grafana作为开源可观测性平台,支持从Prometheus、Loki等多数据源聚合数据并可视化。在实际运维中,定期生成系统状态报告、自动化导出关键指标数据是监控工作流的重要环节。本文将系统介绍Grafana报表生成的技术路径,包括手动导出、API集成、定时任务配置及企业级方案实现,帮助用户构建完整的报表自动化体系。 ## 报表导出基础:手动操作与核心配置 Grafana提供多种报表导出格式

gitblog_00436的博客 1089

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RDLC报表(二)

晕死,总是见到朋友们评论要GotReportViewer的实例,请在下面的连接中下载:http://files.cnblogs.com/waxdoll/RDLC.rar 在这篇随笔中,我主要分析一下GotReportViewer上的几个经典例子,我们可以从中看到ReportViewer Control的强大功能: 1、Web Log Analyzer 这是一个比较典型的OLAP应用,我们可以看到

一米阳光的专栏 693

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python生成报表并打印_使用expect+python拉取数据并生成报表

虽然脚本周一的时候就写好了,但是昨天才是第一次正式使用。加上昨天写了第二篇shell的tips,所以expect+python的脚本gen_report今天才写。首先说一下背景。由于工作需要,有时我需要ssh到服务器上拉取运行数据生成报表。整个过程很枯燥,就是登录服务器,输入密码,运行二三十条很像的命令,把数据复制到microsoft excel或者libre office calc中计算。一言以...

weixin_40006963的博客 835

Java 根据Excel模板 导出Excel报表

工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /** * 根据模板的路径获取模板文件对象 * classpath根目录下:/template/report.xlsx */ private File getTemplateFile(String template) throws URISyntaxException { URL resource = Thread.currentThread().getC

lookbbs的专栏 1727

Dufs用户活动报表生成:基于日志数据的访问统计与分析

Dufs的日志系统通过[src/http_logger.rs](https://link.gitcode.com/i/c653363a2e898b1d6dab283aa84c973c)模块实现,默认日志格式包含客户端IP、请求信息和状态码。通过配置文件或命令行参数可自定义日志输出路径和格式,典型配置示例如下: ```yaml # 日志配置示例 [tests/data/config.yaml](h...

gitblog_00479的博客 702
上一篇: [log] css选择器、伪类、伪元素
下一篇: [Kettle] 环境搭建、exxel导入导出
go_sparrow
博客等级 码龄11年 25粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值