一种开具发票的方法及系统与流程

文档序号:14266511阅读:555来源:国知局
一种开具发票的方法及系统与流程

本发明涉及税务服务技术领域,特别涉及一种开具发票的方法及系统。



背景技术:

电子商务中增值税普通发票承担着非常重要的角色:

1、发票是从事生产、经营的企事业单位和个人,以其在销售商品或提供应税劳务及从事其他经营活动时取得的应税收入为对象,向付款方开具的收款凭证。用户可用于售后、退款的购物凭证。

2、发票是记录经济活动内容的载体,是财务管理的重要工具;

3、发票是税务机关控制税源,征收税款的重要依据;发票是国家监督经济活动,维护经济秩序,保护国家财产安全的重要手段。

电子商务中增值税普通发票一般都是随货一起送给客户,现有技术发票开具的方案可以是:

s1、在发票子系统录入仓库名称对应下的发票信息,并为该仓库每个仓库开票人员分配相应的发票号码段;

发票子系统将该仓库每个仓库开票人员分配相应的发票号码段通过ws接口调用发送给仓库子系统。

s2、仓库子系统验证为每个仓库开票人员分配的的最小发票号码与该仓库开票人员获取的纸质发票中最小发票号码是否一致,如果一致,则确定初始化发票通过。

s3、初始化完成后,仓库子系统根据商品与订单号的对应关系通过ws接口调用通知订单子系统将该订单号对应的订单信息同步给发票子系统。

s4、在订单信息同步后,发票子系统根据订单信息和发票信息确定发票的数量和每张发票内容,并将为每张发票生成的唯一标识和每张发票内容通过ws接口调用下传给仓库子系统。

s5、仓库子系统根据下传的每张发票内容打印每张发票,完成发票的开具。并记录每张发票的唯一标识和发票号码的对应关系。

s6、仓库子系统通过ws接口调用回传每张发票的唯一标识和发票号码的对应关系至发票子系统。

s7、发票子系统根据每张发票的唯一标识和发票号码的对应关系更新已开具发票的状态。

在每卷发票开具前,发票子系统通过ws接口调用通知仓库子系统重复执行步骤s2,进行下一卷发票的开具。

由上述可以看出,现有发票开具包括:发票录入分配、仓库发票初始化、订单信息同步、发票信息下传、仓库发票开具和仓库发票回传等环节。现有技术的问题在于:

1、各个子系统间交互过多,且严重依赖ws接口调用,发票子系统录入分配成功后,仓库子系统才能进行发票初始化操作,如果初始化失败就会导致无法开具发票;订单子系统将订单信息同步给发票子系统后,发票子系统才能下传发票内容给仓库子系统,如果同步失败就会导致无法发票下传;仓库子系统初始化操作和发票子系统下传发票内容成功后,才能进行发票的开具;仓库子系统回传给发票子系统成功后,发票子系统才能更新自身子系统的最新发票状态,下一卷的发票初始化才能成功,如果发票回传失败就会导致无法进行下一卷的初始化操作,等等。

2、ws接口调用每次发送的信息数量较少。为了防止数据量大而导致处理超时,需要人为拆分多次传输数据,严重影响工作效率。

3、一旦ws接口调用失败,必须等到手工处理发票信息成功后,才能继续进行发票开具,非常影响开票以及订单生产效率。ws接口调用为单次调用,一旦失败,就需要人工介入,费时费力。



技术实现要素:

本发明的目的在于提供一种开具发票的方法及系统,能够降低因系统异常对开具发票的影响。

为实现上述发明目的,本发明提供了一种开具发票的方法,该方法包括:

订单子系统将订单信息通过消息队列mq同步给发票子系统;

发票子系统根据订单信息和预先录入的仓库名称对应下的发票信息确定所述订单对应的发票数量和每张发票内容,并将每张发票内容通过mq下传给仓库子系统;

仓库子系统根据下传的每张发票内容,以及自身子系统最小发票号码对应的仓库开票人员,顺序打印所述订单对应的每张发票,完成当次发票的开具。

为实现上述发明目的,本发明还提供了一种开具发票的系统,该系统包括:

订单子系统,将订单信息通过消息队列mq同步给发票子系统;

发票子系统,根据订单信息和预先录入的仓库名称对应下的发票信息确定所述订单对应的发票数量和每张发票内容,并将每张发票内容通过mq下传给仓库子系统;

仓库子系统,根据下传的每张发票内容,以及自身子系统最小发票号码对应的仓库开票人员,顺序打印所述订单对应的每张发票,完成当次发票的开具。

综上所述,本发明提供的开具发票的方法及系统,发票信息对应具体仓库录入到发票子系统中,并利用mq发送到仓库子系统,该仓库的仓库开票人员自行认领发票信息中各自的发票号码段,而不是由发票子系统分配决定,如此就不会出现发票子系统分配给仓库开票人员的发票与仓库开票人员手里的发票不一致的情况,这样仓库子系统就无需进行初始化操作。订单子系统可以随时利用mq同步订单信息给发票子系统,无需像现有技术那样必须依赖仓库子系统初始化操作完成后,订单子系统才能同步订单信息。发票子系统利用mq下传发票内容成功后,仓库子系统就可以进行发票的开具,无需像现有技术那样仓库子系统初始化操作和发票子系统下传发票内容成功后,才能进行发票的开具。本发明仓库子系统可以统一回传,不需要像现有技术那样每次发票开具后都需要回传。因此,本发明的方案与现有技术相比,通过mq异步处理,减少了系统间的直接交互,降低了因系统异常对开具发票的影响。

附图说明

图1为本发明开具发票的方法流程示意图。

图2为本发明实施例一发票管理的流程示意图。

图3为本发明开具发票的系统结构示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。

本发明发票开具过程通过mq的形式离线化、异步化,无须担心调用失败或者处理超时等问题,有效减少了系统异常的几率。本发明订单子系统可以随时利用mq同步订单信息给发票子系统,无需像现有技术那样必须依赖仓库子系统初始化操作完成后,订单子系统才能同步订单信息。也就是说,订单子系统同步订单信息前,不需要与仓库子系统有交互。本发明仓库子系统可以统一回传,不需要像现有技术那样每次发票开具后都需要回传。也就是说,本发明仓库子系统可以将多次开具的发票一次性回传给发票子系统,相比于现有技术来说,回传时与发票子系统的交互更少。系统间的交互少,也有效减少了系统异常的几率,从而降低因系统异常对开具发票的影响。另一方面,通过检测子系统进行监控,一旦mq发生异常,则利用缓存,作为降级方案,进行数据的调度和补充,无须人工介入。

消息队列(mq)是一种应用程序对应用程序的通信方法。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。所以本发明子系统间的通信都是通过mq进行,mq具有高可用、高性能,无须担心调用失败或者处理超时等问题。通过mq将业务过程离线化、异步化,保证发票开具不受影响。

本发明开具发票的方法流程示意图如图1所示:

步骤11、订单子系统将订单信息通过消息队列(mq)同步给发票子系统;

所述订单信息包括:发票所属区域、抬头、商品内容、商品金额、商品个数。

步骤12、发票子系统根据订单信息和预先录入的仓库名称对应下的发票信息确定所述订单对应的发票数量和每张发票内容,并将每张发票内容通过mq下传给仓库子系统;

所述仓库名称对应下的发票信息包括:发票所属区域、发票代码、发票起始至终止号码、纳税人识别号、发票高度及宽度、发票头和尾的高度,以及每张发票最高开具金额。

其中,发票子系统根据订单信息和预先录入的仓库名称对应下的发票信息确定所述订单对应的发票数量和每张发票内容,包括:

根据发票高度及宽度,以及发票头和尾的高度,得到每张发票可打印内容的高度;

根据每个商品明细占用高度以及每张发票可打印内容的高度,得到每张发票最多开具商品个数;

根据每张发票最多开具商品个数和每张发票开具最高金额,将订单信息中的商品拆分布局在多个发票上。

步骤13、仓库子系统根据下传的每张发票内容,以及自身子系统最小发票号码对应的仓库开票人员,顺序打印所述订单对应的每张发票,完成当次发票的开具。

所述打印的每张发票包括:发票所属区域、抬头、商品内容、商品金额、商品个数、发票代码、发票号码、纳税人识别号、仓库开票人员。

在仓库子系统打印每张发票之前,该方法还包括:

发票子系统将所录入的仓库名称对应下的发票信息通过mq发送给仓库子系统;仓库子系统确认该仓库每个仓库开票人员所分配的发票号码段存在于该仓库对应的发票信息中。

优选地,发票子系统将每张发票内容通过mq下传给仓库子系统的同时,将为每张发票生成的唯一标识下传给仓库子系统;

仓库子系统在打印开具发票时,还包括:记录当次开具的每张发票的唯一标识和发票号码的对应关系;在完成多次发票的开具后,统一回传多次开具的每张发票的唯一标识和发票号码的对应关系至发票子系统,由发票子系统根据多次开具的每张发票的唯一标识和发票号码的对应关系更新已开具发票的状态。

进一步地,即便mq具有高可用、高性能的特性,但是仍然可能会存在mq集群发生网络或者其他问题,导致mq不可用的情况,因此本发明进一步对mq进行自动检测,对数据内容进行自动恢复:该方法还包括:检测子系统定时发送检测mq消息,在发送失败时确定当前交互的mq发送异常;并定时检测mq发送端缓存数据库中的数据内容和mq接收端本地数据库中的数据内容是否一致,如果不一致,则将mq发送端缓存数据库中的数据内容调度补充到mq接收端本地数据库中。

实施例一

图2为本发明实施例一发票管理的流程示意图。

s21、录入发票信息至具体仓库

发票子系统中录入的仓库a对应的发票信息为1万张发票,共50卷,每卷发票200张,发票起始号码为00001,发票的终止号码为10000,发票所属区域a,发票代码12345678,纳税人识别号nsr123,发票高度h1,发票宽度w1,每张发票最高开具金额2万,发票头和尾的高度为h1/3。

发票子系统将仓库a对应的发票信息通过mq发送给仓库子系统。

需要说明的是,本发明通过mq发送发票信息,不像现有技术那样通过ws接口调用发送发票信息,ws接口调用每次发送的信息数量较少,为了防止数据量大而导致处理超时,需要人为拆分多次传输数据。因此本发明无须因为发票量大而拆分多次调用,提高人工操作效率。

s22、仓库开票人员认领发票号码

仓库a有两个仓库开票人员,仓库开票人员1认领发票号码00001-05000,在仓库子系统中录入该号码段,并验证该号码段存在于该仓库对应的发票信息中。仓库开票人员2认领发票号码05001-10000,并在仓库子系统中录入该号码段,并验证该号码段存在于该仓库对应的发票信息中。

如上所述,仓库a的仓库开票人员1和仓库开票人员2自行认领发票信息中各自的发票号码段,而不是由发票子系统分配决定,如此就不会出现发票子系统分配给仓库开票人员的发票与仓库开票人员手里的发票不一致的情况,这样仓库子系统就无需进行初始化操作。

s23、同步

订单子系统通过mq将订单信息同步给发票子系统。订单信息包括:发票所属区域a、抬头、商品内容、商品金额、商品个数。

需要说明的是,本发明中订单子系统同步订单信息前,不需要与仓库子系统有交互。订单子系统可以随时利用mq同步订单信息给发票子系统,无需像现有技术那样必须依赖仓库子系统初始化操作完成后,订单子系统才能同步订单信息。

s24、下传

发票子系统根据订单信息和发票信息确定本次开具发票的数量和每张发票内容,并将为每张发票生成的唯一标识和每张发票内容通过mq下传给仓库子系统。

其中,发票子系统根据订单信息和发票信息确定本次开具发票的数量和每张发票内容,包括:

根据发票高度h1和发票宽度w1,去掉当前区域的发票头和尾h1/3,得到每张发票可打印内容高度为:(h1*2)/3;

根据每个商品明细占用高度为s1,以及每张发票可打印内容高度(h1*2)/3,计算出每张发票最多打印的商品个数为(h1*2)/3s1;假设(h1*2)/3s1=6;

根据每张最多开具商品个数6,以及每张发票开具最高金额2万,将订单信息中的所有商品拆分布局在多个发票上。

下传给仓库子系统的每张发票内容包括:发票所属区域、抬头、商品内容、商品金额、商品个数、发票代码、纳税人识别号。将每张发票内容布局在页面上下传给仓库子系统等待打印开具。

s25、打印

仓库子系统根据下传的每张发票内容,进行打印,完成发票开具。

需要说明的是,仓库子系统中已经开具的发票号码不会再出现,所以,当前最小发票号码就是要开具的发票号码。此时,仓库子系统显示当前要打印的最小发票号码以及仓库开票人员,仓库子系统在打印发票时,在发票上记录该最小发票号码作为该发票的发票号码,并记录该仓库开票人员。因此,最终打印的每张发票内容包括:发票所属区域、抬头、商品内容、商品金额、商品个数、发票代码、纳税人识别号、发票号码、仓库开票人员。

打印的同时,记录每张发票的唯一标识和发票号码的对应关系。

s26、统一回传

在多次发票开具后,仓库子系统通过mq统一回传每张发票的唯一标识和发票号码的对应关系至发票子系统。

需要说明的是,本发明仓库子系统可以统一回传,不需要像现有技术那样每次发票开具后都需要回传。也就是说,本发明仓库子系统可以将多次开具的发票一次性回传给发票子系统,相比于现有技术来说,回传时与发票子系统的交互更少。

s27、更新

发票子系统根据每张发票的唯一标识和发票号码的对应关系更新已开具发票的状态。

具体就是将回传给发票子系统的发票号码,在发票信息中标注出来,标注为已开具。

由此,完成了本发明的发票管理方法。在更新之后,订单子系统可以再次进行订单信息的同步,继续上述流程,完成发票的管理。发票信息对应具体仓库录入到发票子系统中,并利用mq发送到仓库子系统,该仓库的仓库开票人员自行认领发票信息中各自的发票号码段,而不是由发票子系统分配决定,如此就不会出现发票子系统分配给仓库开票人员的发票与仓库开票人员手里的发票不一致的情况,这样仓库子系统就无需进行初始化操作。订单子系统可以随时利用mq同步订单信息给发票子系统,无需像现有技术那样必须依赖仓库子系统初始化操作完成后,订单子系统才能同步订单信息。发票子系统利用mq下传发票内容成功后,仓库子系统就可以进行发票的开具,无需像现有技术那样仓库子系统初始化操作和发票子系统下传发票内容成功后,才能进行发票的开具。

实施例二

即便mq消息具有高可用、高性能的特性,但是仍然可能会存在mq集群发生网络或者其他问题,导致mq消息不可用的情况。因此,本发明进一步通过检测子系统进行监控,一旦mq发生异常,则利用缓存,作为降级方案,进行数据的调度和补充,无须人工介入。本发明实施例中利用quartz检测调度。

quartz是一个完全由java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单却强大的机制。quartz允许开发人员根据时间间隔来调度作业。

本发明在实施例一中,子系统之间的交互都是通过mq,发送mq的子系统称为mq发送端,接收mq的子系统称为mq接收端。mq发送端向mq接收端发送mq时,将发送的数据内容缓存在缓存数据库中。因此,quartz定时发送检测mq消息,在发送失败时确定当前交互的mq发送异常;并定时检测mq发送端缓存数据库中的数据内容和mq接收端本地数据库中的数据内容是否一致,如果不一致,则将mq发送端缓存数据库中的数据内容调度补充到mq接收端本地数据库中。

举例一、发票子系统redia缓存仓库a对应的发票信息为1万张发票,共50卷,每卷发票200张,发票起始号码为00001,发票的终止号码为10000,发票所属区域a,发票代码12345678,纳税人识别号nsr123,发票高度h1,发票宽度w1,每张发票最高开具金额2万,发票头和尾的高度为h1/3。

发票子系统将仓库a对应的发票信息通过mq发送给仓库子系统。

quartz定时检测发票子系统redia缓存中的数据内容和仓库子系统本地数据库中的数据内容是否一致,如果不一致,说明mq异常,则将发票子系统redia缓存中的数据内容调度补充到仓库子系统本地数据库中。

举例二、订单子系统redia缓存订单信息,订单信息包括:发票所属区域a、抬头、商品内容、商品金额、商品个数。

订单子系统通过mq将订单信息同步给发票子系统。

quartz定时检测订单子系统redia缓存中的数据内容和发票子系统本地数据库中的数据内容是否一致,如果不一致,说明mq异常,则将订单子系统redia缓存中的数据内容调度补充到发票子系统本地数据库中。

举例三、发票子系统redia缓存每张发票的唯一标识和对应每张发票内容。

发票子系统通过mq将每张发票的唯一标识和对应每张发票内容下传给仓库子系统。

quartz定时检测发票子系统redia缓存中的数据内容和仓库子系统本地数据库中的数据内容是否一致,如果不一致,说明mq异常,则将发票子系统redia缓存中的数据内容调度补充到仓库子系统本地数据库中。

举例四、仓库子系统redia缓存每张发票的唯一标识和发票号码的对应关系。

仓库子系统通过mq统一回传每张发票的唯一标识和发票号码的对应关系至发票子系统。

quartz定时检测仓库子系统redia缓存中的数据内容和发票子系统本地数据库中的数据内容是否一致,如果不一致,说明mq异常,则将仓库子系统redia缓存中的数据内容调度补充到发票子系统本地数据库中。

实施例三

基于同样的发明构思,本发明还提供了一种开具发票的系统,结构示意图如图3所示,该系统包括:

订单子系统301,将订单信息通过消息队列mq同步给发票子系统;

发票子系统302,根据订单信息和预先录入的仓库名称对应下的发票信息确定所述订单对应的发票数量和每张发票内容,并将每张发票内容通过mq下传给仓库子系统;

仓库子系统303,根据下传的每张发票内容,以及自身子系统最小发票号码对应的仓库开票人员,顺序打印所述订单对应的每张发票,完成当次发票的开具。

在仓库子系统打印每张发票之前,

所述发票子系统302,还用于将所录入的仓库名称对应下的发票信息通过mq发送给仓库子系统;

所述仓库子系统303,还用于确认该仓库每个仓库开票人员所分配的发票号码段存在于该仓库对应的发票信息中。

所述发票子系统302将每张发票内容通过mq下传给仓库子系统303的同时,将为每张发票生成的唯一标识下传给仓库子系统303;

所述仓库子系统303在打印开具发票时,还用于记录当次开具的每张发票的唯一标识和发票号码的对应关系;在完成多次发票的开具后,统一回传多次开具的每张发票的唯一标识和发票号码的对应关系至发票子系统,由发票子系统根据多次开具的每张发票的唯一标识和发票号码的对应关系更新已开具发票的状态。

mq发送端向mq接收端发送mq时,将发送的数据内容缓存在缓存数据库中;

所述系统还包括检测子系统304,用于定时发送检测mq消息,在发送失败时确定当前交互的mq发送异常;并定时检测mq发送端缓存数据库中的数据内容和mq接收端本地数据库中的数据内容是否一致,如果不一致,则将mq发送端缓存数据库中的数据内容调度补充到mq接收端本地数据库中。

本发明的开具发票的方法,会带来如下好处:

一、本发明的开具发票的方法,减少了系统之间的直接交互,降低了因系统异常对正常发票开具的影响。

二、通过mq消息异步处理,进一步减少了系统之间的直接交互,降低了因系统异常对正常发票开具的影响。

三、通过mq消息异步处理,提高了数据处理量,减少人工拆分带来的多余工作,提高工作效率。

四、通过自动检测自动恢复,实现了无需人工介入、智能化的发现异常、处理异常。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1