SNF火速支付平台–规则引擎全部介绍及接纳表明

① 、设计目的

a)规则引擎语法能够满意分单,计费,WMS策略的安顿须要。语法是同等和归并的

b)能够在不修改规则引擎模块的动静下,插手任意二个新的条条框框;实现上述供给之外的规则配置须求

c)运算速度快

d)有上佳的表现效果,能够在售前阶段支持销售

e)提供不错的调剂和确诊手段,便于布署规则

② 、基本语法及接纳

在上课以下章节的剧情时,大家来模拟OMS中三个真真的分单业务场景:依照订单不相同的出发地城市和指标地城市指派不相同的承运商并创立运单,要是目标地城市为首都则在丹佛实行转发。

首先:在相关类中追加如下代码:

1.把页面表单控件值取出来放到集合中

Dictionary<string, object>parames = newDictionary<string, object>();

Dictionary<string, object> returns = newDictionary<string, object>();

 

publicvoidGetFormToParames()

        {

parames.Clear();

parames.Add("出发地", this.txtChuFaDi.Text);

parames.Add("到达地", this.txtDaoDa.Text);

parames.Add("业务类型", this.icbeCategory.Text);

parames.Add("总金额", this.txtTotalMoney.Text);

parames.Add("重量", this.txtZhongLiang.Text);

parames.Add("运费", this.txtMoney.Text);

 

        }

 

1.把组装好的参数调整规则“类型分化折扣差异主规则”举办实施。

 

//类型不同折扣不同

privatevoidbtnCategory_Click(object sender, EventArgs e)

        {

GetFormToParames();

RuleServiceruleService = (RuleService)CacheManager.Instance.Retrieve("RuleService");

            returns = ruleService.Execute(this.UserInfo, "类型不同折扣不同主规则", parames, this.DbHelper, this.UserCenterDbHelper);

if (returns != null)

            {

if (returns.ContainsKey("费用") && returns["费用"] != null)

                {

this.txtMoney.Text = returns["费用"].ToString();

                }

            }

        }

rule瑟维斯.Execute方法传递参数调用“类型不相同折扣分裂主规则”,并回到耗费进行拍卖。

2.① 、调节和测试输出

  1. 语法:打印(Object)

  2. 证实:该函数用于调节和测试输出,内容会输出到规则日志上。

 

品类分裂折扣主规则:

打印(“执行类型不同折扣主规则”);

   

调用执行后,规则日志控制台便会输出”执行项目差异折扣主规则”

 

2.贰 、局地变量

  1. 语法:int运费=100

  2. 说明:

a)文字前扩张int符号就标明该变量是3个整型局地变量;

b)局地变量只可以在单个规则文件之中使用。无法被表面赋值和读取

c) 类型能够是C#语法中的任意档次。

 规则内容如下:

 

int 标识= 0 // 声明一个局部变量

打印("标识:" +标识)

 

                  

 

 

 

调用方法后在日记控制台便会输出:”标识:0″

2.3、运算符

符号

样例

说明

=

运费=100

向变量进行赋值

+,-,*,/,%

运费=100*20+18

加,减,乘,除,取余

>,<,>=,<=,<>,!=

如果(运费>100){}

逻辑运算符

()

(运费>100)且(运费<1000)

括号;可以无限嵌套

(运费>100)且(运费<1000)

与运算

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

例:

如果(字符串参数("业务类型") == "零售")

{

totalMoney = totalMoney * 0.9;

}

 

如果( 字符串参数("业务类型").Equals( "大客户"))

{

totalMoney = totalMoney * 0.6;

}

2.四 、条件语句

  1. 语法:假设(条件表明式){语句}

  2. 说明:

a)条件表明式为必须(包蕴小括号),并且肯定是逻辑表明式,而语句体中的语句可以为任意语句,也正是支撑语句嵌套。

b)注意唯有如若子句,没有或然子句。

 

主规则中内容如下:

int标识= 0

// 条件语句, 这里表示:如果订单集为空,则抛出一个异常

如果(订单集== 空) {

异常("订单集为空")

}

如果(订单集!= 空) {

打印("正常,订单集不为空")

}

2.5、空值

  1. 语法:空,可以用:a==空的艺术对于空值实行判定

  2. 表明:内置全局变量,用于举行空值判断

主规则中情节如下:

int标识= 0

// 空:内置全局变量,用于进行空值判断

如果(参数集== 空) {

异常("订单集为空")

}

如果(参数集!= 空) {

打印("正常,订单集不为空")

}

2.6、循环

  1. 语法:

每个(局部变量in列表){

语句

}

 

  1. 说明:

a)条件表明式为必须(包含小括号),并且肯定是逻辑表明式,而语句体中的语句能够为任意语句,约等于帮忙语句嵌套。

b)注意:唯有假使子句,没有只怕子句。

主规则中内容如下:

int标识= 0

如果(订单集== 空) {

异常("订单集为空")

}

// 对集合进行循环遍历

每个(订单in订单集) {

打印(订单.序号)

}

调用方法后在控制台日志便会输出:订单序号

 

叁 、高级语法及选取

3.壹 、成立对象

  1. 语法:new 实体名(),参数:无,返回值:实体类。

2.
表明:下例第⑧行创制了叁个运单对象,对象足以包括很多属性,变量名.属性名,形如:运单.出发地=”A”

int标识= 0

如果(订单集== 空) {

异常("订单集为空")

}

每个(OrderEntity订单: 订单集) {

OrderEntity运单= new OrderEntity()

运单.出发地= 订单.出发地

运单.目的地= 订单.目的地

打印(运单)

}

调用方法时,在控制台便会输出:运单相关新闻

3.贰 、创设列表

  1. 语法:创造列表(),参数:无,重临值:结果集

  2. 证实:下例列表,用于存放键值对。

Dictionary<string, object>列表 = 创建列表()

3.3、子规则

分单规则:

int标识= 0;

打印("分章主规则" + 标识);

如果(标识 == 0){

子规则分单1();

}

分单子规则:子规则分单1

/*

     * BaseUserInfo当前用户

     * Dictionary<string, object>参数集

     * IDbHelperdbHelper //业务数据库

     * IDbHelperuserDbHelper//用户中心数据库

     *

     * 取参数值方法:(强转类型)参数集["key"]

     *

     * Dictionary<string, object>返回列表

     * 返回参数方法:返回列表.Add("key",value);

    */

 

打印("子规则分单1————");

string s, m;

BaseRuleLogEntity entity = new BaseRuleLogEntity();

entity.Type = "打印";

entity.Description = "哈哈哈";

SNFService.Instance.CreateService<BaseRuleLogService, IBaseRuleLogService>().Add(BaseSystemInfo.UserInfo, entity, out s, out m);

 

 

单值查表("费用表","大连","青岛");

 

返回列表("key",entity );

注:能够一直调用大家服务层代码.

并且我们的调用代码如下:

//01.规则调用代码

System.Collections.Generic.Dictionary<string, object>parames = new System.Collections.Generic.Dictionary<string, object>();

ruleService = (RuleService)CacheManager.Instance.Retrieve("RuleService");

ruleService.Execute(BaseSystemInfo.UserInfo, "分单主规则", parames, null, null);

 

3.肆 、内置函数

函数

参数

返回值

说明

查表

参数1:规则表名称,参数2~N:表示查找参考项值,传值顺序跟规则表定义顺序一致

结果集

用于规则表的查询,$线路集=查表("上架规则表","海信",64)

单值查表

参数1:数据表名;参数2:值参考项;其余:数据表查找参考项;返回:value

string feiyong = 单值查表("运费表","费用",参数集["出发地"].ToString(),参数集["到达地"].ToString());

多值查表

参数1:数据表名;其余:数据表查找参考项;

结果列表集(key,value)

List< Dictionary<string, object>>

最大

参数1~N:数值

最大数值

求最大值,int 最大值=最大(1,0,5,9,10)

最小

参数1~N:数值

最大数值

求最小值,int 最小值=最小(1,0,5,9,10)

 

 

 

 

求和

参数1:集合

数值

对集合中元素进行求和

四舍五入

参数1:值

数值

 

四舍五入

参数1:值,参数2:精度

数值

 

向上取整

数值

整型类型

向上取整(数量);

向下取整

数值

整型

向下取整(数量);

包含元素

参数1:集合类型,参数2:任意类型;

布尔类型

 

格式化字符

参数1:值 ;参数2:占位符 ;参数3:位数

字符串值

 

创建列表

无参数

结果集

创建一个集合,Dictionary<string, object>返回列表=创建列表()

相隔日

参数1:源日期,参数2:目标日期

天数

获得两个日期间相隔天数

相隔月

参数1:源日期,参数2:目标日期

月数

获得两个日期间相隔月数

现在

日期

获取当前日期

异常

参数1:消息

判断对象是否为空,如果为空则抛出异常,并且控制台输出消息

打印

参数1:对象

输出到控制台

字符串参数

key 参数的key

string

 

数值参数

key 参数的key

Double

 

整数参数

key 参数的key

Int32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.⑤ 、自定义函数-OK

花色中假使急需公用的函数,则足以在档次中的:RuleExtConfig.txt文件中展开扩张使用如下:

double 重量转换(double weight)

{

    return ExtRule.重量转换(weight); 

}

小编们再修改一下(或新增)RuleExt.cs类,扩充:ConvertWeight方法

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

 

namespaceTony.DEMO.Business

{

publicclassRuleExt

    {

publicdoubleConvertWeight(double weight)

        {

return weight / 1000;

        }

    }

}

 

再正是要记录在Program或Global.asax入口类增添如下代码:

//3.第②步,初阶扩大的政工规则引擎方法

SNF.Business.BaseRule.ExtRule = new Tony.DEMO.Business.RuleExt();

规则配置时利用办法如下:

 

四、规则表

用户可在系统中自定义数据存款和储蓄表,二维结构,由行列组成,可将一些心灵手巧多变的数目配置于规则表中供规则使用

  1. 规则表的列由八个部分构成:

a)绑定参考项:可绑定平台、仓库,适用于多平台规则表独立维护数据;前台不可知,自动取Session中的值赋值;不是必须的。

b)查找参考项:是规则表的询问条件,使用时各类查找项必须全方位合作才能获取既定的结果;不是必须的。

c)值参考项:是规则表的重临值;必须的。

4.一 、一般规则表

1.
新建四个规则表,规则表名称:承运商指派规则表,查找项:出发城市、目标城市,值项:承运商代码、承运商名称

出发地

目的地

费用

上海

苏州

200

 

 

 

我们依据那一个表展开搜寻花费。

 

string feiyong = 单值查表("运费表","费用",字符串参数("出发地"),字符串参数("到达地"));

 

证实:通过查表函数调用:运费表,按搜索项的次第依次传入参数,即可查询获得相应的多寡。

4.二 、等级规则表

等级规则表正是:规则表的列中留存区间值,当调用查表函数时进入符号匹配。

依据上边的开支规则表扩展一下,大家收获:

  1. 规则表名称:花费表,查找项:出发地、指标地、重量下限、重量上限,值项:费用

出发地

目的地

重量下限

重量上限

费用

上海

苏州

20

200

200

string feiyong = 单值查表("运费表","费用",字符串参数("出发地"),字符串参数("到达地"),"<=" + 字符串参数("重量"),">=" +字符串参数("重量"));

 

返回列表("费用", feiyong );

4.叁 、多值规则表

多值规则表便是:根据同一组查找项能够查询获得四个结实集,一般用于有些结果集中存在优先级的时候

依据上边的支出表扩张一下,大家赢得:

1.
规则表名称:开支表,查找项:出发地、指标地、重量下限、重量上限,值项:成本

出发地

目的地

重量下限

重量上限

费用

上海

苏州

20

200

200

上海

苏州

201

300

300

 

 

 

 

切切实实实例日后完善

4.④ 、规则表版本

当定义好规则表之后大家还索要为规则表新建一个本子才能够真的的选择规则表。规则表版本使得规则表在一段时间内是一蹴而就的,当过了有效期之后假诺再调用就不能够找到,类似于合同的定期。

例如:同三个规则表恐怕存在三个本子,在接纳的进度中,框架会自行根据当下日子去匹配:在本子起首日期和竣事日期之内的一个版本。

五、数据源

5.1、调用Sql脚本

        
在我们的条条框框里面除了有的本来方式外,大家还足以写C#格局。甚至足以平昔执行sql脚本进行更新数据操作。

        
传入的参数个中有如下多少个数据库连接,能够利用数据库连接对数据库实行操作。

     IDbHelper dbHelper //业务数据库

     IDbHelper userDbHelper//用户宗旨数据库

如:

DataTabledtData = this.DbHelper.Fill("select * from baseuser");

 

int r = this.DbHelper.ExecuteNonQuery("UPDATE BaseUser SET Code=” WHERE Id= 1");

 

5.② 、调用服务层

         在规则里还足以一贯调用服务层代码。

如:

stringstateCode, message;

DemoFeiYongEntity entity = new DemoFeiYongEntity();

entity.Type = 参数集["业务类型"].ToString();

entity.Money= 数值(参数集["运费"]);

entity.Description = "测试哦";

SNFService.Instance.CreateService<DemoFeiYongService, IDemoFeiYongService>().Add(当前用户, entity, out stateCode, out message);

⑥ 、规则相关程序使用手册

6.一 、规则表设计

        
在好几事情场景下,平常会遭逢通过查表来进展逻辑判断。为保障规则开发进度的油滑,通过“规则表设计”可以高速的根据作业必要安排出1个规则表结构,并且可以设计规则表中的字段的各种品质。表达:“参考项”即为字段的列名,“类型”分为查找参考项和值参考项(使用方式参照3.4计算),“参考标准类型”为字段存款和储蓄数据的花色,借使为枚举类型在“枚举值”中能够存款和储蓄枚举数据(各项用逗号隔开)。

以WMS项目中“上架分配规则”为例,业务须求:上架时能够依照不一致的物料分类,上架时要内定固定的仓库、区域和自然范围内的货位。根据以上供给可以创造规则表如下图所示:

 图片 1

6.贰 、规则表管理

当“规则表”设计到位后,在“规则表管理”画面中得以珍惜规则表中的作业逻辑数据,维护数据时以时间段为条件,每一个时刻段都足以创设多少个数据表。调用规则时系统会依据最近时间,找到在岁月段内的数据表,获取此时间限定内的事情逻辑数据。那样能够提前安顿以后一段时间内的政工逻辑,系统能够依据时间自动切换业所对应的务逻辑规则。

 图片 2

精心,对规则表扩张数据行。

 图片 3

6.三 、规则配置

“规则配置”画面首要担负完毕具体规则程序的编纂,定义的称谓即为业务程序有所调用的规则名。具体规则编写方法参照以上各小节使用表明,其余还亟需专注以下几点:

  1. 唯有在阳台下线状态才能编辑规则。
  2. 每一条条框框至少要有三个主规则,能够有三个子规则。
  3. 规则编写完后要开始展览上线,并且要重新登录系统后才能加载到最新规则。

 

         注意:规则名称倘若连接的假名(a-zA-Z)或许汉字

 图片 4

在配备规则里,能够参照“4.规则表”实行调用。

6.④ 、规则日志

在规则日志画面里能够看出规则在推行进度中经过“打字与印刷”函数输出的变量的结果。由于在规则调节和测试进程中不能够运用断点,但在显要节点依然要求对程序执行进程中的中间变量进行跟踪。此时得以把所急需查阅的变量通过打字与印刷函数实行输出,在规则日志中就晤面到所打字与印刷的结果,从而实现调节和测试程序的目标。规则日志结果如下图所示:

 图片 5

柒 、测试程序

图片 6

 

 

图片 7

BS程序调整表达 http://www.cnblogs.com/spring_wang/p/6740490.html

 


作者: 王金斗
出处: http://www.cnblogs.com/spring_wang/
Email: spring_best@yeah.net
QQ:903639067 
QQ群:322581894

 这么些种类教程文书档案,欢迎转发:

SNF快捷支付平台WinForm-CS甘特图http://www.cnblogs.com/spring_wang/p/7418423.html

SNF火速支付平台MVC-审核流,审核实现后会给下二个审核人发邮件,下1个审核人能够不记名系列,在邮件里进行理并答复核处理http://www.cnblogs.com/spring_wang/p/7418402.html

SNF神速支付平台MVC-名片管理(实际名片样式) http://www.cnblogs.com/spring_wang/p/7416540.html

SNF神速支付平台MVC-表格单元格合并组件http://www.cnblogs.com/spring_wang/p/7416368.html

SNF快捷支付平台MVC-单据状态水印http://www.cnblogs.com/spring_wang/p/7416349.html

SNF快捷支付平台MVC-瀑布式分页组件http://www.cnblogs.com/spring_wang/p/7411116.html

SNF快捷支付平台MVC-高级查询组件http://www.cnblogs.com/spring_wang/p/7411113.html

SNF神速支付平台MVC-自由排序组件http://www.cnblogs.com/spring_wang/p/7411090.html

SNF快速支付平台MVC-各个级联绑定情势,演示样例程序(包涵表单和表格控件)http://www.cnblogs.com/spring_wang/p/7405371.html

SNF火速支付平台MVC-集成了百度开源项目echarshttp://www.cnblogs.com/spring_wang/p/7405171.html

SNF火速支付平台WinForm-平板拍照及扫描二维码成效http://www.cnblogs.com/spring_wang/p/7404600.html

SNF快捷支付平台WinForm规则引擎全体介绍及应用http://www.cnblogs.com/spring\_wang/p/7404182.html

SNF快捷支付平台WinForm-Grid表格控件大全http://www.cnblogs.com/spring_wang/p/7403881.html

SNF急迅支付平台WinForm-表单验证控件-通用http://www.cnblogs.com/spring_wang/p/7403750.html

SNF.CodeGenerator-升级生成BS页面代码-协理视图-数据库配置-赶快开发者的利器http://www.cnblogs.com/spring_wang/p/7402612.html

SNF快捷支付平台WinForm-审核流使用方法样例http://www.cnblogs.com/spring_wang/p/7374176.html

SNF飞速支付平台WinForm-EasyQuery总结分析-效果-分外牛逼的表格查询工具http://www.cnblogs.com/spring_wang/p/7366059.html

SNF火速支付平台MVC-Grid++集成打字与印刷http://www.cnblogs.com/spring_wang/p/7365567.html

SNF火速支付平台MVC-富文本控件集成了百度开源项目editorhttp://www.cnblogs.com/spring_wang/p/7365265.html

C#按回车Enter使输入主旨自动跳到下一个TextBox的章程收集http://www.cnblogs.com/spring_wang/p/7216538.html

关于系统前端开发的那多少个事http://www.cnblogs.com/spring_wang/p/7092721.html

WebApi和MVC-controller层接收的json字符串的取值方法和调用后台服务措施http://www.cnblogs.com/spring_wang/p/6740314.html

SNF火速支付平台–规则引擎在程序个中怎么样调用http://www.cnblogs.com/spring_wang/p/6740490.html

SNF飞快支付平台–规则引擎介绍和利用文档http://www.cnblogs.com/spring_wang/p/6740445.html

SNF快捷支付平台MVC-EasyUI3.9之-DataGrid表格控件怎么着充实右键菜单http://www.cnblogs.com/spring_wang/p/6740338.html

SNF快捷支付平台–多组织+多平台+多系统处理方案http://www.cnblogs.com/spring_wang/p/6734654.html

SNF火速支付平台MVC-EasyUI3.9之-Session过期处理和页面请求筛选http://www.cnblogs.com/spring_wang/p/6733975.html

SNF神速支付平台MVC-EasyUI3.9之-WebApi身份验证难题消除方案http://www.cnblogs.com/spring_wang/p/6733814.html

SNF火速支付平台MVC-EasyUI3.9之-WebApi跨域处理方案http://www.cnblogs.com/spring_wang/p/6733659.html

SNF火速支付平台MVC-EasyUI3.9之-ueditor富文本编辑在 asp.net
MVC下使用手续
http://www.cnblogs.com/spring_wang/p/6710351.html

SNF开发平台WinForm之十五-时间轴控件使用-http://www.cnblogs.com/spring\_wang/p/6285393.html

SNF开发平台WinForm之十四-站内发送系统消息http://www.cnblogs.com/spring\_wang/p/6140031.html

SNF开发平台WinForm之十三-单独从服务器上赢得PDF文件举办展现http://www.cnblogs.com/spring_wang/p/6140025.html

SNF开发平台WinForm之十二-发送手提式有线电话机短信功效调用http://www.cnblogs.com/spring_wang/p/6139829.html

SNF开发平台WinForm之十一-程序打包http://www.cnblogs.com/spring_wang/p/6139827.html

SNF开发平台WinForm之十-Excel导入http://www.cnblogs.com/spring_wang/p/6128604.html

SNF开发平台WinForm之九-代码生成器使用表达http://www.cnblogs.com/spring_wang/p/6128595.html

SNF开发平台WinForm之八-自动升级程序布置使用说明http://www.cnblogs.com/spring_wang/p/6128570.html

SNF开发平台WinForm之七-单据打字与印刷和平运动用验证http://www.cnblogs.com/spring_wang/p/6126016.html

SNF开发平台WinForm之六-上传下载组件使用http://www.cnblogs.com/spring\_wang/p/6125929.html

SNF开发平台WinForm之五-高级查询利用表达-http://www.cnblogs.com/spring\_wang/p/6116640.html

SNF开发平台WinForm之四-开发-主细表管理页面-http://www.cnblogs.com/spring\_wang/p/6116626.html

SNF开发平台WinForm之三-开发-单表接纳控件成立-http://www.cnblogs.com/spring\_wang/p/6116592.html

SNF开发平台WinForm之二-开发-单表表单管理页面-http://www.cnblogs.com/spring\_wang/p/6116572.html

SNF开发平台WinForm之一-开发-单表表格编辑管理页面-http://www.cnblogs.com/spring\_wang/p/6116523.html

Winform开发框架之通用Windows录像头调用拍照http://www.cnblogs.com/spring_wang/p/6008674.html

Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目–SNF急速支付平台3.3-Spring.Net.Framework

Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目–SNF急速支付平台3.3-Spring.Net.Framework

Winform开发框架之通用附属类小部件管理模块
–SNF火速支付平台3.3-Spring.Net.Framework

SNFAutoupdater通用自动升级组件V2.0-WinForm

SNF飞速支付平台3.2之–.Net可扩张的契约编号生成器-SNF.CodeRule

SNF飞快支付平台3.1之–审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow

SNF火速支付平台3.1之–审核流(2)流程设计-SNF.WorkFlow成效使用表明

SNF快捷支付平台3.1之–审核流(1)SNF.WorkFlow审核流简介

SNF急速支付平台3.0之–完美的代码生成器SNF.CodeGenerator-神速开发者的利器

传说MVC4+EasyUI的Web开发框架–Spring.Net.FrameworkV3.0整机介绍

SNF火速支付平台3.0之–MVC
打字与印刷消除方案

SNF火速支付平台3.0之–文件批量上传-统一附件管理器-在线预览文件(有网络和没有二种)

SNF飞速支付平台3.0之–asp.net mvc4
强大的导出和不需求上传文件的批量导入EXCEL

SNF火速支付平台3.0之MVC通用控件库展示-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

SNF急忙支付平台3.0之BS页面展现和九大亮点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI
+Knockout

SNF快捷支付平台3.0之-界面特性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

SNF神速支付平台3.0之-CS页面-Asp.net+Spring.Net.Framework

SNF快捷支付平台3.0之–系统里播放的效力–飞快及时、简明扼要的把新闻发送给接收者