票据数据处理方法和系统与流程

文档序号:18639057发布日期:2019-09-11 22:44阅读:571来源:国知局
票据数据处理方法和系统与流程

本申请涉及数据处理技术领域,特别是涉及一种票据数据处理方法和系统。



背景技术:

票据是指销售方在销售商品、提供服务或从事其他经营活动中,销售方作为开票方为消费方提供的消费凭证。随着票据数量的不断增加,以及人们对于票据数据的安全性、真实性和可靠性要求的不断提高,逐渐出现了从数据库存储票据数据到区块链存储票据数据的转变,提高了票据数据的篡改难度,提高了票据数据的安全性、真实性和可靠性。

目前,开票方操作员将票据数据写入区块链时会在数据库中更新存储该票据数据和相应的数据版本号。开票方操作员在修改票据数据时,通常从数据库中获取待修改的票据数据,将修改后的票据数据写入区块链中,并对应更新存储于数据库中。为了避免因多个开票方操作员同时修改同一票据数据而导致的票据数据出错的问题,通常会采用悲观锁来对票据数据的修改进行并发控制。

然而,当采用悲观锁时,各开票方设备需循环抢占同一票据数据对应的数据库锁,只有抢占到数据库锁的开票方设备能够查询和修改票据数据,循环抢占数据库锁的方式增加了计算机资源的耗费,降低票据数据的处理效率低。若抢占到数据库锁的开票方设备突然宕机,且该数据库锁还未被释放,则可能造成死锁,进一步降低了票据数据的处理效率。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够提高票据数据的处理效率的票据数据处理方法和系统。

一种票据数据处理方法,所述方法包括:

开票方设备获取票据标识对应的初始票据数据和所述初始票据数据对应的版本号,并将获取的所述版本号作为第一版本号;

所述开票方设备通过用户操作界面将所述初始票据数据展示给开票方操作员,并实时检测所述开票方操作员针对所述初始票据数据触发的票据数据提交指令;

当检测到所述票据数据提交指令时,所述开票方设备获取所述开票方操作员针对所述初始票据数据预录入的票据修改数据,并从区块链节点中查找与所述票据标识对应的当前最新的版本号,作为第二版本号;

当所述第一版本号与所述第二版本号一致时,所述开票方设备将所述票据修改数据借助于所述区块链节点写入区块链中。

在其中一个实施例中,所述开票方设备获取票据标识对应的初始票据数据和所述初始票据数据对应的版本号,并将获取的所述版本号作为第一版本号,包括:

开票方设备获取携带有票据标识的票据数据修改请求;

所述开票方设备根据所述票据数据修改请求生成携带有所述票据标识的票据数据获取请求,并将所述票据数据获取请求发送至区块链节点;

所述区块链节点根据所述票据数据获取请求,从区块链中查找所述票据标识对应的初始票据数据,将所述初始票据数据对应的版本号作为第一版本号;

所述开票方设备接收所述区块链节点对应反馈的所述初始票据数据和所述第一版本号。

在其中一个实施例中,所述区块链节点根据所述票据数据获取请求,从区块链中查找所述票据标识对应的初始票据数据,包括:

所述区块链节点解析所述票据数据获取请求,得到所述票据标识和开票方操作员标识;

所述区块链节点根据所述开票方操作员标识,按照预设校验方式对所述开票方操作员标识对应的开票方操作员的权限进行校验;

当校验通过时,所述区块链节点根据所述票据标识在区块链中查找相应的初始票据数据。

在其中一个实施例中,所述当所述第一版本号与所述第二版本号一致时,所述开票方设备将所述票据修改数据借助于所述区块链节点写入区块链中,包括:

当所述第一版本号与所述第二版本号一致时,所述开票方设备通过开票方私钥加密所述票据修改数据,得到票据数据密文,并将所述票据数据密文发送至所述区块链节点;

所述区块链节点通过所述开票方私钥所对应的开票方公钥解密所述票据数据密文,得到所述票据修改数据,并将所述票据修改数据写入区块链中。

在其中一个实施例中,当所述第一版本号与所述第二版本号一致时,所述开票方设备将所述票据修改数据借助于所述区块链节点写入区块链中,包括:

当所述第一版本号与所述第二版本号一致时,所述开票方设备将所述票据修改数据发送至所述区块链节点;

所述区块链节点基于共识机制对所述票据修改数据进行共识,并生成与共识通过的所述票据修改数据对应的数据区块;

所述区块链节点获取当前系统时间,根据所述当前系统时间生成与所述票据修改数据对应的版本号,将生成的所述版本号写入所述数据区块,并将写入所述版本号的所述数据区块加入区块链中。

在其中一个实施例中,所述开票方设备将所述票据修改数据发送至所述区块链节点,包括:

所述开票方设备将所述票据修改数据和所述第一版本号发送至所述区块链节点;

所述生成与共识通过的所述票据修改数据对应的数据区块之后,所述方法还包括:

所述区块链节点在区块链中查找与所述票据标识对应的当前最新的版本号,作为第三版本号;

当所述第一版本号与所述第三版本号一致时,所述区块链节点跳转至所述获取当前系统时间的步骤继续执行。

在其中一个实施例中,所述区块链节点为区块链节点集群中的数据处理节点;所述当所述第一版本号与所述第二版本号一致时,所述开票方设备将所述票据修改数据发送至所述区块链节点,包括:

当所述第一版本号与所述第二版本号一致时,所述开票方设备生成携带有所述票据修改数据的签名请求;

所述开票方设备将所述签名请求发送至所述区块链节点集群中的多个区块链节点;发送的所述签名请求用于指示所述多个区块链节点,按照预设签名方式分别对所述票据修改数据进行签名,得到数字签名;

所述开票方设备接收所述多个区块链节点反馈的数字签名,根据各所述数字签名得到数字签名数组,并将所述数字签名数组和所述票据修改数据发送至所述数据处理节点;

所述区块链节点获取当前系统时间,包括:

所述数据处理节点按照预设签名校验方式,根据所述数字签名数组对所述票据修改数据进行签名校验;

当签名校验通过时,所述数据处理节点获取当前系统时间。

一种票据数据处理系统,所述系统包括:开票方设备和区块链节点;

所述开票方设备,用于获取票据标识对应的初始票据数据和所述初始票据数据对应的版本号,并将获取的所述版本号作为第一版本号;通过用户操作界面将所述初始票据数据展示给开票方操作员,并实时检测所述开票方操作员针对所述初始票据数据触发的票据数据提交指令;

所述开票方设备,还用于当检测到所述票据数据提交指令时,获取所述开票方操作员针对所述初始票据数据预录入的票据修改数据,并从所述区块链节点中查找与所述票据标识对应的当前最新的版本号,作为第二版本号;当所述第一版本号与所述第二版本号一致时,将所述票据修改数据发送至所述区块链节点;

所述区块链节点,用于将所述票据修改数据写入区块链中。

在其中一个实施例中,所述开票方设备,还用于当所述第一版本号与所述第二版本号一致时,将所述票据修改数据发送至所述区块链节点;

所述区块链节点,还用于基于共识机制对所述票据修改数据进行共识,并生成与共识通过的所述票据修改数据对应的数据区块;获取当前系统时间,根据所述当前系统时间生成与所述票据修改数据对应的版本号,将生成的所述版本号写入所述数据区块,并将写入所述版本号的所述数据区块加入区块链中。

在其中一个实施例中,所述系统还包括:区块链节点集群;所述区块链节点为所述区块链节点集群中的数据处理节点;

所述开票方设备,还用于当所述第一版本号与所述第二版本号一致时,生成携带有所述票据修改数据的签名请求;将所述签名请求发送至所述区块链节点集群中的多个区块链节点;发送的所述签名请求用于指示所述多个区块链节点,按照预设签名方式分别对所述票据修改数据进行签名,得到数字签名;

所述开票方设备,还用于接收所述多个区块链节点反馈的数字签名,根据各所述数字签名得到数字签名数组,并将所述数字签名数组和所述票据修改数据发送至所述数据处理节点;

所述数据处理节点,用于按照预设签名校验方式,根据所述数字签名数组对所述票据修改数据进行签名校验;当签名校验通过时,获取当前系统时间。

上述票据数据处理方法和系统,开票方设备将对应于票据标识获取的初始票据数据展示给开票方操作员时,实时检测开票方操作员对应触发的票据数据提交指令,且在检测到票据数据提交指令时,获取相应的票据修改数据,并将初始票据数据对应的版本号(第一版本号)与票据标识对应的当前最新的版本号(第二版本号)进行比较。当二者一致时,表明初始票据数据尚未被其他开票方操作员修改过,则判定票据修改数据有效,并借助于区块链节点将该票据修改数据写入区块链中,以实现对初始票据数据的修改。由此,多个开票方操作员可对同一初始票据数据同时发起修改,相应的一个或多个开票方设备按照上述方式判断各票据修改数据的有效性,并根据有效的票据修改数据实现对初始票据数据的修改。这样,同一初始票据数据在同一时间至多有一个有效的票据修改数据,即同一时间至多有一个开票方操作员能够成功修改该初始票据数据,从而实现了票据数据的并发修改控制,能够提高票据数据的处理效率。

附图说明

图1为一个实施例中票据数据处理方法的应用场景图;

图2为一个实施例中票据数据处理方法的流程示意图;

图3为一个实施例中票据数据处理方法的流程示意图;

图4为一个实施例中票据数据处理系统的结构示意图;

图5为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的票据数据处理方法,可以应用于如图1所示的应用环境中。其中,开票方设备102通过网络与区块链节点104进行通信。开票方设备102获取票据标识对应的初始票据数据和相应的第一版本号,将该初始票据数据通过用户操作界面展示给开票方操作员,实时检测该开票方操作员对应触发的票据数据提交指令,并根据检测到的票据数据提交指令获取相应的票据修改数据;进一步地,开票方设备102从区块链节点104中获取票据标识对应的当前最新的版本号,作为第二版本号,并当第一版本号与第二版本号一致时,借助于区块链节点104将票据修改数据写入区块链中。开票方设备102可以是终端或服务器。区块链节点104与服务器相对应,具体可以是服务器。终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。区块链节点104与区块链网络相对应,该区块链网络包括多个区块链节点,各区块链节点相互之间可以进行数据传递。区块链节点104可以是该多个区块链节点中与开票方设备对应的区块链节点,也可以是该多个区块链节点中的任意一个或多个区块链节点。

在一个实施例中,如图2所示,提供了一种票据数据处理方法,该方法包括以下步骤:

s202,开票方设备获取票据标识对应的初始票据数据和初始票据数据对应的版本号,并将获取的版本号作为第一版本号。

其中,票据标识用于唯一标识票据,可以是由数字、字母和符号等字符中的至少一种字符组成的字符串,具体可以是票据编号或代码。票据是指电子票据,是开票方(销售方)在销售商品、提供服务或从事其他经营活动中为消费方提供的消费凭证。开票方可以是销售企业或个人,消费方可以是消费企业或个人。初始票据数据是指在当次执行的票据数据处理流程中待修改的票据数据,该待修改的票据数据相对于修改后的票据数据而言是初始票据数据。初始票据数据是在前次执行的、与票据标识对应的票据数据处理流程中,最晚被写入区块链的票据数据。初始票据数据具体可以是在前次执行的票据数据处理流程中,由接收方(即消费方)审核过、且审核意见数据表示审核通过的票据数据。版本号是指版本的标识号,用于标识与票据标识对应的票据数据的版本。一个票据标识可对应有一个或多个版本号,每个版本号与相应版本的票据数据相对应,即一个票据标识可对应有一个或多个版本的票据数据。版本号可以是由数字、字母和符号等字符中的至少一种组成的字符串,具体可以是由时间戳、随机数和票据标识等中的至少一种组合而成。同一票据标识对应的各版本号可以是具备特定规律的数值,比如1,2,、、、,或n。

具体地,开票方设备获取票据标识,根据该票据标识从本地或其他计算机设备获取与该票据标识对应的初始票据数据,以及该初始票据数据对应的版本号,并将该初始票据数据的版本号作为第一版本号。开票方设备在获取到开票方操作员针对票据标识触发的票据数据修改请求或票据数据查询请求时,从本地或其他计算机设备获取该票据标识对应的当前最新的版本号,作为第一版本号,并获取该第一版本号对应的票据数据作为初始票据数据。其他计算机设备比如用于存储票据数据的数据存储服务器或区块链节点。

在一个实施例中,开票方设备根据开票方操作员触发的票据数据查询请求,从其他计算机设备获取票据标识对应的初始票据数据和相应的第一版本号,并将获取的初始票据数据和第一版本号,以及票据标识对应存储在本地。在获取到开票方操作员触发的票据数据修改请求时,开票方设备根据票据标识在本地查询对应存储的初始票据数据和第一版本号。

在一个实施例中,开票方设备生成携带有票据标识的票据数据获取请求,并将生成的票据数据获取请求发送到数据存储服务器。数据存储服务器本地预存储有票据标识对应的最新版本的票据数据。数据存储服务器根据接收到的票据数据获取请求,从本地查询与票据标识对应存储的票据数据作为初始票据数据,以及该初始票据数据对应的版本号作为第一版本号。数据存储服务器本地预存储有票据标识对应的一个或多个版本号,以及各版本号对应的票据数据。当接收到票据数据获取请求时,数据存储服务器在本地查询相应票据标识对应的当前最新的版本号作为第一版本号,以及该第一版本号对应的票据数据作为初始票据数据。进一步地,数据存储服务器将查询到的初始票据数据和第一版本号反馈至开票方设备。

在一个实施例中,步骤s202包括:开票方设备获取携带有票据标识的票据数据修改请求;开票方设备根据票据数据修改请求生成携带有票据标识的票据数据获取请求,并将票据数据获取请求发送至区块链节点;区块链节点根据票据数据获取请求,从区块链中查找票据标识对应的初始票据数据,将初始票据数据对应的版本号作为第一版本号;开票方设备接收区块链节点对应反馈的初始票据数据和第一版本号。

其中,票据数据修改请求是触发票据数据修改操作的请求,用于指示开票方设备针对票据标识触发当次的票据数据处理流程。票据数据获取请求是用于触发票据数据获取操作的请求,用于指示区块链节点查询并反馈票据标识对应的初始票据数据和第一版本号。

具体地,开票方设备获取由开票方操作员触发生成的、且携带有票据标识的票据数据修改请求,根据获取到的票据数据修改请求生成携带有票据标识的票据数据获取请求,并将生成的票据数据获取请求发送至区块链节点。区块链节点在接收到开票方设备发送的票据数据获取请求时,解析该票据数据获取请求得到票据标识,根据解析得到的票据标识从区块链中查找与该票据标识对应的、且最晚写入区块链的票据数据,作为初始票据数据。区块链节点从区块链中获取该初始票据数据对应的版本号,作为第一版本号,并将获取的初始票据数据和第一版本号反馈至开票方设备。

在一个实施例中,当接收到票据数据获取请求时,区块链节点根据该票据数据获取请求从区块链中查找与票据标识对应的当前最新的版本号,作为第一版本号,并根据第一版本号从区块链中查找相应的票据数据作为初始票据数据。这样,开票方设备在获取到开票方操作员针对票据标识触发的票据数据修改请求时,借助于区块链节点从区块链中获取该票据标识对应的当前最新版本的票据数据,以保证当次执行的票据数据处理流程是针对当前最新版本的票据数据触发并执行的。由此,开票方操作员修改的是当前最新版本的票据数据,能够保证票据数据的一致性。

在一个实施例中,区块链节点根据接收到的票据数据获取请求确定票据标识,根据该票据标识在区块链中查找相应的多个候选版本号,从该多个候选版本号中筛选出最晚生成的版本号,或从该多个候选版本号中筛选出时间戳最近的版本号,作为第一版本号。

s204,开票方设备通过用户操作界面将初始票据数据展示给开票方操作员,并实时检测开票方操作员针对初始票据数据触发的票据数据提交指令。

其中,票据数据提交指令是触发票据数据提交操作的指令,用于指示开票方设备借助于区块链节点将票据修改数据写入区块链,以实现对初始票据数据的修改。

在一个实施例中,当开票方设备为开票方终端时,该开票方终端通过用户操作界面将获取到的初始票据数据展示给开票方操作员,实时检测开票方操作员针对展示的初始票据数据触发的预设提交操作,并根据检测到的预设提交操作触发生成票据数据提交指令。

在一个实施例中,当开票方设备为开票方服务器时,该开票方服务器根据票据数据修改请求确定开票方操作员标识和/或开票方操作员账号,将获取到的初始票据数据发送至以开票方操作员账号登录的开票方终端,或者将初始票据数据发送至开票方操作员标识对应的开票方终端。开票方终端通过用户操作界面将该初始票据数据展示给开票方操作员,并实时检测开票方操作员对应触发的票据数据提交指令。开票方服务器将初始票据数据发送至开票方终端后,实时检测开票方终端对应反馈的票据数据提交指令。

s206,当检测到票据数据提交指令时,开票方设备获取开票方操作员针对初始票据数据预录入的票据修改数据,并从区块链节点中查找与票据标识对应的当前最新的版本号,作为第二版本号。

其中,票据修改数据是指修改后的票据数据,具体可以是指开票方操作员针对展示的初始票据数据在用户操作界面预录入或预选取的票据数据。

具体地,当检测到票据标识对应的票据数据提交指令时,开票方设备根据检测到的票据数据提交指令,获取开票方操作员针对初始票据数据在用户操作界面预录入的票据修改数据。进一步地,开票方设备生成携带有票据标识的版本号获取请求,并将生成的版本号获取请求发送至区块链节点。区块链节点在接收到开票方设备发送的版本号获取请求时,从区块链中查找与票据标识对应的当前最新的版本号,作为第二版本号,并将该第二版本号反馈至开票方设备。

在一个实施例中,当开票方设备为开票方终端、且该开票方终端检测到开票方操作员触发的票据数据提交指令时,开票方终端根据该票据数据提交指令获取开票方操作员针对展示的初始票据数据预录入的票据修改数据。

在一个实施例中,当开票方设备为开票方服务器、且开票方服务器检测到开票方终端针对票据标识反馈的票据数据提交指令时,开票方服务器借助于开票方终端获取开票方操作员针对初始票据数据预录入的票据修改数据,并借助于区块链节点在区块链中查找票据标识对应的当前最新的版本号,作为第二版本号。

在一个实施例中,当开票方设备为开票方服务器时,该开票方服务器将票据标识的初始票据数据发送至开票方终端。开票方终端通过用户操作界面将该初始票据数据展示给开票方操作员,并实时检测开票方操作员对应触发的票据数据提交指令。当检测到票据数据提交指令时,开票方终端获取开票方操作员针对展示的初始票据数据预录入的票据修改数据,并将获取到的票据修改数据反馈至开票方服务器。开票方服务器在获取到票据标识对应的票据修改数据时,借助于区块链节点从区块链中获取该票据标识对应的第二版本号。

s208,当第一版本号与第二版本号一致时,开票方设备将票据修改数据借助于区块链节点写入区块链中。

具体地,当获取到票据标识对应的票据修改数据、且查找到该票据标识对应的第二版本号时,开票方设备将该第二版本号与初始票据数据对应的第一版本号进行比较。当第一版本号与第二版本号一致时,表明开票方操作员修改的初始票据数据是当前最新版本的票据数据,即表明在该开票方操作员对初始票据数据发起修改的过程中,不存在其他开票方操作员成功修改过该初始票据数据,开票方设备则将获取的票据修改数据发送至区块链节点。区块链节点对接收到的票据修改数据执行入链操作,以将该票据修改数据写入区块链中。

在一个实施例中,第一版本号是在开票方设备获取到开票方操作员触发的票据数据修改请求或票据数据查询请求时,票据标识对应的当前最新的版本号。第二版本号是在开票方设备检测到票据数据提交指令、且获取到开票方操作员针对展示的初始票据数据预录入的票据修改数据时,票据标识对应的当前最新的版本号。换而言之,第一版本号是指开票方操作员对初始票据数据执行修改操作之前,票据标识对应的当前最新的版本号,即该初始票据数据对应的版本号。第二版本号是指该开票方操作员对该初始票据数据执行修改操作之后,该票据标识对应的当前最新的版本号。

可以理解的是,若两个开票方操作员在同一时间对同一票据标识对应的同一初始票据数据发起修改,则先触发票据数据提交指令的开票方操作员能够成功修改该初始票据数据,相应的票据修改数据能够被成功写入区块链中,并对应更新该票据标识对应的版本号,作为最新的版本号;而后触发票据数据提交指令的开票方操作员,因其在触发票据数据提交指令时,该票据标识对应的当前最新的版本号已被更新,故不能成功修改该初始票据数据,相应的票据修改数据被判定为无效票据数据。同一时间可以是指同一时间点或者同一时间段。

在一个实施例中,当第一版本号与第二版本号不一致时,表明在该开票方操作员对初始票据数据发起修改的同时,存在其他开票方操作员也对该初始票据数据发起修改、且借助于区块链节点成功将修改得到的票据修改数据写入区块链中,开票方设备则通过用户操作界面向该开票方操作员展示表示票据数据修改失败的提示信息。

举例说明,假设存在第一开票方操作员和第二开票方操作员,在同一时间针对同一票据标识对应的同一初始票据数据触发各自对应的票据数据处理流程,该初始票据数据的版本号为2。若开票方设备在获取到第一开票方操作员触发的票据数据提交指令时,从区块链节点中查找到的票据标识对应的当前最新的版本号为2。由于第一版本号2与第二版本号2一致,开票方设备则判定第一开票方操作员预录入的票据修改数据有效,借助于区块链节点将该有效的票据修改数据写入区块链中,并更新票据标识的版本号,假设更新后的版本号为3。

若开票方设备在按照上述方式成功更新该票据标识对应的版本号后,获取到第二开票方操作员触发的票据数据提交指令,则根据该票据数据提交指令查找到票据标识对应的当前最新的版本号为3。由于第二版本号3与第一版本号2不一致,开票方设备则判定第二开票方操作员预录入的票据修改数据无效,并通过用户操作界面向第二开票方操作员展示表示票据数据修改失败的提示信息。其中,第一开票方操作员和第二开票方操作员可基于相同或不同的开票方设备,对同一票据标识的同一初始票据数据发起修改。

上述票据数据处理方法,开票方设备将对应于票据标识获取的初始票据数据展示给开票方操作员时,实时检测开票方操作员对应触发的票据数据提交指令,且在检测到票据数据提交指令时,获取相应的票据修改数据,并将初始票据数据对应的版本号(第一版本号)与票据标识对应的当前最新的版本号(第二版本号)进行比较。当二者一致时,表明初始票据数据尚未被其他开票方操作员修改过,则判定票据修改数据有效,并借助于区块链节点将该票据修改数据写入区块链中,以实现对初始票据数据的修改。由此,多个开票方操作员可对同一初始票据数据同时发起修改,相应的一个或多个开票方设备按照上述方式判断各票据修改数据的有效性,并根据有效的票据修改数据实现对初始票据数据的修改。这样,同一初始票据数据在同一时间至多有一个有效的票据修改数据,即同一时间至多有一个开票方操作员能够成功修改该初始票据数据,从而实现了票据数据的并发修改控制,能够提高票据数据的处理效率。

在一个实施例中,区块链节点根据票据数据获取请求,从区块链中查找票据标识对应的初始票据数据,包括:区块链节点解析票据数据获取请求,得到票据标识和开票方操作员标识;区块链节点根据开票方操作员标识,按照预设校验方式对开票方操作员标识对应的开票方操作员的权限进行校验;当校验通过时,区块链节点根据票据标识在区块链中查找相应的初始票据数据。

其中,开票方操作员标识用于唯一标识开票方操作员,可以是由数字、字母和符号等字符中的至少一种组成的字符串,具体可以是开票方操作员的。预设校验方式是预先设定的、用于校验开票方操作员对票据标识对应的票据数据是否具备查询权限和/或修改权限的方式。预设校验方式还可用于校验开票方操作员的合法性。预设校验方式比如将开票方操作员标识与预设白名单列表进行匹配,以根据匹配结果确定校验结果。预设白名单列表是由对票据标识所对应的票据数据具备查询权限(和/或修改权限)的开票方操作员标识组成的标识集合。预设白名单列表中还可包括对票据标识对应的票据数据具备查询权限(和/或审核权限)的接收方操作员标识或接收方审核员标识。

具体地,票据数据获取请求中携带有票据标识和开票方操作员标识。区块链节点解析接收到的票据数据获取请求,得到相应的票据标识和开票方操作员标识,根据票据标识确定预配置的预设白名单列表,并将开票方操作员标识与所确定的预设白名单列表进行匹配,以根据匹配结果对该开票方操作员标识对应的开票方操作员的权限进行校验。当开票方操作员标识与预设白名单列表匹配成功时,表明该开票方操作员对该票据标识对应的票据数据具备查询权限和/或修改权限,区块链节点则判定该开票方操作员的权限校验结果为校验通过,并根据票据标识在区块链中查找与该票据标识对应的、且最晚写入区块链的票据数据,作为初始票据数据。相应地,当开票方操作员标识与预设白名单列表匹配失败时,表明该开票方操作员不具备对该票据标识所对应的票据数据的查询权限和/或修改权限,区块链节点则判定该开票方操作员的权限校验结果为校验未通过,并向开票方设备反馈表示权限校验失败的提示信息。

在一个实施例中,区块链节点将解析得到的开票方操作员标识分别与预设白名单列表中的各开票方操作员标识进行匹配,当预设白名单列表中存在与解析得到的开票方操作员相匹配的开票方操作员标识时,则判定该解析得到的开票方操作员标识与预设白名单列表匹配成功。

在一个实施例中,票据数据获取请求中还包括开票方标识。区块链节点根据票据标识确定相应的开票方标识,并根据所确定的开票方标识对解析票据数据获取请求得到的开票方标识进行校验。当根据票据标识确定的开票方标识与解析得到的开票方标识一致时,区块链节点则判定开票方标识对应的开票方权限校验通过,并按照上述方式对开票方操作员权限进行校验,进而根据校验结果执行相应操作。区块链节点可在区块链中查找票据标识所对应的票据数据,并解析查找到的票据数据,以确定该票据标识所对应的开票方标识。

上述实施例中,区块链节点首先对开票方操作员的权限进行校验,当校验通过时,则查找指定的初始票据数据并反馈至开票方设备,能够提高票据数据的安全性和可靠性。

在一个实施例中,步骤s208包括:当第一版本号与第二版本号一致时,开票方设备通过开票方私钥加密票据修改数据,得到票据数据密文,并将票据数据密文发送至区块链节点;区块链节点通过开票方私钥所对应的开票方公钥解密票据数据密文,得到票据修改数据,并将票据修改数据写入区块链中。

其中,开票方设备可生成与开票方标识对应的密钥对,该密钥对包括开票方私钥和开票方公钥。开票方设备可将开票方私钥缓存在本地,将开票方公钥进行公开,以便于其他计算机设备(比如区块链节点)缓存该开票方公钥。通过开票方私钥加密票据数据时,可通过相应的开票方公钥进行解密;通过开票方公钥加密票据数据时,可通过相应的开票方私钥进行解密。

具体地,当判定第一版本号与第二版本号一致时,开票方设备通过本地缓存的开票方私钥对票据修改数据进行加密,得到相应的票据数据密文,并将该票据数据密文发送至区块链节点。区块链节点在本地缓存中查找与开票方标识对应的开票方公钥,通过该开票方公钥对接收到的票据数据密文进行解密,得到票据修改数据,并对解密得到的票据修改数据执行入链操作,以将该票据修改数据写入区块链中。区块链节点可接收开票方设备发送票据密文数据时发送的开票方标识或开票方公钥,也可根据开票方设备标识确定相应的开票方标识。

在一个实施例中,开票方设备将票据数据密文和票据修改数据发送至区块链节点。区块链节点将解密得到的票据修改数据与所接收到的票据修改数据进行比较。当二者一致时,区块链节点将票据修改数据写入区块链中。

在一个实施例中,当判定第一版本号与第二版本号一致时,开票方设备通过开票方私钥对票据修改数据、初始票据数据和第一版本号进行加密,得到相应的票据数据密文,并将该票据数据密文发送至区块链节点。区块链节点通过开票方公钥解密该票据数据密文,得到票据修改数据、初始票据数据和第一版本号,并将该票据修改数据、初始票据数据和第一版本号写入区块链中。

上述实施例中,对判定有效的票据修改数据进行加密,并将加密得到的票据数据密文发送至区块链节点,以指示区块链节点基于开票方公钥对该票据数据密文进行解密,若能成功解密,则成功校验了开票方身份的合法性,且能判定票据修改数据未被第三方恶意篡改过,则将该票据修改数据写入区块链,以保证票据数据的合法性、可靠性和不可恶意篡改性。

在一个实施例中,步骤s208包括:当第一版本号与第二版本号一致时,开票方设备将票据修改数据发送至区块链节点;区块链节点基于共识机制对票据修改数据进行共识,并生成与共识通过的票据修改数据对应的数据区块;区块链节点获取当前系统时间,根据当前系统时间生成与票据修改数据对应的版本号,将生成的版本号写入数据区块,并将写入版本号的数据区块加入区块链中。

具体地,当判定第一版本号与第二版本号一致时,开票方设备将票据修改数据发送至区块链节点。区块链节点将该票据修改数据传递至区块链网络中的其他区块链节点,以基于共识算法对该票据修改数据进行共识。当这些区块链节点达成共识后,也就是当票据修改数据共识通过后,区块链节点生成与该票据修改数据对应的数据区块。进一步地,区块链节点获取当前系统时间,根据该当前系统时间确定该票据修改数据的版本号,并将该版本号写入该票据修改数据对应的数据区块中,进而将写入版本号和票据修改数据的数据区块加入区块链中,以将该票据修改数据和相应版本号写入区块链中。区块链节点可基于现有技术提供的共识机制对票据修改数据进行共识,在此不再赘述。

在一个实施例中,区块链节点获取当前系统时间,选取随机数,并根据该当前系统时间和随机数生成与票据修改数据对应的版本号。版本号中包括随机数,能够有效避免第三方恶意修改票据数据并伪造版本号的问题。举例说明,假设当前系统时间是2019年01月21日10点25分,随机数为11,则生成的版本号可以是201901211025、20190121102511或11201901211025等。

在一个实施例中,区块链节点生成的版本号中可包括票据修改数据所对应的数据区块的区块编号,还可包括该票据修改数据对应的开票方标识或开票方操作员标识。

在一个实施例中,区块链网络中常用的共识算法有pow(proofofwork,工作量证明)、pos(proofofstake,权益证明)、dpos(delegatedproofofstake,委任权益证明)、pbft(practicalbyzantinefaulttolerance,实用拜占庭容错算法)及raft(一致性算法)等等。

在一个实施例中,区块链节点将写入版本号的数据区块发送至区块链网络中的其他区块链节点,以使得该区块链网络中的各区块链节点均将该写入版本号的数据区块加入本地缓存的区块链中。

上述实施例中,通过共识机制来保证各区块链节点将相同的数据区块加入区块链中,从而保证各区块链节点中数据区块的一致性。进一步地,根据当前系统时间确定版本号,以更新票据标识对应的版本号,作为该票据标识对应的最新的版本号,以便于在查找票据标识对应的票据数据时能够快速定位当前最新的版本号,进而根据版本号快速确定所要查找的票据数据,提高了票据数据的查找效率,从而能够提高票据数据的处理效率。

在一个实施例中,开票方设备将票据修改数据发送至区块链节点,包括:开票方设备将票据修改数据和第一版本号发送至区块链节点;生成与共识通过的票据修改数据对应的数据区块之后,方法还包括:区块链节点在区块链中查找与票据标识对应的当前最新的版本号,作为第三版本号;当第一版本号与第三版本号一致时,区块链节点跳转至获取当前系统时间的步骤继续执行。

具体地,当第一版本号与第二版本号一致时,开票方设备将票据修改数据和第一版本号发送至区块链节点。区块链节点在按照上述方式生成与共识通过的票据修改数据对应的数据区块后,根据票据标识在区块链中查找与该票据标识对应的当前最新的版本号,作为第三版本号,并将第三版本号与第一版本号进行比较。当第一版本号与第三版本号一致时,表明该第一版本号对应的初始票据数据是票据标识对应的当前最新版本的票据数据,也即表明在将该票据修改数据写入区块链之前,不存在其他针对该初始票据数据触发生成并被成功写入区块链的票据修改数据,区块链节点则获取当前系统时间,并将根据该当前系统时间确定的版本号写入票据修改数据对应的数据区块中,进而将写入版本号的数据区块加入区块链中。

上述实施例中,由于区块链节点将接收到的票据修改数据写入区块链中需要耗费一段时长,尤其是在待写入区块链的数据(或票据修改数据)数量较大时,该票据修改数据可能需要排队等待才能最终被写入区块链中。因此,在区块链节点接收开票方设备发送的票据修改数据之后、且将该票据修改数据成功写入区块链之前,可能会存在初始票据数据对应的其他票据修改数据被成功写入区块链中。区块链节点在生成票据修改数据所对应的数据区块之后,且在生成该票据修改数据对应的版本号之前,从区块链中查找票据标识对应的当前最新的版本号,以根据该版本号和初始票据数据的版本号,判定是否存在该初始票据数据对应的其他票据修改数据已被成功写入区块链中,由此判定是否存在其他开票方操作员成功修改过该初始票据数据,若没有则将该票据修改数据写入区块链中,以完成对初始票据数据的修改。这样,在无需抢占数据库锁的情况下,能够保证票据数据的一致性和可靠性,且能够提高票据数据的处理效率。

在一个实施例中,区块链节点为区块链节点集群中的数据处理节点;当第一版本号与第二版本号一致时,开票方设备将票据修改数据发送至区块链节点,包括:当第一版本号与第二版本号一致时,开票方设备生成携带有票据修改数据的签名请求;开票方设备将签名请求发送至区块链节点集群中的多个区块链节点;发送的签名请求用于指示多个区块链节点,按照预设签名方式分别对票据修改数据进行签名,得到数字签名;开票方设备接收多个区块链节点反馈的数字签名,根据各数字签名得到数字签名数组,并将数字签名数组和票据修改数据发送至数据处理节点;区块链节点获取当前系统时间,包括:数据处理节点按照预设签名校验方式,根据数字签名数组对票据修改数据进行签名校验;当签名校验通过时,数据处理节点获取当前系统时间。

其中,签名请求是用于触发数字签名操作的请求。数字签名数组包括一个或多个数字签名,还可包括各数字签名对应的解密密钥,比如签名公钥。预设签名方式是预先设定的区块链节点对票据修改数据进行数字签名的方式。预设签名校验方式是预先设定的对票据修改数据进行签名校验的方式。

具体地,区块链网络中包括多个区块链节点,该多个区块链节点组成区块链节点集群,该区块链节点集群中的一个或多个区块链节点为数据处理节点,数据处理节点可以是区块链网络中与开票方设备对应的区块链节点。当判定第一版本号与第二版本号一致时,开票方设备生成携带有票据修改数据的签名请求,并按照预设签名条件将生成的签名请求发送至区块链节点集群中的多个区块链节点。接收到签名请求的各区块链节点解析签名请求得到待签名的票据修改数据,并按照预设签名方式分别对票据修改数据进行签名得到数字签名,并将签名得到的数字签名反馈至开票方设备。开票方设备将各区块链节点反馈的数字签名进行拼接,得到数字签名数组,并将该数字签名数组和票据修改数据发送至数据处理节点。数据处理节点在基于共识机制对票据修改数据进行共识、且生成与共识通过的该票据修改数据对应的数据区块后,按照与预设签名方式相匹配的预设签名校验方式,根据数字签名数组对票据修改数据进行签名校验。当签名校验通过时,数据处理节点获取当前系统时间,以根据该当前系统时间生成版本号,进而将写入该版本号的数据区块加入区块链中。

在一个实施例中,开票方设备根据预配置的预设签名条件,确定用于对该票据修改数据进行数字签名的区块链节点的数量,从区块链节点集群中选取该数量的区块链节点,并将签名请求分别发送至选取的各区块链节点。其中,选取的区块链节点中可包括数据处理节点。

在一个实施例中,接收到签名请求的区块链节点基于自身的签名私钥对票据修改数据进行加密,得到数字签名。开票方设备对各数字签名进行拼接得到相应的数字签名数组,并将该数字签名数组和票据修改数据发送至数据处理节点。数据处理节点根据接收到的数值签名数组得到多个数字签名,并确定各数字签名对应的签名公钥,进而根据各签名公钥分别对相应的数字签名进行解密,得到解密后的数字签名。数据处理节点将各解密后的数字签名分别与票据修改数据进行比较,以根据比较结果对相应数字签名进行校验。当票据修改数据与解密后的数字签名一致时,则判定相应数字签名的校验结果为校验通过。数据处理节点统计该多个数字签名中校验结果为校验通过的数字签名的数量,当统计的数量大于或等于预设数量阈值时,则判定票据修改数据的签名校验结果为校验通过。

在一个实施例中,区块链节点通过哈希算法对票据修改数据进行哈希运算得到哈希值,并利用自身的签名私钥对哈希值进行加密得到数字签名。相应地,数据处理节点利用各签名公钥对相应的数字签名进行解密,通过哈希算法对票据修改数据进行哈希运算得到哈希值,并将各解密后的数字签名分别与计算得到的哈希值进行比较,以根据比较结果确定签名校验结果。

在一个实施例中,开票方设备接收各区块链节点反馈的数字签名和签名公钥,并根据各数字签名和签名公钥得到相应的数字签名数组。开票方设备可将初始票据数据、第一版本号和票据修改数据作为事务数据,并针对该事务数据触发上述数字签名操作和入链操作,以将该事务数据写入区块链中。

在一个实施例中,区块链节点在接收到票据标识对应的签名请求时,根据签名请求执行该票据标识对应的智能合约,并在智能合约成功执行完毕时,利用自身的签名私钥对票据修改数据进行加密,得到数字签名。

上述实施例中,通过多个区块链节点对票据修改数据进行数字签名,并在执行入链操作时根据该多个数字签名对票据修改数据进行签名校验,以保证该票据修改数据的合法性和有效性,从而保证区块链中记录的票据数据的可靠性和不可篡改性。

如图3所示,在一个实施例中,提供了一种票据数据处理方法,该方法包括以下步骤:

s302,开票方设备获取携带有票据标识的票据数据修改请求。

s304,开票方设备根据票据数据修改请求生成携带有票据标识的票据数据获取请求,并将票据数据获取请求发送至区块链节点集群中的数据处理节点。

s306,数据处理节点解析票据数据获取请求,得到票据标识和开票方操作员标识。

s308,数据处理节点根据开票方操作员标识,按照预设校验方式对开票方操作员标识对应的开票方操作员的权限进行校验。

s310,当校验通过时,数据处理节点根据票据标识在区块链中查找相应的初始票据数据,将初始票据数据对应的版本号作为第一版本号。

s312,开票方设备接收数据处理节点对应反馈的初始票据数据和第一版本号。

s314,开票方设备通过用户操作界面将初始票据数据展示给开票方操作员,并实时检测开票方操作员针对初始票据数据触发的票据数据提交指令。

s316,当检测到票据数据提交指令时,开票方设备获取开票方操作员针对初始票据数据预录入的票据修改数据,并从数据处理节点中查找与票据标识对应的当前最新的版本号,作为第二版本号。

s318,当第一版本号与第二版本号一致时,开票方设备生成携带有票据修改数据的签名请求。

s320,开票方设备将签名请求发送至区块链节点集群中的多个区块链节点;发送的签名请求用于指示多个区块链节点,按照预设签名方式分别对票据修改数据进行签名,得到数字签名。

s322,开票方设备接收多个区块链节点反馈的数字签名,根据各数字签名得到数字签名数组,并将数字签名数组和票据修改数据发送至数据处理节点。

s324,数据处理节点基于共识机制对票据修改数据进行共识,并生成与共识通过的票据修改数据对应的数据区块。

s326,数据处理节点按照预设签名校验方式,根据数字签名数组对票据修改数据进行签名校验。

s328,当签名校验通过时,数据处理节点获取当前系统时间,根据当前系统时间生成与票据修改数据对应的版本号,将生成的版本号写入数据区块,并将写入版本号的数据区块加入区块链中。

在一个实施例中,上述实施例中提供的票据数据处理方法,还包括:开票方设备在获得票据修改数据对应的数字签名数组后,将该数字签名数组、票据修改数据和第一版本号发送至数据处理节点。数据处理节点在生成与共识通过的数据区块后,在区块链中查找票据标识对应的当前最新的版本号,作为第三版本号,并将第一版本号与第三版本号进行比较。当二者一致时,数据处理节点跳转至按照预设签名校验方式,根据数字签名数组对票据修改数据进行签名校验的步骤继续执行。

在一个实施例中,开票方设备基于开票方私钥加密票据修改数据得到票据数据密文,并将票据数据密文和数字签名数组发送至数据处理节点。相应地,数据处理节点基于开票方公钥对票据数据密文进行解密,得到票据修改数据,并跳转至基于共识机制对票据修改数据进行共识的步骤继续执行。

应该理解的是,虽然图2-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图1所示,提供了一种票据数据处理系统,该系统包括:开票方设备102和区块链节点104;

开票方设备102,用于获取票据标识对应的初始票据数据和初始票据数据对应的版本号,并将获取的版本号作为第一版本号;通过用户操作界面将初始票据数据展示给开票方操作员,并实时检测开票方操作员针对初始票据数据触发的票据数据提交指令;

开票方设备102,还用于当检测到票据数据提交指令时,获取开票方操作员针对初始票据数据预录入的票据修改数据,并从区块链节点104中查找与票据标识对应的当前最新的版本号,作为第二版本号;当第一版本号与第二版本号一致时,将票据修改数据发送至区块链节点;

区块链节点104,用于将票据修改数据写入区块链中。

在一个实施例中,开票方设备102,还用于获取携带有票据标识的票据数据修改请求;根据票据数据修改请求生成携带有票据标识的票据数据获取请求,并将票据数据获取请求发送至区块链节点104;区块链节点104,还用于根据票据数据获取请求,从区块链中查找票据标识对应的初始票据数据,将初始票据数据对应的版本号作为第一版本号;开票方设备102,还用于接收区块链节点104对应反馈的初始票据数据和第一版本号。

在一个实施例中,区块链节点104,还用于解析票据数据获取请求,得到票据标识和开票方操作员标识;根据开票方操作员标识,按照预设校验方式对开票方操作员标识对应的开票方操作员的权限进行校验;当校验通过时,根据票据标识在区块链中查找相应的初始票据数据。

在一个实施例中,开票方设备102,还用于当第一版本号与第二版本号一致时,通过开票方私钥加密票据修改数据,得到票据数据密文,并将票据数据密文发送至区块链节点104;区块链节点104,还用于通过开票方私钥所对应的开票方公钥解密票据数据密文,得到票据修改数据,并将票据修改数据写入区块链中。

在一个实施例中,开票方设备102,还用于当第一版本号与第二版本号一致时,将票据修改数据发送至区块链节点104;区块链节点104,还用于基于共识机制对票据修改数据进行共识,并生成与共识通过的票据修改数据对应的数据区块;获取当前系统时间,根据当前系统时间生成与票据修改数据对应的版本号,将生成的版本号写入数据区块,并将写入版本号的数据区块加入区块链中。

在一个实施例中,开票方设备102,还用于将票据修改数据和第一版本号发送至区块链节点;区块链节点104,还用于在区块链中查找与票据标识对应的当前最新的版本号,作为第三版本号;当第一版本号与第三版本号一致时,跳转至获取当前系统时间的步骤继续执行。

如图4所示,在一个实施例中,上述票据数据处理系统还包括:区块链节点集群110;上述一个或多个实施例提供的票据数据处理系统中的区块链节点104为区块链节点集群110中的数据处理节点104;

开票方设备102,还用于当第一版本号与第二版本号一致时,生成携带有票据修改数据的签名请求;将签名请求发送至区块链节点集群110中的多个区块链节点(比如区块链节点112、区块链节点114和区块链节点116等,该多个区块链节点相互之间可通过网络连接进行通信);发送的签名请求用于指示多个区块链节点,按照预设签名方式分别对票据修改数据进行签名,得到数字签名;

开票方设备102,还用于接收多个区块链节点反馈的数字签名,根据各数字签名得到数字签名数组,并将数字签名数组和票据修改数据发送至数据处理节点;

数据处理节点104,用于按照预设签名校验方式,根据数字签名数组对票据修改数据进行签名校验;当签名校验通过时,获取当前系统时间。

关于票据数据处理系统的具体限定可以参见上文中对于票据数据处理方法的限定,在此不再赘述。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是开票方设备或区块链节点,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库可用于存储初始票据数据、第一版本号和票据修改数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种票据数据处理方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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