首页 > 其他分享 >Web项目统一导出方案

Web项目统一导出方案

时间:2022-11-02 18:45:21浏览次数:62  
标签:Web 报表 方案 excel 导出 表头 生成 查询

*前言

我们在做web项目时,业务需求做的最多的就是查询,既然有查询,难免就有导出。如果给每个查询界面都写一个导出未免有点不够优雅,代码会变得很臃肿冗余,虽然可以把一些公共的生成excel、写入excel、下载等等写成统一的工具类,但是数据库查询sql的代码和调用工具类的代码还是没有办法省略的。另外,同步请求中,碰到要导出几十万那种大量的数据时,代码也会一直卡在查询和生成的地方,没有办法做其他事情,给用户的体验也不好。为此,我们可以换一种思路,写一个异步的统一的查询、 生成、下载报表的公共模块。

*包含的部分

为了实现这个统一导出模块,我们最少需要的部分有:

A.至少一个已经存在了的查询

B.一个统一的用于报表导出申请任务的后台服务

C.一张专门用于记录导出任务的数据库表

D.一个专门的报表生成的调度部分

E.真正的生成报表的实现

F.用于存放生成的报表的文件地址

G.一个统一的报表任务查询界面

*具体流程

在A中一定有个导出按钮,我们可以把这个按钮的请求地址改为B的地址,并且请求中至少包含以下两个参数:需要导出的报表类型(可以为查询的后台地址或者SpringBean的名称)和查询的参数。B在收到A传入的参数后可以直接把A的参数直接保存到到C中(C至少需要保存以下数据:导出的报表类型、查询的参数、导出时间、报表生成状态以及导出申请的唯一流水号),状态就默认为末完成。保存成功之后就用到了D,D会去每几分钟就去查一次C 中未完成的申请任务,查询出之后把任务设置为正在执行,防止重复生成,并且把这些任务都交给E来处理,其中如果任务比较多我们可以综合服务器的硬件情况使用线程池异步来处理生成。E就根据报表类型和前台传过来的参数去调用要生成报表的查询地址(如果存的是查询请求地址,可以直接http调用,如果是bean名称,可以在Spring容器中获取这个bean然后调用),如果碰到分页的情况下,我们尽量给一个比较大的每页容量,由于是一个项目,分页返回参数基本上都类似,我们就可以判断第一次查询是否已经把所有数据查完,若没有查完就继续查。如果查出来的数据过多,我们可以分批写入excel并释放内存防止oom,其中的工具类用easyexcel或者poi都可以,对于表头的处理的话如果使用的带有注解的实体类,可以通过反射读取注解的内容来写入表头,如果是自己写的表头,可以在查询的bean中继承一个自定义接口,这个接口只有一个方法,那就是用来将所有的表头添加到list中并返回,这样在生成的时候先去把bean转化成我们自定义的接口,然后调用那个返回表头的方法并写入表头即可。写入excel完成后可以把文件直接存到F中,并且把C中的状态设置为已完成。用户下载我们生成好的报表是在G中,在G中就是一个对于C表的查询功能,可以根据生成状态、申请的唯一流水号、时间、申请类型等来查询数据,还需要在G中添加一个下载按钮,点击下载,就去文件路径中把生成好的excel下载到浏览器中。

*影响

如果使用统一生成导出报表方案,对于用户的感知只是换了一个地方下载报表,并且有几分钟的延迟,但是对于开发者来说可以大大的提升开发效率,每次前端只需要调用公共的后台申请地址,不必在导出这种无聊的代码上浪费时间,并且对于代码的可读性和可维护性有很大的提升。如果业务人员可以接受还是一个很不错的方案。

标签:Web,报表,方案,excel,导出,表头,生成,查询
From: https://www.cnblogs.com/lrxsznbe/p/16851973.html

相关文章

  • Layabox2.4+webpack4.x打包编译、热更新
    在laya项目目录下新建package.json点击查看代码{"scripts":{"bundle:dev":"webpack--configwebpack.config.debug.js--watch","serve":......
  • JavaWeb期中考试-2021年版(一)
    终于轮到了我自己的期中考试,总体来说本次的期中考试并不难,和19年的期中考试可以说是一模一样,以下要提醒的是,程序在我的电脑上是没什么问题,但是有些配置原因可能在别的设备......
  • JavaWeb之Servlet1
    Servlet方法初始化方法,在Servlet被创建时执行,只执行一次voidinit(ServletConfigconfig)提供服务方法,每次Servlet被访问,都会调用该方法voidservice(ServletRequestr......
  • EasyCVR平台https协议用不了rtc,WebRTC视频无法播放该如何解决?
    EasyCVR平台可支持多类型设备、多协议方式接入,具体包括:国标GB28181协议、RTMP、RTSP/Onvif、海康Ehome,以及海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石SDK等,可覆盖......
  • JavaWeb期中考试-2019年版总结
    关于这次2019年期中考试的练习,我想对它进行一个总结,首先,对于完全没有接触过javaweb的我来说,只是在课上听建民老师提了一下要做这个东西,因此在一开始只是先学着怎么画html......
  • 数字机场 | 数字孪生智慧机场Web3D可视化GIS管理系统
    建设背景科技发展席卷全球,机场运维的智能化脚步也越来越快。2021年12月,民航局发布了《推动民航智能建造与建筑工业化协同发展的行动方案》,明确未来五年的重点工作任务,充分......
  • JavaWeb期中考试-2019年版(六)
    本次是JavaWeb期中考试最后一个部分,系统更新和数据显示的代码分享首先是updateq.jsp<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncodi......
  • EasyCVR平台https协议用不了rtc,WebRTC视频无法播放该如何解决?
    EasyCVR平台可支持多类型设备、多协议方式接入,具体包括:国标GB28181协议、RTMP、RTSP/Onvif、海康Ehome,以及海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石SDK等,可覆盖......
  • 【开发工具套件与Web图表工具】上海道宁为您带来Visual Paradigm工具软件,推动IT项目的
     VisualParadigm提供了全面的DevOps工具套件以及支持企业体系结构的EA工具通过设计、分析和管理工具套件推动IT项目的开发与成功  VisualParadigm......
  • SQLSERVER 2012迁移实施方案
    一、概述一台SQLSERVER2012企业版的数据库需要迁移到另一台机器上,具体情况如下:登陆账号众多,有数百个。job众多,有数百个。DB库的数量多,数据大,DB总大小达10T多,DB......