CN110795920A - 一种文档生成方法及设备 - Google Patents
一种文档生成方法及设备 Download PDFInfo
- Publication number
- CN110795920A CN110795920A CN201910849429.0A CN201910849429A CN110795920A CN 110795920 A CN110795920 A CN 110795920A CN 201910849429 A CN201910849429 A CN 201910849429A CN 110795920 A CN110795920 A CN 110795920A
- Authority
- CN
- China
- Prior art keywords
- data
- document
- generation
- target
- elasticsearch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000005516 engineering process Methods 0.000 claims abstract description 19
- 241000283973 Oryctolagus cuniculus Species 0.000 claims abstract description 8
- 230000004044 response Effects 0.000 claims abstract description 4
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 description 15
- 238000012545 processing Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000008676 import Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 101150064138 MAP1 gene Proteins 0.000 description 2
- 101100075995 Schizosaccharomyces pombe (strain 972 / ATCC 24843) fma2 gene Proteins 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Abstract
本申请实施例提供一种文档生成方法及设备,涉及软件技术领域。本申请实施例能够根据客户端的数据生成指令,生成记录有目标数据的目标Excel文档,并将目标Excel文档上传至文件服务器。该方法包括:接收客户端发送的数据生成指令;响应于数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中;根据数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据;调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档;将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中;下载ID用于表示目标Excel文档在文件服务器中的位置。本申请应用于Excel文档生成。
Description
技术领域
本申请涉及软件技术领域,尤其涉及一种文档生成方法及设备。
背景技术
随着互联网技术的不断发展,越来越多的数据信息集中在后台系统中,不便于数据信息的分析和使用。“文件生成”是一项很重要的功能,利用它可以导出相关的业务数据,以便进行资料保存或者不同业务间的数据交互。
在当前的软件开发中,越来越多的需求涉及到对MicroSoft Office文档的处理,其中对Excel数据文档的处理尤为普遍。因此,关于对Excel文件处理的讨论与研究也愈演愈烈。到目前为止,已经出现了许多关于处理Excel文件的技术和开源项目,例如JavaExcelApi,Apache POI等。这些开源项目各有特色,都能够适用于不同的开发场景,满足了大多数不同的开发需求,但也存在诸多问题。
发明内容
本申请的的实施例提供一种文档生成方法及设备,能够根据客户端的数据生成指令,生成记录有目标数据的目标Excel文档,并将目标Excel文档上传至文件服务器。
第一方面,本申请提供一种文档生成方法,包括:接收客户端发送的数据生成指令;响应于数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中;根据数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据;调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档;将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中;下载ID用于表示目标Excel文档在文件服务器中的位置。
本申请实施例所提供的文档生成方法,首先在接收到客户端发送的数据生成指令后,通过Rabbit MQ异步生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中。之后,在从ElasticSearch中获取所需要的目标数据并生成存储有目标数据的目标Excel文档后,将用于目标Excel文档在文件服务器中的位置的下载ID也存入ElasticSearch中的生成记录中。从而,当目标Excel文档生成好后,用户便可以根据主键ID在ElasticSearch中找到生成记录。再根据生成记录中的下载ID,到文件服务器中下载已经生成好的目标Excel文档。从而,实现当用户需要获取ElasticSearch中的数据时,只需要通过客户端发送一条包括查询条件的数据生成指令,用户不需要等候在客户端旁,系统便可自动完成数据的搜索过程,并将数据导入目标Excel文档、将目标Excel文档上传文件服务器。用户仅需在目标Excel文档上传好后,凭借主键ID在ElasticSearch中搜索到上述生成记录,进而便可完成目标Excel文档的下载。通过上述方法,由于采用了Rabbit MQ异步技术,能够最大限度的发挥计算机性能,提高ElasticSearch中大数据量的文件导出效率,很大程度上解决了目前POI技术不支持多并发大数据量文件生成以及大数据文件生成慢的问题。
第二方面,本申请提供一种文档生成设备,包括:接收单元,用于接收客户端发送的数据生成指令;记录生成单元,用于响应于数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中;数据查询单元,用于根据数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据;文档生成单元,用于调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档;上传单元,用于将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中;下载ID用于表示目标Excel文档在文件服务器中的位置。
第三方面,本申请还提供一种文档生成设备,包括:处理器、存储器、总线和通信接口;存储器用于存储计算机执行指令,处理器与存储器通过总线连接,当文档生成设备运行时,处理器执行上述存储器存储的上述计算机执行指令,以使文档生成设备执行如上述第一方面所提供的文档生成方法。
第四方面,本申请实施例提供一种计算机存储介质,包括指令,当其在文档生成设备上运行时,使得文档生成设备执行上述第一方面所提供的一种文档生成方法。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种文档生成方法的流程示意图;
图2为本申请实施例提供的一种生成目标Excel文档的流示意图;
图3为本申请实施例提供的一种系统的结构示意图;
图4为本申请实施例提供的一种文档生成设备的结构示意图;
图5为本申请实施例提供的另一种文档生成设备的结构示意图;
图6为本申请实施例提供的又一种文档生成设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
首先,介绍本申请中所涉及的技术术语:
POI是由Apache组织提供的用java编写的免费开源的跨平台的Java API,ApachePOI提供API给Java程序对Micro Softoffice格式档案读和写的功能。POI中关于Excel数据处理的部分主要包括UserAPI、EventAPI和StreamingUserModelAPI。所谓的StreamingUserModelAPI实际上就是基于Dom方式的解析,Dom解析就是将文件全部读入内存,对文件内部的结构进行建模,形成一颗Dom树的过程。
POI提供API给Java程序对Microsoft Office格式档案读和写的功能,用它可以使用Java读取和创建,修改MS Excel文件。Apache POI提供Java操作Excel解决方案。ApachePOI的HSSF结构,提供Microsoft Excel XLS格式档案读写功能。
1)POI的常用类说明如下:
HSSFFont Excel字体
2)通过POI可以实现对excel操作类型:
创建文档摘要信息;
使用excel基本图形等;
基于POI技术,是用户可自行选择数据列的可扩展的Excel导出技术,提高导出文件内容的个性化及易用性。
ElasticSearch是一个基于RElasticSearchTful web接口并且构建在ApacheLucene之上的开源分布式搜索引擎。同时ElasticSearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。ElasticSearch具有高可用性和可扩展性,一方面可以通过升级硬件来完成系统扩展,另一方面,可通过增加更多的服务器来完成系统扩展。
目前的Excel文件读写方式,通常存在以下问题:
1、内存占用严重。采用Streaming UserModelAPI读写Excel文件,由于这种方式容易理解,操作也较简单,所以成为了开发人员最常用的方式。但是这种方式也存在很明显的弊端:因为该方式是基于Dom内存解析的,所以对系统内存的依赖也就比较严重。也就是说,WorkBook对象是将整个文件流缓冲到系统内存当中,使用用户模型处理数据就要求系统有足够的内存空间去容纳以WorkBook对象为根的Dom结构。当数据量逐渐增大,对系统内存和cpu的开销也随之增大,直到系统没有足够的内存去处理数据时,就会造成内存溢出,导致数据处理失败;
2、不支持多并发;
3、不支持大数据量excel文件生成;
4、大数据量文件生成慢,使用体验非常不好。
基于目前POI技术不支持多并发大数据量文件生成及大数据文件生成慢等问题,本申请实施例提供一种文档生成方法,如图1所示,该方法具体包括:
S101、文档生成设备接收客户端发送的数据生成指令。
本申请中所称文档生成设备,具体可以为数据系统中的一个服务器或者其他设备,对此本申请可以不做限制。
数据生成指令,具体可以是用于使文档生成设备生成Excel文档的某种指令,对此本申请可不做限制。
S102、文档生成设备响应于数据生成指令,通过RabbitMQ生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中。
具体的,本申请在文档生成设备接收到数据生成指令后,可以在将目标Excel文档上传至文件服务器并确定下载ID之前的某一时间,触发通过Rabbit MQ生成一条包括主键ID的生成记录并将生成记录保存至ElasticSearch中的操作,对于触发上述操作的时间以及具体以接收到数据生成指令后的哪个操作作为触发条件,本申请可以不做限制。
在一种实现方式中,可以在接收到数据生成指令后,调用POI技术所提供的导出接口时,返回一条生成上述主键ID,同时将主键ID保持至ElasticSearch中。
另外,本申请所提供方法在接收数据生成指令后,还包括:利用redis开始记录目标Excel文件的生成进度。
另外,本申请还可以包括:利用RabbitMQ将用户传入的特定标识分配到特定的队列。以解决目前POI技术不支持多并发数据量文件生成的问题。具体的,用户传入的特定标识可以是上述数据生成指令,也可以是数据生成指令中包括的查询条件。在数据生成过程中,文档生成设备会依次执行特定的队列中记录的任务,从而实现多并发数据量文件生成。
步骤S102所涉及的关键代码如下:
S103、文档生成设备根据数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据。
步骤S103所涉及的关键代码如下:
for(int i=0;i<=total/pageModel.getPageSize()+1;i++){
List<List>lists=newArrayList();
pageModel.setScrollId(scrollId);
PageModel model=persistenceCoreService.scrollQueryData(appKey,pageModel);
if(model.getJsonRsList().size()==0){
break;
}
if(i==0){
//表中的字段名
Map<String,Object>map1=esCommonSevice.indexMapping(appKey,indexName,indexName);
Map<String,Map<String,Object>>map2=(Map<String,Map<String,Object>>)map1.get("properties");
//如果需要查指定数据
if(columnAlias.size()!=0){
b=1;
columnAliasList.add("序号");
for(String column0:columnAlias.keySet()){
columnAliasList.add(columnAlias.get(column0));
column0List.add(column0);
}
}else{
columnList.add("序号");
for(String column:map2.keySet()){
columnList.add(column);
}
}
if(b==0){
lists.add(columnList);
}else{
lists.add(columnAliasList);
}
}
//定义序号
intnum=1;
//获取字段对应的值
for(StringjsonData:model.getJsonRsList()){
JSONObjectjsonObject1=null;
//字段名对应的值
List numList=newArrayList(model.getJsonRsList().size());
//处理序号问题
numList.add(num+(i*pageModel.getPageSize()));
try{
jsonObject1=JsonUtil.toJSONObject(jsonData);
}catch(Exception e){
numList.add(jsonData);
logger.error("【数据解析报错】:{}",ExceptionUtils.getStackTrace(e));
a++;
}
//如果有特殊需求,进行特殊处理
if(jsonObject1!=null){
if(!columnAlias.isEmpty()){
for(String column1:column0List){
Object columnData=jsonObject1.get(column1);
String data=dataFormate(column1,columnData,specColumns);
//如果无数据,则置空
if("null".equals(data)){
numList.add("");
}else{
numList.add(data);
}
}
}else{
for(String column1:columnList){
if(!"序号".equals(column1)){
Object columnData=jsonObject1.get(column1);
String data=dataFormate(column1,columnData,specColumns);
if("null".equals(data)){
numList.add("");
}else{
numList.add(data);
}
}
}
}
}
lists.add(numList);
num++;
}
........
}
在一种实现方式中,本发明实施例中考虑到在将数据导入至Excel时,有些数据的类型需要进行转换,以确保数据能够正确导入Excel文档中,或者达到减小生成后的目标Excel文档的大小的目的,进而步骤S103具体包括:
S1031、根据数据生成指令中包括的查询条件,在ElasticSearch中查询用户所需要的数据。
S1032、将用户所需要的数据进行类型转换,生成目标数据。
具体的,类型转换可以包括:将Long类型的时间数据转换为Date类型的数据。涉及的关键代码如下:
S104、文档生成设备调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档。
具体的,在生成目标Excel文档时,可以采用XSSFworkbook工具类来生成excel文档,来生成2007版本的Excel文档。
在一种实现方式中,考虑到大数据会占用大量内存问题,进而还可以使用SXSSFWorkbook工具类,以使得内存中每次缓存预设条数据后就刷新到硬盘中去,让内存空间得到充分的释放。进而,步骤S104具体包括:
调用SXSSFWorkbook工具类,将目标数据导入Excel文档中。
具体的,结合电商系统的特性,为了保证数据的导入效率同时还避免占用过多内存,本申请中在调用SXSSFWorkbook工具类,将目标数据导入Excel文档中时,可以采用每次缓存100条数据就刷新到硬盘中去,从而保证内存空间得到充分的释放。具体过程如图2所示,S1041、创建XSSFWorkbook工作簿;S1042、转换为SXSSFWorkbook工作簿;S1043、创建sheet页;S1044、设置单元格格式;S1045、数据保存至Excel模板;循环执行上述S1043-S1045的内容,直至数据全部导入后执行S1046、生成目标Excel文档。
涉及的关键代码如下:
进一步的,本申请实施例中,考虑到当Excel文档中一个sheet页中若存入过多的数据,则会导致卡顿。因此,本申请实施例中,调用SXSSFWorkbook工具类,将目标数据导入Excel文档中,具体包括:若目标数据的条数大于条数阈值,则使用SXSSFWorkbook工具类中的creatElasticSearchheet接口创建多个sheet页,并将目标数据依次导入sheet页中。
并且,结合电商系统的特性,本申请中上述条数阈值具体可以设为20万条。
涉及关键代码如下:
另外,本申请实施例所提供的方法还包括:
S105、文档生成设备利用Redis查询目标Excel文档的生成进度,并将生成进度发送至客户端。
具体的,可以采用每次从ElasticSearch中获取到1000条数据,则利用Redis修改目标Excel文档的生成进度。关键实现代码如下:
//后面的上传算一次时间,所以多加一次
longtotalNum=total/pageModel.getPageSize()+1+1;
//计算excel生成进度
doublepro=(double)(i+1)/(double)totalNum*100;
NumberFormatnumberFormat=NumberFormat.getInstance();
//设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
StringproStr=numberFormat.format(pro)+"%";
redisCommonService.set(String.valueOf(oid),proStr);
S106、文档生成设备将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中;下载ID用于表示目标Excel文档在文件服务器中的位置。
具体涉及关键代码如下:
在将下载ID存入ElasticSearch中的生成记录中之后,本申请所提供方法还包括:
S107、文档生成设备接收客户端发送的下载请求。
S108、文档生成设备根据下载请求中记录的主键ID,在ElasticSearch中查询生成记录。
S109、文档生成设备在查询到生成记录后,将下载ID发送至客户端;以便客户端根据下载ID下载目标Excel文档。
本申请实施例所提供的文档生成方法,首先在接收到客户端发送的数据生成指令后,通过RabbitMQ异步生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中。之后,在从ElasticSearch中获取所需要的目标数据并生成存储有目标数据的目标Excel文档后,将用于目标Excel文档在文件服务器中的位置的下载ID也存入ElasticSearch中的生成记录中。从而,当目标Excel文档生成好后,用户便可以根据主键ID在ElasticSearch中找到生成记录。再根据生成记录中的下载ID,到文件服务器中下载已经生成好的目标Excel文档。从而,实现当用户需要获取ElasticSearch中的数据时,只需要通过客户端发送一条包括查询条件的数据生成指令,用户不需要等候在客户端旁,系统便可自动完成数据的搜索过程,并将数据导入目标Excel文档、将目标Excel文档上传文件服务器。用户仅需在目标Excel文档上传好后,凭借主键ID在ElasticSearch中搜索到上述生成记录,进而便可完成目标Excel文档的下载。通过上述方法,由于采用了Rabbit MQ异步技术,能够最大限度的发挥计算机性能,提高ElasticSearch中大数据量的文件导出效率,很大程度上解决了目前POI技术不支持多并发大数据量文件生成以及大数据文件生成慢的问题。
示例性的,如图3所示,为本申请上述实施例所提供方法的一种实际应用系统的结构示意图。该系统包括:客户端201、ElasticSearch 202、文档生成设备203。其中,在具体实现时,ElasticSearch 202和文档生成设备203也可以为同一物理设备。结合图3,本申请实施例所提供方法,具体包括以下步骤:
S301、文档生成设备203通过通信接口2031接收客户端201的数据生成指令。
S302、文档生成设备203通过Rabbit MQ模块2032生成一条包括主键ID的生成记录以及生成特定的队列。
S303、Rabbit MQ模块2032通过通信接口2031将生成记录保存至ElasticSearch中。
S304、根据特定的队列,当确定需要执行上述数据生成指令对应的文档生成任务后,Rabbit MQ模块2032向用于生成Excel文档的Excel文档模块2033发送RabbitMQ异步消息。
S305、Excel文档模块2033中的数据查询子模块2033a,在接收到Rabbit MQ异步消息后,根据数据生成指令中包括的查询条件,在ElasticSearch 202中查询用户所需要的数据。
S306、Excel文档模块2033中的数据处理子模块2033b对查询到的数据进行处理,具体包括:将用户所需要的数据进行类型转换,生成目标数据。
S307、Excel文档模块2033中的文档生成子模块2033c,调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档。
S308、上传模块2034将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中。
S309、Redis模块2035查询目标Excel文档的生成进度,并将生成进度发送至客户端201。
S310、客户端201根据主键ID在ElasticSearch 202中查询生成记录,并ElasticSearch 202将生成记录中记录的下载ID发送至客户端201。
具体的,当ElasticSearch 202和文档生成设备203为同一物理设备时,也也可以认为是文档生成设备203将生成记录中记录的下载ID发送至客户端201。
实施例二:
本申请实施例提供一种文档生成设备,用于实现上述实施例一所提供的一种文档生成方法。如图4所示,为本申请实施例提供的文档生成设备的一种可能的结构示意图。具体的,该文档生成设备40包括:
接收单元401,用于接收客户端发送的数据生成指令。
记录生成单元402,用于响应于数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将生成记录保存至ElasticSearch中。
数据查询单元403,用于根据数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据。
文档生成单元404,用于调用POI技术所提供的接口,将目标数据导入Excel文档中,生成目标Excel文档。
上传单元405,用于将目标Excel文档上传至文件服务器,并将下载ID存入ElasticSearch中的生成记录中;下载ID用于表示目标Excel文档在文件服务器中的位置。
可选的,接收单元401,还用于在上传单元将下载ID存入ElasticSearch中的生成记录中之后,接收客户端发送的下载请求。
数据查询单元403,还用于根据下载请求中记录的主键ID,在ElasticSearch中查询生成记录。
发送单元406,用于在查询到生成记录后,将下载ID发送至客户端;以便客户端根据下载ID下载目标Excel文档。
可选的,数据查询单元403,具体用于:根据数据生成指令中包括的查询条件,在ElasticSearch中查询用户所需要的数据;将用户所需要的数据进行类型转换,生成目标数据;其中,类型转换至少包括:将Long类型的时间数据转换为Date类型的数据。
可选的,文档生成单元404,具体用于:调用SXSSFWorkbook工具类,将目标数据导入Excel文档中;调用SXSSFWorkbook工具类,将目标数据导入Excel文档中,具体包括:若目标数据的条数大于条数阈值,则使用SXSSFWorkbook工具类中的creatElasticSearchheet接口创建多个sheet页,并将目标数据依次导入sheet页中。
可选的,设备40还包括进度查询单元407。
进度查询单元407,用于利用Redis查询目标Excel文档的生成进度,并将生成进度发送至客户端。
本申请实施例中提供的文档生成设备中各模块所的功能以及所产生的效果可以参照上述实施例一中的对应的描述内容,在此不再赘述。
需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用集成的单元的情况下,图5示出了上述实施例中所涉及的文档生成设备的一种可能的结构示意图。文档生成设备50包括:处理模块501、通信模块502和存储模块503。处理模块501用于对文档生成设备50的动作进行控制管理,例如,处理模块501用于支持文档生成设备50执行图1中的过程。通信模块502用于支持文档生成设备50与其他实体的通信。存储模块503用于存储文档生成设备的程序代码和数据。
其中,处理模块501可以是处理器或控制器,例如可以是中央处理器(centralprocElasticSearchsing unit,CPU),通用处理器,数字信号处理器(digitalsignalprocElasticSearchsor,DSP),专用集成电路(application-specific integratedcircuit,ASIC),现场可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块502可以是收发器、收发电路或通信接口等。存储模块503可以是存储器。
当处理模块501为如图6所示的处理器,通信模块502为图6的收发器,存储模块503为图6的存储器时,本申请实施例所涉及的文档生成设备可以为如下的文档生成设备60。
参照图6所示,该文档生成设备60包括:处理器601、收发器602、存储器603和总线604。
其中,处理器601、收发器602、存储器603通过总线604相互连接;总线604可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器601可以是一个通用中央处理器(Central ProcElasticSearchsing Unit,CPU),微处理器,特定应用集成电路(Application-Specific Integrated Circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
存储器603可以是只读存储器(Read-Only Memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(Random AccElasticSearchs Memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
其中,存储器603用于存储执行本申请方案的应用程序代码,并由处理器601来控制执行。收发器602用于接收外部设备输入的内容,处理器601用于执行存储器603中存储的应用程序代码,从而实现本申请实施例中提供的一种文档生成方法。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程设备。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字文档生成设备线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种文档生成方法,其特征在于,包括:
接收客户端发送的数据生成指令;
响应于所述数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将所述生成记录保存至ElasticSearch中;
根据所述数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据;
调用POI技术所提供的接口,将所述目标数据导入Excel文档中,生成目标Excel文档;
将所述目标Excel文档上传至文件服务器,并将下载ID存入所述ElasticSearch中的所述生成记录中;所述下载ID用于表示所述目标Excel文档在所述文件服务器中的位置。
2.根据权利要求1所述文档生成方法,其特征在于,在所述将下载ID存入所述ElasticSearch中的所述生成记录中之后,所述方法还包括:
接收客户端发送的下载请求;
根据所述下载请求中记录的所述主键ID,在所述ElasticSearch中查询所述生成记录;
在查询到所述生成记录后,将所述下载ID发送至所述客户端;以便所述客户端根据所述下载ID下载所述目标Excel文档。
3.根据权利要求1所述文档生成方法,其特征在于,所述根据所述数据生成指令中包括的查询条件,从ElasticSearch中获取用户所需要的目标数据,具体包括:
根据所述数据生成指令中包括的查询条件,在ElasticSearch中查询用户所需要的数据;
将所述用户所需要的数据进行类型转换,生成所述目标数据;其中,所述类型转换至少包括:将Long类型的时间数据转换为Date类型的数据。
4.根据权利要求1所述文档生成方法,其特征在于,所述调用所述POI技术所提供的接口,将所述目标数据导入Excel文档中,生成目标Excel文档,具体包括:
调用SXSSFWorkbook工具类,将所述目标数据导入Excel文档中;
所述调用SXSSFWorkbook工具类,将所述目标数据导入Excel文档中,具体包括:若所述目标数据的条数大于条数阈值,则使用所述SXSSFWorkbook工具类中的creatElasticSearchheet接口创建多个sheet页,并将所述目标数据依次导入所述sheet页中。
5.根据权利要求1所述文档生成方法,其特征在于,所述方法还包括:利用Redis查询所述目标Excel文档的生成进度,并将所述生成进度发送至客户端。
6.一种文档生成设备,其特征在于,包括:
接收单元,用于接收客户端发送的数据生成指令;
记录生成单元,用于响应于所述数据生成指令,通过Rabbit MQ生成一条包括主键ID的生成记录,并将所述生成记录保存至ElasticSearch中;
数据查询单元,用于根据所述数据生成指令中包括的查询条件,从ElasticSearch中获取所需要的目标数据;
文档生成单元,用于调用POI技术所提供的接口,将所述目标数据导入Excel文档中,生成目标Excel文档;
上传单元,用于将所述目标Excel文档上传至文件服务器,并将下载ID存入所述ElasticSearch中的所述生成记录中;所述下载ID用于表示所述目标Excel文档在所述文件服务器中的位置。
7.根据权利要求6所述文档生成设备,其特征在于,
所述接收单元,还用于在所述上传单元将下载ID存入所述ElasticSearch中的所述生成记录中之后,接收客户端发送的下载请求;
所述数据查询单元,还用于根据所述下载请求中记录的所述主键ID,在所述ElasticSearch中查询所述生成记录;
发送单元,用于在查询到所述生成记录后,将所述下载ID发送至所述客户端;以便所述客户端根据所述下载ID下载所述目标Excel文档。
8.根据权利要求6所述文档生成设备,其特征在于,所述数据查询单元,具体用于:根据所述数据生成指令中包括的查询条件,在ElasticSearch中查询用户所需要的数据;将所述用户所需要的数据进行类型转换,生成所述目标数据;其中,所述类型转换至少包括:将Long类型的时间数据转换为Date类型的数据。
9.根据权利要求6所述文档生成设备,其特征在于,所述文档生成单元,具体用于:调用SXSSFWorkbook工具类,将所述目标数据导入Excel文档中;所述调用SXSSFWorkbook工具类,将所述目标数据导入Excel文档中,具体包括:若所述目标数据的条数大于条数阈值,则使用所述SXSSFWorkbook工具类中的creatElasticSearchheet接口创建多个sheet页,并将所述目标数据依次导入所述sheet页中。
10.根据权利要求6所述文档生成设备,其特征在于,所述设备还包括进度查询单元;
所述进度查询单元,用于利用Redis查询所述目标Excel文档的生成进度,并将所述生成进度发送至客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910849429.0A CN110795920B (zh) | 2019-09-09 | 2019-09-09 | 一种文档生成方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910849429.0A CN110795920B (zh) | 2019-09-09 | 2019-09-09 | 一种文档生成方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110795920A true CN110795920A (zh) | 2020-02-14 |
CN110795920B CN110795920B (zh) | 2023-12-01 |
Family
ID=69427296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910849429.0A Active CN110795920B (zh) | 2019-09-09 | 2019-09-09 | 一种文档生成方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110795920B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347745A (zh) * | 2020-10-22 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 文件生成进度的获取方法、装置、电子装置和存储介质 |
CN114091409A (zh) * | 2021-11-22 | 2022-02-25 | 全景智联(武汉)科技有限公司 | 分布式异步解析Excel的方法、系统、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013112415A1 (en) * | 2012-01-27 | 2013-08-01 | Microsoft Corporation | Indexing structures using synthetic document summaries |
CN106533782A (zh) * | 2016-12-01 | 2017-03-22 | 北京雷石天地电子技术有限公司 | 一种实时发现线下场所业务故障的方法和系统 |
CN109299157A (zh) * | 2018-08-27 | 2019-02-01 | 杭州安恒信息技术股份有限公司 | 一种分布式大单表的数据导出方法及装置 |
-
2019
- 2019-09-09 CN CN201910849429.0A patent/CN110795920B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013112415A1 (en) * | 2012-01-27 | 2013-08-01 | Microsoft Corporation | Indexing structures using synthetic document summaries |
CN106533782A (zh) * | 2016-12-01 | 2017-03-22 | 北京雷石天地电子技术有限公司 | 一种实时发现线下场所业务故障的方法和系统 |
CN109299157A (zh) * | 2018-08-27 | 2019-02-01 | 杭州安恒信息技术股份有限公司 | 一种分布式大单表的数据导出方法及装置 |
Non-Patent Citations (2)
Title |
---|
毛俊;彭宏;孟利民;: "基于Django框架的车载定位系统PDF报表下载软件的设计与实现" * |
陈付梅;韩德志;毕坤;戴永涛;: "大数据环境下的分布式数据流处理关键技术探析" * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347745A (zh) * | 2020-10-22 | 2021-02-09 | 杭州安恒信息技术股份有限公司 | 文件生成进度的获取方法、装置、电子装置和存储介质 |
CN112347745B (zh) * | 2020-10-22 | 2024-03-19 | 杭州安恒信息技术股份有限公司 | 文件生成进度的获取方法、装置、电子装置和存储介质 |
CN114091409A (zh) * | 2021-11-22 | 2022-02-25 | 全景智联(武汉)科技有限公司 | 分布式异步解析Excel的方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110795920B (zh) | 2023-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110520859B (zh) | 更智能的复制/粘贴 | |
US10558615B2 (en) | Atomic incremental load for map-reduce systems on append-only file systems | |
EP3113043B1 (en) | Method, device and host for updating metadata stored in columns in distributed file system | |
CN108874924B (zh) | 搜索服务的创建方法、装置及计算机可读存储介质 | |
CN108334609B (zh) | Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质 | |
CN108090078B (zh) | 文档在线预览方法及装置、存储介质、电子设备 | |
CN106648569B (zh) | 目标序列化实现方法和装置 | |
CN108536745B (zh) | 基于Shell的数据表提取方法、终端、设备及存储介质 | |
CN106612330B (zh) | 支持分布式多文件导入的系统及方法 | |
US10412033B2 (en) | Event notification method, event notification device, and storage medium | |
WO2014202323A1 (en) | Methods, apparatuses and computer program products for facilitating a data interchange protocol | |
CN105589959A (zh) | 表单处理方法和表单系统 | |
CN114722119A (zh) | 数据同步方法及系统 | |
CN110795920B (zh) | 一种文档生成方法及设备 | |
CN110362630B (zh) | 数据管理方法、装置、设备与计算机可读存储介质 | |
CN110888972A (zh) | 一种基于Spark Streaming的敏感内容识别方法及装置 | |
CN107643892B (zh) | 接口处理方法、装置、存储介质和处理器 | |
CN111897778B (zh) | 一种计算机文件合并方法、装置及系统 | |
CN114116656B (zh) | 数据处理方法及相关装置 | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN112632266B (zh) | 数据写入方法、装置、计算机设备及可读存储介质 | |
CN110168521B (zh) | 数据处理装置及数据处理方法 | |
CN115840786B (zh) | 一种数据湖数据同步方法及装置 | |
US11494382B2 (en) | Optimization of first set of ordered items | |
CN111221817B (zh) | 业务信息数据存储方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: No. 42 Yongwai East Gexin Lane, Dongcheng District, Beijing, 100077 Applicant after: State Grid Digital Technology Holdings Co.,Ltd. Applicant after: State Grid E-Commerce Technology Co.,Ltd. Address before: 100053 8th floor, building 1, NO.311, guanganmennei street, Xicheng District, Beijing Applicant before: STATE GRID ELECTRONIC COMMERCE Co.,Ltd. Applicant before: YINGDA BUSINESS SERVICES Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |