计费帐务引擎中资费模板树设置方法

文档序号:6481838阅读:130来源:国知局
专利名称:计费帐务引擎中资费模板树设置方法
技术领域
本发明涉及计费帐务引擎中模板树设置方法,尤其是电信业务中"资费计算"的方法。
背景技术
资费是电信运营商向客户进行收费的规则和标准。在电信业务中,资费往往是规则复 杂,而且数量庞大难以维护。目前电信业务中的资费往往是由多条资费规则结合各种限制 条件组合得来,复杂度、灵活度非常高,而且数量非常庞大。所以资费规则模板的形成较 为复杂。
由于资费规则复杂度高, 一条资费规则往往要涉及多张表才能配置实现。原来的批价和 优惠算法,用一种平面化的方式去描述资费,对于一些复杂的资费,描述起来比较吃力, 即使能勉强实现,配置起来也很复杂,执行时占用系统资源也比较多,有的甚至无法描述。 为了提高批价和优惠的效率,资费规则都是需要加载到内存中。数量众多的资费加载内存 中,占用了大量的内存空间。由于数量很大,在加载资费和执行资费时,效率都比较低, 对系统资源(cup和内存)消耗比较多。当数据流瞬时大量涌入或CPU资源紧缺时,运营 支撑系统的响应速度会受到影响。
计费帐务引擎,即批价和费率优惠模块,是电信计费软件的核心部分。批价和优惠的 过程,就是对收费规则(资费)进行存储、访问和执行的过程。随着电信业务的不断发展, 电信计费的规则也日趋复杂,数量也越来越多,如何高效的处理资费,提高批价和优惠的 效率,己成为电信运营商和软件提供商关注的焦点。
本发明实现了电信计费软件领域中一种高效灵活的批价和优惠算法。并在这种背景下, 本发明实现了 "资费模板树"的技术,以解决批价和优惠过程中出现的"l)资费规则复杂, 难以描述,执行效率低;2)资费数量众多,大量消耗系统资源"的问题。

发明内容
本发明目的是提出一种计费帐务引擎中资费模板树设置方法,能灵活实现高度复杂 的业务资费;2)应对越来越多的业务资费。当数据流瞬时大量涌入或CPU资源紧缺时,可 提升运营支撑系统的响应速度。
本发明的技术方案是计费帐务引擎中资费模板树设置方法,步骤如下 一个资费被(1)资费定义表,(2)资费模板定义表,(3)节点动作表,(4)资费实例 化参数表完整定义的设置其中(1)资费定义表标志了一个具体的资费是由哪一个资费模 板实例化而来;(2)资费模板定义表,通过树状结构来描述资费模板的组织结构,每个资 费模板都被定义为一颗"资费树";资费模板中的每一条资费规则称之为资费树上的一个"节点";每个节点下面可以有多个"子节点"或相邻"兄弟节点";节点与子节点、兄弟节点
间建立指针关联,形成资费模板的层级关系,构成一棵资费树;对每一颗资费树,按照先
访问当前节点,再访问子节点,然后访问兄弟节点的顺序,从资费树入口开始,可以访问到整个资费树上的所有节点;
资费模板中的每一条资费规则称之为"资费树"上的一个节点;每个节点可以有多个子节点,用来描述此条资费规则下的子规则,节点被看作是它下面子节点的父节点,每个子节点下面又可以有自己的多个子节点,多层的子节点间形成树状结构;父节点相同的节点互称为兄弟节点。节点也可以没有父节点,这类节点的是层次最高的节点,其中的优先级最高的那个节点称为根节点,是"资费树"的访问入口;
"资费模板定义表"由资费模板标识,节点标识,父节点标识,节点动作类型,节点动作标识,节点顺序等字段组成资费模板标识用来区别资费树, 一个资费模板标识就对应一棵资费树;此字段用来划分"资费模板构成表"中的节点都是归属于哪个资费树的;资费树的定义使用了第归的方式;节点标识用来区分资费树下的一个节点;父节点标识用来标识节点的上一级节点是谁。如果父节点标识为0,代表此节点没有父节点;如果父节点标识不为0,则父节点标识必须是一个己经存在的节点标志,用来说明当前节点是哪一个节点的子节点;
节点动作类型用来说明当前节点的类型。节点动作类型分为两种, 一种是"条件",一种是"作用";如果节点动作类型是"条件",则节点动作标识存储的是一个条件编码;如果节点动作类型不是"条件",则节点动作标识存储的是一个作用编码;设置节点动作表
资费模板定义表定义了资费由哪些"动作"构成,以及这些"动作"之间的执行顺序。资费模板定义表中涉及的具体"动作"则定义在节点动作表中。节点动作表分为两类"条件"表和"作用"表,代表一类表 一条基本的资费规则可以简单的归纳为"如果满足条件A,那么执行作用B",或者"执行B作用(无条件)";
对于不同的业务系统,由于业务场景不同,使用的"条件"和"作用"也不尽相同。"资费模板树"技术为了适应不同的业务系统,在实现时将"条件"和"作用"抽象成基类,在基类中分别声明了虚函数"条件判断方法"和"作用方法",各业务系统只要从基类派生出子类,实现本系统中的"条件判断方法"和"作用方法",即可实现本系统中的资费树;对于电信业务中的计费帐务模型,"条件判断方法"实现了对用户费用、用户属性等条件的判断;根据不同的资费需求,通过对资费树的遍历实现-
如果节点动作类型是"条件",则节点动作标识存储的是一个条件编码,资费树的遍历程序会到条件表中査找此条件编码的明细,对此条件做出判断,如果满足条件,才会继续对当前节点的子节点进行遍历;如果节点动作类型不是"条件",则节点动作标识存储的是一个作用编码,资费树的方法会根据作用类型,到相应的作用表中查找此作用编码的明细,找到具体的作用对象,调用此作用对象中的方法,执行这个作用;
对一颗资费树,先访问根节点,根据根节点动作类型,调用动作对象的执行方法,来执行"节点动作标识"所指向的动作对象的动作;再访问根节点的子节点;访问子节点时,在资费树定义表中,查找父节点标志等于当前节点的节点标志的节点,这些节点就是当前节点的子节点;如果子节点下还有子节点,则继续访问此子节点的子节点,直至没有子节点为止;访问完子节点,然后按优先级依次访问根节点的"兄弟节点"。从"根节点"开始,遍历到整个"资费树"上的所有节点;资费树的遍历,用到了第归算法l)从根节点开始;2)执行当前节点的动作;3)执行前节点子节点(第归遍历);4)令当前节点的兄弟节点成为当前节点; 5)执行步骤2)直至当前节点没有兄弟节点;
资费实例化参数表设置
一个具体的资费的实例化过程分为两步
1) 选定资费模板
设置"资费定义表",给资费选择一个合适的资费模板;
2) 对资费模板的参数实例化
设置"资费模板定义表",实现一个资费模板的完整定义。在确定资费模板时,首先需要考虑哪些参数的作用值可能会变化;在配置这些作用值时,其值被初始化为"?参数编码"的格式;"?"是参数需要被实例化的标志;资费模板的参数实例化的过程是在资费树遍历过程中动态完成的;当资费树遍历方法发现作用值的第一个字符是"?",就认为此作用值是需要被实例化,然后取出"?"后面的"参数编码",到"资费实例化参数表"中査找此参数的具体值,査到的值就是需要被替换的作用值;
"资费实例化参数表"有四个字段资费标识,资费模板标识,参数标识,作用值;资费标识用来标识一个真正的现实中的资费;从"资费实例化参数表"査找作用值需要资费标识,资费模板标识,参数标识三个值;得到资费标识后,需要确定此资费采用的资费模板,根据资费标识査找"资费定义表"可得到此资费选用的模板;在遍历资费模板时,动态的得到需要实例化参数编码,然后到"资费实例化参数表"根据资费标识,资费模板标识,参数标识三个值,査找到真正的作用值,完成资费实例化的过程。
本发明通过模板的机制,来解决资费数量庞大难以维护的问题。通过分析发现,众多的资费中,具有很大的重复性。很多资费,基本规则是相同的,只是具体的作用值不同。如"给用户减免100元","给用户减免200元","给用户减免300元"三条资费,其作用方式完全一样,只是作用值不同。可以抽象出资费模板,把作用值作为资费参数,资费的作用框架从资费模板得到,只记录资费的作用值,形成"资费=资费模板+资费参数"的方式,这样可以大大简化配置,使资费易于管理和维护。本发明有益效果
"资费模板树"是一种用树状结构描述的、支持模板的资费实现方法。它嵌入到电信运营软件的计费帐务引擎中,是计费帐务引擎的核心。"资费模板树"中使用树状结构描述资费信息,并且提供了统一的对"资费模板树"进行访问的方法,可以方便的遍历整个资费树,执行资费树上的各条资费规则,可以支持各种灵活的资费配置。"资费模板树"中引入了模板的机制,类型相同的资费可以使用同一个的模板,这样仅仅配置出少量的"资费模板",就可以支持大量的资费,大大简化了资费配置的过程,降低了系统运行时内存的占用率。当数据流瞬时大量涌入或CPU资源紧缺时,可提升运营支撑系统的响应速度。在系统资源不变的情况下,资费部分的内存占用比以前减少60%,批价速度从300条话单/秒提高到1000条话单/秒。


图1资费树模型
具体实施例方式
配置说明一个资费被完整定义涉及到4类参数表,分别是资费定义表,资费模板定义表,节点动作表,资费实例化参数表。*资费定义表
"资费定义表"由资费标识,资费模板标识等字段组成,定义了一个具体的资费是由哪一个资费模板实例化而来。 资费模板定义表
一个资费模板可以定义成一棵资费树,资费树的结构定义在"资费模板定义表"中。资费模板中的每一条资费规则称之为"资费树"上的一个节点。每个节点下面可以有多个子节点,用来描述此条资费规下的子规则。节点被看作是它下面子节点的父节点。每个子节点下面又可以有自己的多个子节点,多层的子节点间形成树状结构。父节点相同的节点互称为兄弟节点。节点也可以没有父节点,这类节点的是层次最高的节点,其中的优先级最高的那个节点称为根节点,是"资费树"的访问入口。
"资费模板表"由资费模板标识,节点标识,父节点标识,节点动作类型,节点动作标识,节点顺序等字段组成。如图1所示。资费模板标识用来区别资费树, 一个资费模板标识就对应一棵资费树。此字段用来划分"资费模板表"中的节点都是归属于哪个资费的。资费树的定义使用了第归的方式。节点标识用来区分资费树下的一个节点。父节点标识用来标识节点的父节点是谁。如果父节点标识为0,代表此节点没有父节点;如果父节点标识不为0,则父节点标识必须是一个已经存在的节点标志,用来说明当前节点是哪一个节点的子节点。
节点动作类型用来说明当前节点的类型。节点动作类型可以分为两种, 一种是"条件",一种是"作用"。如果节点动作类型是"条件",则节点动作标识存储的是一个条件编码;如果节点动作类型不是"条件",则节点动作标识存储的是一个作用编码。*节点动作表
资费模板定义表定义了资费由哪些"动作"构成,以及这些"动作"之间的执行顺序。资费模板定义表中涉及的具体"动作"则定义在节点动作表中。节点动作表不是一张具体的表,而是代表一类表。 一条基本的资费规则可以简单的归纳为"如果满足条件A,那么执行作用B",或者"执行B作用(无条件)",因此节点动作表可以分为两类"条件表"和"作用表"。
对于不同的业务系统,由于业务场景不同,使用的"条件"和"作用"也不尽相同。"资费模板树"技术为了适应不同的业务系统,在实现时将"条件"和"作用"抽象成基类,在基类中分别声明了虚函数"条件判断方法"和"作用方法",各业务系统只要从基类派生出子类,实现本系统中的"条件判断方法"和"作用方法",即可实现本系统中的资费树。对于电信业务中的计费帐务模型,"条件判断方法"实现了对用户费用、用户属性等条件的判断;根据不同的资费需求,实现了多种作用方法批价和优惠。实现方式如图1所示。
參资费树的遍历
如果节点动作类型是"条件",则节点动作标识存储的是一个条件编码,资费树的遍历程序会到条件表中査找此条件编码的明细,对此条件做出判断,如果满足条件,才会继续对当前节点的子节点进行遍历;如果节点动作类型不是"条件",则节点动作标识存储的是一个作用编码,资费树的方法会根据作用类型(即节点动作类型),到相应的作用表中査找此作用编码的明细,找到具体的作用对象,调用此作用对象中的方法,执行这个作用。对一颗资费树,先访问根节点,根据根节点动作类型,调用动作对象的执行方法,来执行"节点动作标识"所指向的动作对象的动作;再访问根节点的子节点。访问子节点时,在资费树定义表中,査找父节点标志等于当前节点的节点标志的节点,这些节点就是当前节点的子节点。如果子节点下还有子节点,则继续访问此子节点的子节点,直至没有子节点为止。访问完子节点,然后按优先级依次访问根节点的"兄弟节点"。从"根节点"开始,可以遍历到整个"资费树"上的所有节点。资费树的遍历,用到了第归算法1)从根节点开始;2)执行当前节点的动作;3)执行前节点子节点(第归遍历);4)令当前节点的兄弟节点成为当前节点; 5)执行2)直至当前节点没有兄弟节点。
具体实现时,会抽象出一个资费树的类(即图1中的资费模板定义类),根据上述的算法,在类中实现"资费树遍历方法";每一个节点,在内存中都是一个对象实例。同一棵资费树下,根据父节点对象和子节点对象之间的关系,在内存中建立起单向链表,父节点指向它下面的第一个子节点(其优先级在资节点中最高);根据兄弟节点之间的关系,按照兄弟节点的优先级在内存中建立起对象的单向链表。执行资费时,找到资费树的根节点对象,调用根节点对象的遍历方法,从根节点开始,即可实现对资费树的遍历。
*资费实例化参数表
一个资费的配置的步骤可以分为两步
1) 选定资费模板
需要从"资费定义表"中给资费选择一个合适的费模板标识;
2) 对资费模板的参数实例化
在确定资费模板时,首先需要确定哪些作用值可能会变化。这些作用值配置时,其值被初始化为"?参数编码"的格式。"?"是参数需要被实例化的标志。资费模板的参数实例化的过程是在资费树遍历过程中动态完成的。当资费树遍历方法发现作用值的第一个字符是"?",就认为此作用值是需要被实例化,然后取出"?"后面的"参数编码",到"资费实例化参数表"中查找此参数的具体值,查到的值就是需要被替换的作用值。
"资费实例化参数表"有四个字段资费标识,资费模板标识,参数标识,作用值。资费标识用来标识一个真正的现实中的一个资费;资费模板标识指明了此资费现在的资费模板,参数标识代表此模板中的哪个作用值需要被替换;作用值则是真正的需要作用值。从"资费实例化参数表"査找作用值需要资费标识,资费模板标识,参数标识三个值。执行此资费时,自然会知道资费标识;得到资费标识后—,需要确定此资费采用的资费模板,根据资费标识査找"资费实例化参数表"可得到此资费选用的模板;在遍历资费模板时,可以动态的得到需要实例化参数编码,然后到"资费实例化参数表"根据资费标识,资费模板标识,参数标识三个值,查找到真正的作用值,完成资费实例化的过程。
一个具体的资费的历遍过程
资费规则A: l)减免所有月租费;2)如果用户品牌为全球通,减免市话费10元。3)如果用户品牌为动感地带,减免短信费5元。
9资费规则B: 1)减免所有月租费;2)如果用户品牌为全球通,减免市话费20元。3)
如果用户品牌为动感地带,减免短信费io元。
分析资费A, B规则十分相似,可以抽象出一个模板M,来减少资费的配置量 1)减免所有月租费;2)如果用户品牌为全球通,减免市话费X元3)如果用户品
牌为动感地带,减免短信费Y元;
模板M通过配置资费模板定义表完成。
资费定义表配置
资费标识资费模板标识
A M B M
资费模板定义表配置
资费模板标识节点标识父节点标识节点动作类型节点动作标识节点顺序
M10010优惠作用20010
M10020条件30011
M10031002优惠作用20020
M10040条件30022
M1005讓优惠作用20030
节点动作表配置 节点动作之条件表配置 条件标识条件内容
3001 如果用户品牌为全球通
3002 如果用户品牌为动感地带
节点动作之优惠作用表配置: 优惠作用标识作用账目
2001 月租费
2002 市话费
头)
2003
短信费
头)
作用方式
减免
减免
减免
作用值 100% 4001
资费实例化参数表配置
资费标识资费模板标识参数标识作用值
(资费需要实例化,以?开
4002 (资费需要实例化,以?开A M 4001 10元
A M 4002 5元
B M 4001 20元
B M 4002 10元
资费A的资费树结构如下 资费A
1001:I-----优惠作用(2001):减免月租费100%
1002:I——条件(300D :如果品牌为全球通(如果满足条件,才执行条件的子节点)
1003: I I------优惠作用(2002):减免市话费10元(参数标识:4001)
1004: I——条件(3002):如果品牌为全球通(如果满足条件,才执行条件的子节点) 1005: I------优惠作用(2003):减免短信费5元(参数标识:4002)
资费A的遍历过程(假定用户当前的品牌为动感地带)
1) 根据资费编码A,在"资费定义表"中査找,得的资费A对应的模板M;
2) 根据模板M在"资费模板定义表"中配置的数据,对模板M进行遍历。首先找到M 的根节点,査找原则为"父节点为O且节点顺序最小的那个节点",即节点IOOI;
3) 执行节点IOOI的节点动作减免月租费100%;
4) 执行完节点动作后,查找节点1001的子节点,没有找到;查找节点1001的兄弟节 点,找到节点1002;
5) 执行节点1002的节点动作判断用户品牌是否是全球通。判断结果为假,不执行 査找子节点的工作;査找节点1002的兄弟节点,找到节点1004;
6) 执行节点1004的节点动作判断用户品牌是否是动感地带。判断结果为真,则查 找节点1004的子节点,找到节点1005;
7) 执行节点1005的节点动作减免短信费。在执行减免的过程中,发现减免值为"? 4002",根据"资费标识+资费模板标识+参数标识"(A+M+4002),到"资费实例化 参数表"查找,找到作用值为5元,执行减免5元短信费;
8) 查找节点1005的子节点,没有找到;査找节点1005的兄弟节点,没有找到,节点 1005执行完毕,则返回父节点1004;
9) 査找节点1004的兄弟节点,没有找到,返回到节点1004的父节点0,整个资费遍 历过程结束。
1权利要求
1、计费帐务引擎中资费模板树设置方法,其特征是步骤如下资费由(1)资费构成表,(2)节点动作表,(3)资费实例化参数表完整定义的设置(1)设置资费构成表,通过树状结构来描述资费,每个资费都被定义为一颗“资费树”;资费中的每一条资费规则称之为资费树上的一个“节点”;每个节点下面可以有多个“子节点”或相邻“兄弟节点”;节点与子节点、兄弟节点间建立指针关联,形成资费的层级关系,构成一棵资费树;对每一颗资费树,按照先访问当前节点,再访问子节点,然后访问兄弟节点的顺序,从资费树入口开始,可以访问到整个资费树上的所有节点;资费中的每一条资费规则称之为“资费树”上的一个节点;每个节点下面有多个子节点,用来描述此条资费规下的子规则,节点被看作是它下面子节点的父节点,每个子节点下面又可以有自己的多个子节点,多层的子节点间形成树状结构;父节点相同的节点互称为兄弟节点。节点也可以没有父节点,这类节点的是层次最高的节点,其中的优先级最高的那个节点称为根节点,是“资费树”的访问入口;“资费构成表”都由资费模板标识,节点标识,父节点标识,节点动作类型,节点动作标识,节点顺序等字段组成资费模板标识用来区别资费树,一个资费模板标识就对应一棵资费树;此字段用来划分“资费构成表”中的节点都是归属于哪个资费的;资费树的定义使用了第归的方式;节点标识用来区分资费树下的一个节点;父节点标识用来标识节点的父节点是谁。如果父节点标识为0,代表此节点没有父节点;如果父节点标识不为0,则父节点标识必须是一个已经存在的节点标志,用来说明当前节点是哪一个节点的子节点;节点动作类型用来说明当前节点的类型。节点动作类型分为两种,一种是“条件”,一种是“作用”;如果节点动作类型是“条件”,则节点动作标识存储的是一个条件编码;如果节点动作类型不是“条件”,则节点动作标识存储的是一个作用编码;(2)设置节点动作表资费构成表定义了资费由哪些“动作”构成,以及这些“动作”之间的执行顺序。资费构成表中涉及的具体“动作”则定义在节点动作表中;节点动作表分为两类“条件”和“作用”,代表一类表一条基本的资费规则可以简单的归纳为“如果满足条件A,那么执行作用B”,或者“执行B作用(无条件)”;对于不同的业务系统,由于业务场景不同,使用的“条件”和“作用”也不尽相同。“资费模板树”技术为了适应不同的业务系统,在实现时将“条件”和“作用”抽象成基类,在基类中分别声明了虚函数“条件判断方法”和“作用方法”,各业务系统只要从基类派生出子类,实现本系统中的“条件判断方法”和“作用方法”,即可实现本系统中的资费树;对于电信业务中的计费帐务模型,“条件判断方法”实现了对用户费用、用户属性等条件的判断;根据不同的资费需求,通过对资费树的遍历实现如果节点动作类型是“条件”,则节点动作标识存储的是一个条件编码,资费树的遍历程序会到条件表中查找此条件编码的明细,对此条件做出判断,如果满足条件,才会继续对当前节点的子节点进行遍历;如果节点动作类型不是“条件”,则节点动作标识存储的是一个作用编码,资费树的方法会根据作用类型,到相应的作用表中查找此作用编码的明细,找到具体的作用对象,调用此作用对象中的方法,执行这个作用;对一颗资费树,先访问根节点,根据根节点动作类型,调用动作对象的执行方法,来执行“节点动作标识”所指向的动作对象的动作;再访问根节点的子节点;访问子节点时,在资费树定义表中,查找父节点标志等于当前节点的节点标志的节点,这些节点就是当前节点的子节点;如果子节点下还有子节点,则继续访问此子节点的子节点,直至没有子节点为止;访问完子节点,然后按优先级依次访问根节点的“兄弟节点”。从“根节点”开始,遍历到整个“资费树”上的所有节点;资费树的遍历,用到了第归算法1)从根节点开始;2)执行当前节点的动作;3)执行前节点子节点(第归遍历);4)令当前节点的兄弟节点成为当前节点;5)执行步骤2)直至当前节点没有兄弟节点;(3)资费实例化参数表设置一个资费实例化参数表的配置的步骤分为两步1)选定资费模板需要从“资费构成表”中选择一个合适的费模板标识;2)对资费模板的参数实例化在确定资费模板时,首先需要确定哪些作用值可能会变化;这些作用值配置时,其值被初始化为“?参数编码”;“?”是参数需要被实例化的标志;资费模板的参数实例化的过程是在资费树遍历过程中动态完成的;当资费树遍历方法发现作用值的第一个字符是“?”,就认为此作用值是需要被实例化,然后取出“?”后面的“参数编码”,到“资费实例化参数表”中查找此参数的具体值,查到的值就是需要被替换的作用值;“资费实例化参数表”有四个字段资费标识,资费模板标识,参数标识,作用值;资费标识用来标识一个真正的现实中的一个资费;从“资费实例化参数表”查找作用值需要资费标识,资费模板标识,参数标识三个值;得到资费标识后,需要确定此资费采用的资费模板,根据资费标识查找“资费实例化参数表”可得到此资费选用的模板;在遍历资费模板时,动态的得到需要实例化参数编码,然后到“资费实例化参数表”根据资费标识,资费模板标识,参数标识三个值,查找到真正的作用值,完成资费实例化的过程。
全文摘要
计费帐务引擎中资费模板树设置方法(1)设置资费构成表,通过树状结构来描述资费,每个资费都被定义为一颗“资费树”;资费中的每一条资费规则称之为资费树上的一个节点;(2)设置节点动作表,资费构成表定义了资费由哪些“动作”构成,以及这些“动作”之间的执行顺序。资费构成表中涉及的具体“动作”则定义在节点动作表中;(3)资费实例化参数表设置选定资费模板需要从“资费构成表”中选择一个合适的费模板标识;对资费模板的参数实例化在确定资费模板时,首先需要确定哪些作用值可能会变化;资费模板的参数实例化的过程是在资费树遍历过程中动态完成的。
文档编号G06F17/30GK101650723SQ20091003496
公开日2010年2月17日 申请日期2009年9月16日 优先权日2009年9月16日
发明者张家荣, 张晓乐, 张有根, 华 李, 斌 梁, 赵广成 申请人:南京联创科技集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1