基于BRMS的“旅游一卡通”计费系统的设计 - 中国一卡通网
用户名密码 [免费注册] [找回密码] 推广技巧 发布求购 建商铺  发产品  会员体制比较  
 

基于BRMS的“旅游一卡通”计费系统的设计

来源:中国一卡通网  作者:张燕玲 潘正运 王莉  发布时间:2012-01-11 09:05:17  字体:[ ]

关键字:旅游一卡通  管理  计费系统  

摘   要:对业务规则管理系统技术进行了介绍,并从“旅游一卡通”计费系统这个需要大量业务规则的应用领域出发,对业务规则管理系统技术的应用进行了研究与设计。提出了一个适合该系统的业务对象模型,并对如何根据业务对象模型,提取目前以参数化和程序形式“固化”在计费系统的业务规则进行了论述。

  
  2.2 系统业务对象模型BOM(Business Object Model)的建立

  业务规则模型的设计是基于规则系统的非常关键的步骤,它直接关系到整个系统是否能够真正灵活地运转起来。业务模型是由一组类(Class)构成,每个类包含属性(Property)和一些方法(Method)。类的属性、类与类的关系将会出现在业务规则的条件部分(Condition),类中的属性值与导入到引擎中的许多规则的条件进行匹配,如果某些对象(或对象之间的关系)满足某个规则的条件的定义,那么引擎将触发规则的执行部分。

  2.2.1 业务对象的分析

  “旅游一卡通”系统是一个复杂的消费系统,它不仅涉及消费者,而且整个旅游行业的所有企业,包括酒店、餐饮、旅行社、景区景点等都是组成这个系统的关键要素。建立完善的旅游计费系统就必须抽象出这些独立业务对象的共性,建立统一的、具有共同特征的业务对象实体。在本系统的设计中,抽象出了以下业务对象:

  (1)客户(Customer)对象:这里的Customer对象是特指利用“旅游一卡通”进行消费的游客,是消费的主体。Consume对象在消费过程中可以享受相应的免费资源、折扣和优惠措施。在系统中该对象具有一定的类型属性,根据不同的企业所定义的属性值是不同的。

  (2)企业(Enterprise)对象:Enterprise对象是指组成“旅游一卡通”系统的旅游部门,包括酒店、旅行社、景区景 点等。

  (3)消费项目(Consume)对象:由于各个行业部门不同所以其中包含的消费项目也是大相径庭的,所以将消费项目(Consume)单独抽象为一个业务对象,使之与Enterprise对象相关联。

  (4)折扣方案(Discount)对象:折扣是计费系统中比较复杂的一项业务规则,它主要的特点就是经常变动。对于不同的客户采取的折扣也是不同的。并且单位采取折扣的时间是有限制的,所以该对象具有时效性和有效性。

  (5)优惠方案(Privilege)对象:优惠是计费系统的另一个重要组成部分,它同样具有时效性和有效性。

  2.2.2 业务对象模型的建立

  各个业务对象之间存在着复杂的关联。客户这个业务对象是整个系统的消费主体,其消费行为通过“旅游一卡通”直接与所有系统中的企业对象实体相联系。客户在系统中消费时可能和多个企业对象相联系,所以抽象其业务对象属性CustomerEnterprise[]与消费企业对象进行关联。

  企业这个业务对象实体是整个计费系统得关键所在。因为系统中的企业是完全独立的个体,在实施计费策略时是大不相同的,而且对于单个CustomerEnterprise对象内部不同消费项目的计费策略也不完全相同。每个CustomerEnterprise包括若干消费项目Consume,通过属性Consume[]与消费项目实体相关联;企业可能对所有的消费项目,也可能针对某消费项目实施折扣、优惠等方案,所以不单单是企业而且消费项目都与折扣、优惠和免费对象实体相关。它们通过属性FreeItem[]与免费资源对象的关联,通过DiscountPlan[]对象属性与折扣方案对象关联,通过PrivilegePlan[]与优惠方案对象关联。

  根据以上分析抽象系统的业务对象模型如图4所示(略)。

  2.3 规则引擎的嵌入和使用

  业务规则引擎的嵌入和使用步骤。可以按照下面的基本步骤实现规则引擎的嵌入和使用(采用ILOG JRules的API):

  (1)创建一个规则引擎对象(这是ILOG JRules)提供的对象。
  // Create an ILOG rule engine
  IlrContext myEngine = new IlrContext();

  (2)从规则库中取得与计费相关的规则包,并加载到规则引擎中。(注意:这里折扣规则包存储在名字是“Discount-rules”的文件中,优惠规则包存储在“Privilege-rules”如果规则包保存在数据  库中,需要使用其它的API)
  //get the IlrRuleset associated with myContext
  IlrRuleset myRuleset=myContext.getRuleset();
  //Add rules to myRuleset
  myRuleset.parseFileName(“Consume-rules”);
  myRuleset.parseFileName(“Discount-rules”);
  myRuleset.parseFileName(“Privilege-rules”);
  myRuleset.parseFileName(“FreeItem-rules”);

  (3)使用引擎的API,向规则引擎导入客户对象(Customer),企业对象(Enterprise),该客户的消费方案(Plan),该客户的优惠方案(Privilege),折扣方案(Discount)和该客户相关的有效免费资源(FreeItem)。引擎将对导入的所有对象的属性值与当前加载的规则包中的优惠规则进行匹配比对,把匹配的规则放在一个规则执行队列中。
  myEngine.insert(Customer);//提交客户信息
  myEnterprise.insert(Enterprise);//提交企业信息
  for (int ii=0;ii<…; ii++
  { //提交与企业相关的消费项目信息
  myEngine.insert(Consume[ii]);
  }
  for (int ii=0;ii<…; ii++
  { //提交该客户相关的免费资源信息
  myEngine.insert(freeItem[ii]);
  }
  for (int ii=0; ii<……; ii++) {//提交该客户相关优惠方案信息
  myEngine.insert(Privilege [ii]);
  }
  for (int ii=0; ii<……; ii++) {//提交该客户相关折扣方案信息
  myEngine.insert(Discount[ii]);
  }

  (4)使用引擎的API,通知引擎执行规则执行队列中的规则实例,即触发规则执行部分的方法。在引擎逐个执行规则的过程中,会出现这样一些可能操作:一些对象的属性值将会被修改(如免费资源的可用量会减少);有些新的对象被创建,如新的免费资源被生成等。引擎会在每个规则被执行之后会自动作这样的检验:当前状态下,“规则执行队列”中等待执行的规则是否还满足条件,剔除不满足条件的等待执行的规则;同时检查规则包中原来没有在“执行队列”的规则是否符合当前状态的规则,如果有则把它们加入到“执行序表(Agenda)”中。引擎最终会清空“执行队列”。
  // execute the rules on the agenda
  myEngine.fireAllRules();
  使用引擎的API把引擎中的对象取出并导出(如回存数据库等)
  // retrieve updates objects from engine
  myEngine.getObjects();
  // output code…
  …
  // empty engines for next time use
  myEngine.removeObjects(); //从引擎中撤除所有对象,为下一//个优惠处理作准备。
 
  3 结束语 

  本文对BRMS系统在“旅游一卡通”计费系统中的应用与开发进行了研究。本系统的设计大大简化了对“旅游一卡通”计费系统业务规则的开发与管理,该系统是目前比较符合实际的较为理想的“旅游一卡通”计费系统。它的应用必将极大地提高旅游市场计费业务规则的管理效率,具有广阔的市场前景。

更多

新闻投稿合作邮箱:yktchina-admin@163.com    字体[ ] [收藏] [进入论坛]

推荐文章

论坛热帖