发明内容
本发明所要解决的技术问题是提供一种实现大型业务账务清分结算的方法及系统,能够跨地区、跨企业地实现对业务账务的清分结算及付费。
为了解决上述技术问题,本发明提供了一种实现大型业务账务清分结算系统,包括过滤层模块和拆分层模块,其中:
过滤层模块,用于根据合作项目记录创建拆分条件,根据拆分条件创建相应的过滤器,通过过滤器对交易记录进行过滤,筛选出多组待拆分的交易记录集;
拆分层模块,用于根据合作项目记录中关联于拆分条件的分配份额对多组待拆分的交易记录集进行拆分,拆分出所有收益账户应从支付账户划拨出的金额信息。
进一步地,
过滤层模块提供用户接口,用于输入合作项目记录,并接收通过网络传输的交易记录;创建拆分条件是指从合作项目记录中分解出对交易记录进行拆分所依据的一个或多个拆分依据对象并记录;根据拆分条件创建相应的过滤器是指根据拆分依据对象创建相应的一个或多个过滤器。
进一步地,在过滤层模块和拆分层模块之间还包括过滤结果汇总层模块,其中:
过滤层模块还根据合作项目记录创建拆分份额,即依据拆分条件下所有拆分依据对象从合作项目记录中的分配份额拆分出的拆分份额,并记录和保存在数据库;将筛选出的多组交易记录集保存在数据库;
过滤结果汇总层模块,用于从数据库中的多组交易记录集汇总出支付账户针对拆分条件所要支付的交易金额信息,并将所有汇总结果保存在数据库;
拆分层模块根据从数据库读取的拆分份额,从数据库中的所有汇总结果中拆分出所有收益账户应从支付账户划拨出的金额信息,并将所有拆分结果保存在数据库。
进一步地,该系统还包括拆分结果汇总层模块,其中:
拆分结果汇总层模块,用于从数据库中的所有拆分结果中汇总出每一收益账户应从支付账户划拨的所有金额信息,并将所有汇总记录保存在数据库中。
进一步地,
拆分结果汇总层模块还提供与银行交互的接口,从数据库中一一读取每一收益账户应从支付账户划拨的所有金额的汇总记录,通过与银行交互的接口进行划账操作。
为了解决上述技术问题,本发明提供了一种实现大型业务账务清分结算方法,包括:
根据合作项目记录创建拆分条件,依据拆分条件创建相应的过滤器,通过所述过滤器对发生的交易记录进行过滤,筛选出多组待拆分的交易记录集;
根据合作项目记录中关联于拆分条件的分配份额对多组待拆分的交易记录集进行拆分,拆分出所有收益账户应从支付账户划拨出的金额信息。
进一步地,创建的拆分条件通过拆分条件记录记载相应的信息,其中至少包括:
拆分条件标识字段,用于标识拆分条件下一个或多个拆分依据对象;
一对或多对键及键值字段,用于描述作为拆分依据对象的属性。
进一步地,根据合作项目记录创建拆分条件,根据拆分条件创建相应的多个过滤器,具体包括:
提供用户接口输入所述合作项目记录,并接收通过网络传输的交易记录;
从合作项目记录中分解出拆分交易记录所依据的拆分条件下的一个或多个拆分依据对象,用拆分条件标识字段一一标识在拆分条件记录中,并通过一对或多对键及键值字段描述拆分依据对象的属性;依次获取拆分条件记录中由拆分条件标识字段标识的拆分条件,找到拆分条件下由一个或多个键值字段描述的拆分依据对象,依据该拆分依据对象创建相应的过滤器,并附着在该拆分条件下的整体过滤器上;最终为每一拆分条件创建出相应的一个或多个过滤器。
进一步地,通过过滤器对发生的交易记录进行过滤,筛选出多组待拆分的交易记录集,具体包括:
在执行过滤前初始化表示过滤结果的所述交易记录集的参数;
依次地获取创建的每一个过滤器的接口,以过滤的交易记录集为返回参数调用相应的过滤器,并将过滤结果的交易记录集参数置为该过滤器返回的参数;直至调用所有的过滤器后,得到所有过滤器过滤的多组待拆分的交易记录集。
进一步地,在根据合作项目记录创建拆分条件的同时还创建拆分份额,创建的拆分份额通过拆分份额记录记载相应的信息,其中至少包括:
拆分份额标识字段,用于标识依据拆分依据对象所创建的所有的拆分份额;
拆分比例字段,用于表示依据拆分条件下所有拆分依据对象从合作项目记录中的分配份额拆分出的拆分份额;
收益主户标识字段,用于标识合作项目记录中的收益主户;拆分条件标识字段,用于作为与拆分条件记录关联的外引字段标识拆分条件下一个或多个拆分依据对象。
进一步地,根据合作项目记录中关联于拆分条件的分配份额对多组待拆分的交易记录集进行拆分,拆分出所有收益账户应从支付账户划拨出的金额信息,具体包括:
从多组交易记录集中汇总出支付账户针对拆分条件所要支付的交易金额信息,并保存所有汇总结果;
根据拆分份额记录记载的信息从保存的所有汇总结果中拆分出所有收益账户应从支付账户划拨出的金额信息,并保存所有拆分结果。
进一步地,该方法还包括:
从保存的所有拆分结果汇总出每一收益账户应从支付账户划拨的所有金额信息,并保存所有的汇总记录。
进一步地,该方法还包括:
从保存的所有汇总记录中读取每一条汇总记录,按该记录下记载的每一收益账户应从支付账户划拨出的金额信息通过提供的与银行交互的接口进行划账操作,划账操作成功便删除相应的汇总记录。
本发明的技术方案与现有方案相比较,通过针对各类业务形成的账务拆分成最小单位,然后针对各类业务的需要由该最小单位组合成实际的账务清分结算系统,由此,能够实现大型业务通用的、功能独立且可扩展的以及插件式的账务清分结算及付费。
本发明支持同一个系统中含有多种拆分项,例如交通行业的通行费用的拆分和其他增值服务费用的拆分,支持对拆分依据相对复杂的组合,支持同一拆分对象的不同实例使用不同的拆分依据对象进行拆分。
具体实施方式
以下结合附图和优选实施例对本发明的技术方案进行详细地阐述。以下例举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。
如图1所示,表示了本发明的实现大型业务账务清分结算系统实施例的一个总体架构,它包括过滤层模块、过滤结果汇总层模块、拆分层模块、拆分结果汇总层模块以及数据库,其中:
过滤层模块,用于根据合作项目记录创建拆分条件和拆分份额,依据拆分条件创建相应的多个过滤器,通过过滤器对交易记录进行过滤,筛选出相应的多组待拆分交易记录集;过滤层模块会提供用户接口,用于用户输入合作项目记录,并接收通过网络传输发生的交易记录,根据该合作项目记录创建拆分条件和拆分份额,并将合作项目记录、创建的拆分条件记录和拆分份额记录保存在数据库中。
这里,创建拆分条件是指从合作项目记录信息中分解出对交易记录进行拆分所依据的多个“拆分依据对象”。譬如,A企业实体和B企业实体共同修建了一条道路,约定从08:00-20:00时间段内,A企业实体享有40%份额,B企业实体享有60%份额;其余时间段则A企业实体享有60%份额,B企业实体享有40%份额。其中,时间段08:00-20:00作为一个拆分依据对象,其余时间段作为另一个拆分依据对象。
过滤结果汇总层模块,用于依据待拆分交易记录中的支付账户信息对过滤的多组待拆分交易记录集进行汇总;
这里,汇总的依据是每条待拆分交易记录所对应的支付账户信息;汇总对象是过滤层模块过滤的多组待拆分交易记录集,需要对每一组待拆分交易记录集分别进行汇总;汇总的结果即支付账户针对拆分依据对象所要支付的交易金额。
拆分层模块,用于根据从数据库读取的拆分份额记录从过滤结果汇总层所有的汇总结果中拆分出所有收益账户应从支付账户划拨出的金额信息;
拆分结果汇总层模块,用于从所有拆分结果中汇总出每一收益账户应从支付账户划拨的所有金额,并将汇总结果保存在数据库中。
拆分结果汇总层模块提供与银行交互的接口,从数据库中一一读取每一收益账户应从支付账户划拨的所有金额的汇总记录,通过提供的接口进行实际的划账操作。
在上述方法实施例中,需要通过一定的标准化、持久化设计来表述和保存相关的信息。关于持久化设计,主要需要考虑兼容性,对于不同的业务无需修改。为了满足这种需求,并且能很好的支持各类业务。以下给出了最核心的设计元素说明。
其中,过滤层提供的用户界面输入的合作项目记录和通过网络传输的交易记录、创建的拆分条件和拆分份额信息,以及待拆分交易记录分别通过本发明提供的表1、表2、表3及表4来表述。
表1合作项目记录(agreement_item_info)
其中,id字段用于标识合作对象,譬如标识合作对象为修造三座桥梁(B1、B2、B3),或标识合作对象为修造两条道路(R1、R2);owner_id字段用于标识合作参与者,它对应于收益账户标识account_id;agreement_object_description字段用于描述合作对象,agreement_object_key(1~n)字段用于表述合作对象的属性,譬如车道、车型或运行时间等;agreement_object_enum(1~n)字段提供与收入分配相关的合作对象的属性枚举组,譬如修造的桥梁的车道(L1,L2)、可能通过的车型(1型,2型)等,或修造的道路包括的对车辆运行时间段的限制等;income_distribution_appoint字段用于表述合作项目约定的收入分配规则,它与owner_id字段标识的合作参与者和agreement_object_description字段的描述相关。
表2待拆分的交易记录(trade_item_info)
表中的id字段用于标识支付账户,譬如以支付账户的车牌号标识,或者以其手机终端号码标识等;trade_sum字段用于表述支付账户实现交易的金额数,trade_sum_unit字段则随之表述实现交易的金额单位,譬如元或千元、万元等;agreement_item_id字段用于表述交易发生的日期、时间或时间段。其余的,agreement_item_id字段是外引用的合作项目记录(agreement_item_info)中的合作对象标识,agreement_object_enum(1~n)字段则是外引用的合作项目记录(agreement_item_info)中的合作对象与收入分配相关的提示性键词及其值,这些键词值均与发生的交易相关。
实际上,表2是通过用户接口接收的由网络传输进来的交易记录,该记录上的信息字段与合作项目记录上一些信息字段相关联。
以上表1、表2可作为本发明的系统与其它系统进行信息交互的标准接口。譬如表1作为引入一个大型合作项目的合同中的具体合作内容的接口,表2作为大型合作项目合作成功后由接收合作项目的管理者(譬如道路的交管部门等)传入的交易记录的接口。
表3拆分条件记录(distibuted_by_target)
字段名称 |
数据类型 |
选择性 |
缺省值 |
字段描述 |
id |
Long |
选 |
|
拆分条件标识 |
distribute_object_type |
Varchar |
必选 |
- |
拆分对象类型 |
start_time_key |
Varchar |
选 |
|
开始时间键 |
start_time_value |
Varchar |
选 |
- |
开始时间值 |
end_time_key |
Varchar |
选 |
|
结束时间键 |
end_time_value |
Varchar |
选 |
|
结束时间值 |
key1 |
Varchar |
选 |
- |
键一 |
value1 |
Varchar |
选 |
|
值一 |
key2 |
Varchar |
选 |
|
键二 |
value2 |
Varchar |
选 |
|
值二 |
key3 |
Varchar |
选 |
|
键三 |
value3 |
Varchar |
选 |
|
值三 |
key4 |
Varchar |
可选 |
|
键四 |
value4 |
Varchar |
选 |
|
值四 |
key5 |
Varchar |
选 |
|
键五 |
value5 |
Varchar |
选 |
|
值五 |
其中,id字段用于标识不同的拆分条件,即所包含的拆分依据对象集;distribute_object_type字段用于表示相应的id字段所标识的拆分依据对象对应的拆分对象的类名;另外,表1包含了5个键(key1~key5)及其键值(value1~value5)和一组时间键及其键值。经验表明5个拆分条件项足以满足一般的业务需求,一旦超出该范围可在表1中继续添加需要的键及其键值。
表3拆分份额记录(distribute_share_info)
字段名称 |
数据类型 |
选择性 |
缺省值 |
字段描述 |
id |
bigint |
选 |
|
拆分份额标识 |
distributed_by_target_id |
bigint |
选 |
|
拆分条件标识 |
share |
Varchar |
选 |
|
拆分比例 |
account_id |
bigint |
选 |
|
收益主户标识 |
bak |
Varchar |
选 |
|
备注 |
version_code |
Varchar |
选 |
|
版本标识 |
其中,id字段用于标识不同的拆分份额,share字段用于表示合同约定的拆分比例(份额);其它,包含了一个对拆分条件记录(distibuted_by_target)的外键引用字段和一个对收益账户信息记录(owner_account)的外键引用,即通过distributed_by_target_id字段引用拆分条件记录中的信息,通过account_id字段引用收益账户信息记录中的收益账户信息。
收益账户的必要信息可通过表4来表述。
表4收益账户信息记录(owner_account)
字段名称 |
数据类型 |
选择性 |
缺省值 |
字段描述 |
id |
long |
选 |
|
收益主户标识 |
name |
Varchar |
选 |
|
收益主户名称 |
account_bank_number |
long |
选 |
|
收益主户的账号 |
artificial_person_certificate_type |
smallint |
选 |
|
法人证件类型 |
artificial_person_certificate_code |
Varchar |
选 |
|
法人证件号码 |
artificial_person_name |
Varchar |
选 |
|
法人姓名 |
post_code |
Varchar |
选 |
|
邮编 |
address |
Varchar |
选 |
|
地址 |
telephone_number |
Varchar |
选 |
|
固定电话号码 |
cellphone_number |
Varchar |
选 |
|
移动电话号码 |
email |
Varchar |
选 |
|
电子邮件 |
本发明对上述过滤层模块中过滤器的设计基于如下考虑:
过滤的含义是依据拆分依据对象将待拆分交易记录过滤为多组待拆分交易记录的集合,图1形象地描述了其位置和作用。实际上,一个系统中某种类型的待拆分交易记录对应的拆分依据对象有效实例的个数,等于该类型待拆分交易记录最终的产生的过滤结果数,也等于系统中该类型的待拆分交易记录对应的过滤器的总数,即:
过滤器的数量=过滤结果数量=拆分依据对象数量;
由此可以推论:每一过滤结果中的所有待拆分交易记录对应相同的拆分份额信息。
实际上拆分依据对象有效实例中每个键及其值表达一种约束关系(取值范围)。本发明的过滤器采用装配的方式实现,即根据需要装配具不同的拆分依据对象的过滤器,极大地增加了本发明方案的灵活性,并能够有效地减少对系统重复开发的工作量。本发明给出过滤器的理论模型,即集合A描述一个待拆分交易记录的集合:A={x1,x1,...xm|xεX1,x2εX2,xnεXm};
其中:每个待拆分交易记录包括m个关键信息x1,x2,......xm。X1为x1的取值范围,X2为x2的取值范围,......Xm为xm的取值范围。
如此,根据每条拆分依据对象的每一过滤器所能过滤的出的记录以集合的形式表达如下:
B={x1,x2,...xm|x1=x11,x2=x21,......,xm=xm1}
式中,B是A的子集。
根据集合的知识可知:
B={x1,x2,...xm|x=x11}∩{x1,x2,...xm|x2=x21}∩{x1,x2,...xm|x2m=xm1};
式中各集合都是A的子集。
通过以上的理论推导可得到这样一个结论:任何一个复杂的过滤器都可以通过对最基本的单个拆分依据对象字段的过滤器的组装得到。
本发明的过滤器正式基于这样的一个结论,这样设计可以满足不同的应用系统,以各种不同的形式的组合对可拆分交易记录进行拆分,提高了方案的通用性。
过滤层模块依据拆分条件中多个拆分依据对象创建多个过滤器,通过图3可以看出其工作过程,即该模块从数据库中保存的拆分条件记录(表3)中依次获取由id字段标识的拆分条件,在该拆分条件下找到由一个或多个键值表示的所有单字段的拆分依据对象,依据相应的拆分依据对象创建其过滤器(即过滤函数),附着在该拆分条件下的整体过滤器(即对应于每条拆分条件单个字段的过滤器);最终为每一拆分条件均创建出一个或多个过滤器。
过滤层模块通过过滤器对交易记录进行过滤,通过图4可看出其工作过程,即该模块在执行过滤前初始化表示过滤结果交易记录集参数,然后去调用所创建的每一个过滤器,将过滤结果交易记录集参数置为过滤器返回的过滤结果参数,最终得到所有过滤器过滤的交易记录集。
拆分结果汇总层模块通过与银行交互的接口进行实际的划账操作,相应的工作过程可通过图5了解到,即该模块依次从数据库中读取每一条汇总记录,按该记录下记载的每一收益账户应从支付账户划拨出的金额信息通过与银行交互的接口进行划账操作,操作成功便从数据库中删除相应的汇总记录。
本发明针对上述系统实施例,相应地还提供了实现大型业务账务清分结算方法实施例,其流程如图2所示,包括:
110:根据合作项目记录创建拆分条件和拆分份额信息,用依据拆分条件创建的过滤器对交易记录进行过滤;
用户通过用户界面可输入合作项目记录(表1),并将交易记录(表2)中的信息与之关联。
假设有5个合作参与者,分别为o1、o2、o3、o4、o5,他们合资共同修筑了3座桥梁,具体情况如下表5和表6中,该表5和表6实际是前述表1、表2的实例。
表5(trade_item_info)
如图3所示,即本发明提供的输入合作项目记录的一个用户界面实例。
表6(trade_item_info)
根据合作项目记录创建拆分条件和拆分份额信息分别如下表7和表8中,该表7和表8实际是前述表3、表4的实例。
表7(distibuted_by_target)
id |
distribute_object_type |
key1 |
value1 |
key2 |
value2 |
1 |
ran_Record |
agreement_item_id |
1 |
trade_item_enum1 |
11 |
2 |
ran_Record |
agreement_item_id |
1 |
trade_item_enum1 |
12 |
3 |
ran_Record |
agreement_item_id |
2 |
NULL |
NULL |
4 |
ran_Record |
agreement_item_id |
3 |
trade_item_enum2 |
|
5 |
ran_Record |
agreement_item_id |
3 |
trade_item_enum2 |
|
表8(owner_account)
上述步骤中,用依据拆分条件创建的过滤器对交易记录进行过滤,包括创建过滤器和用过滤器对表6中的交易记录进行过滤的流程,分别如图4、图5所示。
其中,表6中序号为1的交易记录被由表7中id为1的拆分条件创建的过滤器筛选出来;表6中序号为2的交易记录被由表7中id为2的拆分条件创建的过滤器筛选出来;表6中序号为3的交易记录被由表7中id为3的拆分条件创建的过滤器筛选出来;表6中序号为4的交易记录被由表7中id为3的拆分条件创建的过滤器筛选出来;表6中序号为5的交易记录被由表7中id为4的拆分条件创建的过滤器筛选出来;表6中序号为6的交易记录被由表7中id为5的拆分条件创建的过滤器筛选出来。至此,所有交易记录均被过滤出来。过滤结果如表9所示。
表9(filter_result)
120:依据交易记录中的支付账户信息对过滤结果进行汇总;
以表6所表述的交易记录中的支付账户标识(车牌号)对表9中所表述的过滤结果进行汇总,汇总结果如表10。由于交易数据量较小,由id为3的拆分条件创建的过滤器筛选出来的过滤结果只有2条待拆分交易记录,但由于两者的车牌号码不同,所以认为支付账户不同,其余均为一条。虽然在此实施例中汇总结果的意义并未体现出来,但是可想而知,如果交易的数据量巨大其汇总的意义便不言而喻了。
表10(filter_result_integration)
实际上,如果不经过对过滤结果进行汇总,而是直接对过滤结果进行拆分也是可以的。本发明之所以将汇总过滤结果加入到方法流程中,是鉴于以下两点原因:
首先,是为了防止因过多或频繁的调用外部接口(与银行)给外界系统(银行)带来的冲击;其次,同时为了降低因舍入误差给支付客户或收益主户造成的损失。
针对第一点,譬如在有些系统中,为了防止运营方因拥有自己的“小金库”造成资金挪用或滋生腐败,不为运营方系统设立专门的账户,如此一来本发明的账务清分结算系统必须直接从客户的银行账户中转账,如此会产生大量的转账动作,因此经过这一步汇总可以大大减少转账次数。
对于第二点,若某支付客户在一个清分结算的周期内产生了1000条可拆分纪录,其中每条可拆分纪录可拆金额为100元,分别拆给3个收益主户,每个收益主户1/3,那么单条拆分项拆分时分别给3个收益主户33元,系统便少收入1元,则对于所有可拆分记录共会造成损失为1000元,可见误差金额与记录数成正比例关系,这对可拆分交易记录庞大的系统来说是难以接受的。
130:根据拆分份额针对所有汇总结果进行拆分;
依据表8中所表述的收益账户的拆分份额对表10中的所有汇总记录进行拆分,得到所有收益账户应从支付账户划拨出的金额信息,如表11所示。
表11(account_transfer)
140:依据拆分结果汇总出每一收益账户应从支付账户划拨的所有金额;
依据表11中所表述的所有收益账户应从支付账户划拨出的金额信息汇总出每一收益账户应从支付账户划拨的所有金额,如表12所示。
表12
150:通过与银行交互执行划账操作。
通过本发明的系统与银行的交互接口实现对每一收益账户从相应的支付账户上划拨金额。
图4表示了依据拆分条件创建过滤器的操作流程,包括如下步骤:
210:根据一条待拆分交易记录,从数据库中查询对应的所有拆分条件;
即针对表6中所表述的每一条待拆分交易记录从数据库中查询拆分条件记录(表7)中查询对应的所有拆分条件。
220~280:针对拆分条件记录中由拆分条件标识(distibuted_by_target_id)表示的每一条拆分条件下所有的拆分项(即由key的value所表述的拆分依据对象)一一创建相应的过滤器,并将创建的过滤器附着在该条拆分条件的整体过滤器上。
图5表示了利用过滤器对待拆分的交易记录(表6中)进行过滤的流程,包括如下步骤:
310:将过滤结果的交易记录集参数置为整体的待拆分记录集参数;
320~350:依次地获取创建的每一单项过滤器的接口,以过滤的交易记录集为返回参数调用相应的过滤器,并将过滤结果的交易记录集参数置为过滤器返回的参数;
360:直至调用所有单项过滤器后,返回所有单项过滤器过滤的交易记录集。
图6表示了通过银行实现对每一收益账户从相应的支付账户上划拨金额的流程,包括:
410:从数据库中查询待划拨的汇总记录;
420~460:依次读取每一条汇总记录,按该记录下记载的每一收益账户应从支付账户划拨出的金额信息通过与银行交互的接口进行划账操作,操作成功便从数据库中删除相应的汇总记录。
若采用直接划账的形式至少需要进行6*3=18次划账,而此处仅使用了10次。如果数据量更大,则会更加提高效率,增大成功率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。