使用CKRule实现PVC配方计算
配方员设计好配方,再进行抽象提炼,会出现相对于软件而言可以理解的逻辑,如属性的概念,对厂企生成的PVC产品而言,一般都有产品大类名称,花纹,颜色,长度,宽度,厚度等概念,这对于软件而言,就是一个对象,该对象是描述订单的对象。而配方计算出来的结果,如原料名称,质量比分量,重量等信息就是物料清单对象。
配方计算的过程就是这样的一个过程。
结构化标准配方,就是教科书上面的知识,如
PVC |
100 |
DINP |
40 |
Caco3 |
10 |
HSt |
1 |
Sb2O3 |
4 |
这此是基础数据,生产某产品,并且油份在一定的区间就要调用这个配方。
而半结构化表格配方规则,一般是厂企特有的内容,设置时可以自定义一个属性进行归纳总结,如使用特征码来表达增加某些原料,如增加透明度时,执行这个表格:
特征码 |
增透明剂编码 |
份量 |
B1 |
TM-001 |
1 |
B2 |
TM-002 |
0.5 |
B3 |
TM-003 |
1.5 |
表示,如果当前的配方对象的特征为B2时,就要在物料集合中增加透明剂TM-002,份量为1。而特征码和增透明剂的编码都是厂企按一定的规则进行编写的。
非结构化表达式是指,某些配方确实不好表达时使用,如产品名第2个字符为X,则增加DINP份量2。也就是针对表达内容非常随便的自然语言的处理。
2,PVC计算三大问题
PVC计算过程中遇到了结构化标准配方、半结构化表格规范及非结构化表达式规则三个类型的问题。下面使用最简单的例子表达
结构化标准配方
PVC |
100 |
DINP |
40 |
Caco3 |
10 |
HSt |
1 |
Sb2O3 |
4 |
半结构化表格配方范
特征码 |
增透明剂编码 |
份量 |
B1 |
TM-001 |
1 |
B2 |
TM-002 |
0.5 |
B3 |
TM-003 |
1.5 |
非结构化表达式规则
产品名第2个字符为X,则增加DINP份量2。
3,CKRule界面设置
物料清单会被抽象出来成为一个对象。该对象有名称,份量,重量等内容
在传入传出对象上,则定义了配方计算对象主要的属性,如产品名,订单号,特性,颜色,油份,花纹,长度,宽度,厚度,密度,重量等等。
半结构化表格规范,使用了CKRule中的决策表逻辑,目前只增加了一个增透剂使用规范,规范中标明,如果一定的特征码就要增加增透剂一定数据。
在处理非结构化规则时,使用了CKRule的客户规则池功能,定义了多个关键字,并针对规则编写过程中的实际情况增加了两个方法,取第N个字符和增加份量。
客户规则池相关代码
取第N个字符 |
var _result = ""; if(!string.IsNullOrEmpty(字符串)){ if(字符串.Length > 索引 && 索引 > -1){ _result = 字符串.Substring(索引,1); } } return _result; |
增加份量 |
AddRow(物料集合,x=>{ x.名称 = 物料名称; x.份量 = 份量; }); |
最后就是在总规则中初始化结构化,半结构化,非结构化数据。并执行决策表和规则池。
主规则相关代码
初始化结构化标准数据 |
var _table = LookDB(@" select Name as 名称,MPercent as 份量,0 as 重量 from MatBase a inner joinFml b on a.BaseId=b.Id where b.ProductName ='" + 产品名 + "'"); Fill(物料集合,_table); |
初始化半结构化表格数据 |
var _table = LookDB(@"select TableName,Prop1,Prop2,Prop3,Prop4,Prop5,Prop6 from TableSet"); InitTable(_table); |
初始化非结构化规则表 |
var _table = LookDB(@"select '' as id, sindex as ""index"", '' as returnType, 'Get' + name as propname, 1 as codestyle, ifcode, 0 as thencodeisscript, thencode, 0 as priority, '' as execstep from poolset "); InitPool(_table); |
执行决策表和规则池 |
ExeTable(); ExePool(); |
4,业务系统中的抽象
上一节已经介绍了PVC配方计算在CKRule上面的定义,而CKRule不是直接面对终端客户的,业务系统才是面对客户的,也就是说客户不会直接操作CKRule,为了业务系统界面友好性和设置的需要,定义业务系统中的对象,数据表和公式编辑界面显得相当的必要了。
下面将介绍对象的定义
配方对象定义
[Serializable]
public class FmlCond
{
public string Id { get; set; }
public string ProductName { get; set; }
public string OrderNo { get; set; }
public string Color { get; set; }
public string Spe { get; set; }
public double Oil { get; set; }
public string Flower { get; set; }
public double Length { get; set; }
public double Width { get; set; }
public double Depth { get; set; }
public double Density { get; set; }
public double Weight { get; set; }
private List<物料定义> _物料集合 = new List<物料定义>();
public List<物料定义> MatList
{
get { return _物料集合; }
set { _物料集合 = value; }
}
}
[Serializable]
public class 物料定义
{
public string Name { get; set; }
public double MPercent { get; set; }
public double Weight { get; set; }
}
扩展说明:配方计算也许不仅仅有这些内容,还可能有更多的,如生产班组,部门,班长,时间,压纹层数,如果层数变化那厚度也会变化,而这些的定义都必须是业务系统的开发员进行的,也就是说,计算的过程可能是多变的,不简单的是上面的这样。但只要划清楚流程图,做好调用设计和对象设计,这些都不是问题,CKRule还没有集成流程功能,这可能会有一些的影响,但做常规的规则计算已经很充分了。关键还是看模型者的设计。
数据表设计
决策表数据设计,事实上,相对通用的设置也许是最合理的,下面的设计是很简单的,但这样设计即使决策表的初始化非常的方法。
TableName |
Prop1 |
Prop2 |
Prop3 |
Prop4 |
Prop5 |
Prop6 |
Prop7 |
增透剂规范 |
B1 |
TM-001 |
1 |
|
|
|
|
增透剂规范 |
B2 |
TM-002 |
0.5 |
|
|
|
|
增透剂规范 |
B3 |
TM-003 |
1.5 |
|
|
|
|
对照一个CKRule上面的设置
代码如下:
特征码 |
Prop1 |
!string.IsNullOrEmpty(特性) && 特性 == value |
增透剂编码 |
Prop2 |
AddRow(物料集合,x=>{ x.名称 = value; x.份量 = CDouble(Row.Cells["Prop3"].Value); }); |
主规则中的初始化逻辑
var _table = LookDB(@"select TableName,Prop1,Prop2,Prop3,Prop4,Prop5,Prop6 from TableSet");
InitTable(_table);
客户规则池数据表
SIndex |
Name |
IfCode |
ThenCode |
ElseCode |
Priority |
ExecStep |
0 |
按订单第2位加增塑剂 |
取第N个字符(订单号,1) == "X" |
增加份量("DINP",2); |
|
10 |
|
主规则中的初始化逻辑
var _table = LookDB(@"select
'' as id,
sindex as ""index"",
'' as returnType,
'Get' + name as propname,
1 as codestyle,
ifcode,
0 as thencodeisscript,
thencode,
0 as priority,
'' as execstep
from poolset
");
InitPool(_table);
配方表
ID |
ProductName |
OrderNo |
Spe |
Color |
Oil |
Flower |
Length |
Width |
Depth |
Density |
Weight |
1 |
CKP-01 |
T2X14042000 |
B1 |
CL-01 |
45 |
FL-33 |
1000 |
21 |
0.4 |
|
|
2 |
CKP-02 |
TX2X014041000 |
B1 |
CL-01 |
32 |
FL-65 |
400 |
22 |
0.3 |
|
|
3 |
CKP-03 |
TX2014045000 |
B2 |
CL-02 |
44 |
FL-12 |
300 |
23 |
0.8 |
|
|
4 |
CKP-04 |
T2014043500 |
B3 |
CL-03 |
27 |
FL-11 |
400 |
24 |
0.9 |
|
|
5 |
CKP-05 |
T2014044000 |
B2 |
CL-06 |
50 |
FL-44 |
2000 |
19 |
1 |
|
|
配料表
BaseId |
Name |
MPercent |
1 |
PVC |
100 |
1 |
DINP |
15 |
1 |
Caco3 |
5 |
1 |
CK-001 |
20 |
2 |
CK-YL01 |
20 |
2 |
CK-YL02 |
20 |
3 |
PVC |
100 |
3 |
DOP |
19 |
3 |
CK-001 |
8 |
3 |
CK-002 |
2 |
3 |
CK-003 |
3 |
4 |
PVC |
100 |
4 |
DOP |
4 |
4 |
CK-032 |
1 |
4 |
CK-044 |
2 |
4 |
CK-055 |
3 |
4 |
Caco3 |
4 |
5 |
PVC |
100 |
5 |
DINP |
20 |
5 |
CK-422 |
6 |
5 |
CK-478 |
7 |
编码说明:一般而言,在厂企中都使用编码,方便规范化管理和保密的需要,CK-478如果不是厂企的员工,根本不知道是什么,如果有保密配方,那这个编码就应该只有几个重要人员知道是什么。但本文而言,作者是因为不太熟悉配方设计,一般都是塑料化工科班出身的人才配得出来,所以才使用编码。但不影响阅读。
5,业务系统界面显示
配方计算主界面由配方列表和物资明细组成,其中配方主表数据来自来Fml数据表,而物资明细信息来自于MatBase表,Fml相当于配方订单表(含生产信息),而MatBase就是物料清单,这两个表有关联关系。
事实上,还应该有一个产品-物料表,即生产何种产品就使用何种物资,这就是之前提及的结构化的标准配方数据。
配方规则编写表,只写了一个最简单的规则,如前面所述通过订单编号来判断份量。这只是一个简单,还需要业务系统开发商的不断扩展,以便适应不同厂商的要求。这需要一个抽象和提炼的过程,是与客户不断接触的过程中完善和改进的对象模型。
源代码下载, http://www.ckrule.com/cn/solution/business/195.html
使用CKRule实现PVC配方计算相关推荐
- 浅谈PVC塑料配方计算软件的设计
1, 配方设计与配方计算 题目是配方计算,不是配方设计,设计是需要有深厚的塑料知识才可以做的,即生产什么塑料产品,需要放各种原料是什么,各自比较是多少,遇到什么情况下就要多放什么,少放什么.配方设计不 ...
- python中停车收费问题_使用CKRule实现停车场收费计算
1,收费公式 停车场都有其明确的收费标准,但不同地区地段都有不同的规定,这种规定的可变性比较多,如果要快速实现自动计算停车收费功能,那么使用CKRule是一个很好的选择.而一般的停车场计费都会使用类似 ...
- 计算机在材料科学中的应用实验心得,计算机在材料科学中的应用.doc
文档介绍: 计算机在材料科学中的应用.doc计算机在材料科学中的应用实验二:满足陶瓷坯料特征化指标的配方计算10材化(1)班彭治政20101023012210材化(1)班杨小平201010230117 ...
- 颜色科学与计算机测配色 百度云,2004_01颜色科学与计算机测色配色实用技术_11196950.pdf...
2004_01颜色科学与计算机测色配色实用技术_11196950.pdf Ge n e r a l In f o r m a t i o n 书名2004.01颜色科学与计算机测色配色实用技术 作者薛 ...
- 计算机配色在纺织中的应用,浅析纺织染色电脑配色程序
原标题:浅析纺织染色电脑配色程序 纺织品染色需要依靠配色环节来管控产品色彩,很长一段时间,都是依靠专门的配色人员的主观经验判断,会受到调色人员的心理.生理因素变化的影响,配色重现性差,导致纺织品色差问 ...
- ERP软件与电算化软件及其购销存系统的比较(转)
ERP软件与电算化软件及其购销存系统的比较 http://www.226e.net/article/13/Article6570_1.htm 一.ERP软件比较注重软件的内部控制功能,体现先进的管理思 ...
- Python自动化应用案例:一键生成工厂物料采购订单(精益办公案例之三)
前言: 本文描述一个Excel办公自动化的实践示例:模拟生产企业在获取客户订单后,根据相关的数据和信息,通过编程的方式(Python语言),快速建立采购订单的过程.这种精益办公的方式将大幅精简在实际工 ...
- 计算机配色标准白板,计算机配色模型中存在的限制点
计算机配色发展了许多年,但仍不能满足使用需求,归根结底是由于其理论存在一些问题,使得其应用受到一定限制.如果可以找到这些限制点并加以修正,则有可能优化理论模型.提升配色性能. 一.传统配色模型中存在的 ...
- 混合计算题300道_混合这道美丽人生鸡尾酒配方
混合计算题300道 为了庆祝开放食品周,我们与Opensource.com撰稿人,常旅客和OpenNMS首席执行官Tarus Balog的读者分享了鸡尾酒食谱. 下周我们将继续关注"开放食品 ...
最新文章
- 微软私有云分享(R2)8-PowerShell下载文件
- Android蓝牙开发前序知识
- itext实现HTML转换为PDF
- Codeforces 1187E - Tree Painting(树上所有节点的儿子数量和最大)
- java 变量 类之间调用_java内部类与其他类变量之间的调用方式
- cadsee plus看图纸 7.2.0.1
- Navicat Premium 注册码与破解
- 服务器------sz命令 – 从Linux上下载文件到本地
- 多目标跟踪之数据关联算法——匈牙利算法
- Pandas含中文表格对齐输出
- 51单片机入门学习小结(流水灯与数码管)
- 【Java基础】基础概念与常识
- 】20款优秀的移动产品原型和线框图设计工具
- 盘点来自工业界的GPU共享方案
- ​Intel 150亿美元买下Mobileye;雅虎原CEO梅耶尔离职了│IoT黑板报
- gtk initialization failed可能的解决方法之一
- 微信小程序——云函数
- MS5611气压计 I2C驱动代码 STM32
- 完美解决AutoCAD2012,AutoCAD2013本身电脑里有NET4.0或以上版本却装不上的问题
- 《算经》买鸡问题关键算法 C语言
热门文章
- 【转】羽毛球教学 专家把脉 01
- 素材网下载图片要 VIP ? 不存在的
- 用python根据生日判断星座_求指教,我这个 代码是实现 根据生日判断星座
- android 垃圾清理 文件清理
- Linux清理文件内容的四种方式
- Word2019版_去掉文档中的回车符
- 蓝色荧光染料Monobromobimane (mBBr) 单溴二胺71418-44-5
- 凝胶负载染料行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 96Boards MIPI CSI Camera Mezzanine
- SQL Server - 设置主键自增