1,PVC計(jì)算的基本原理
配方員設(shè)計(jì)好配方,再進(jìn)行抽象提煉,會(huì)出現(xiàn)相對(duì)于軟件而言可以理解的邏輯,如屬性的概念,對(duì)廠企生成的PVC產(chǎn)品而言,一般都有產(chǎn)品大類名稱,花紋,顏色,長(zhǎng)度,寬度,厚度等概念,這對(duì)于軟件而言,就是一個(gè)對(duì)象,該對(duì)象是描述訂單的對(duì)象。而配方計(jì)算出來的結(jié)果,如原料名稱,質(zhì)量比分量,重量等信息就是物料清單對(duì)象。
配方計(jì)算的過程就是這樣的一個(gè)過程。

結(jié)構(gòu)化標(biāo)準(zhǔn)配方,就是教科書上面的知識(shí),如
PVC | 100 |
DINP | 40 |
Caco3 | 10 |
HSt | 1 |
Sb2O3 | 4 |
這此是基礎(chǔ)數(shù)據(jù),生產(chǎn)某產(chǎn)品,并且油份在一定的區(qū)間就要調(diào)用這個(gè)配方。
而半結(jié)構(gòu)化表格配方規(guī)則,一般是廠企特有的內(nèi)容,設(shè)置時(shí)可以自定義一個(gè)屬性進(jìn)行歸納總結(jié),如使用特征碼來表達(dá)增加某些原料,如增加透明度時(shí),執(zhí)行這個(gè)表格:
特征碼 | 增透明劑編碼 | 份量 |
B1 | TM-001 | 1 |
B2 | TM-002 | 0.5 |
B3 | TM-003 | 1.5 |
表示,如果當(dāng)前的配方對(duì)象的特征為B2時(shí),就要在物料集合中增加透明劑TM-002,份量為1。而特征碼和增透明劑的編碼都是廠企按一定的規(guī)則進(jìn)行編寫的。
非結(jié)構(gòu)化表達(dá)式是指,某些配方確實(shí)不好表達(dá)時(shí)使用,如產(chǎn)品名第2個(gè)字符為X,則增加DINP份量2。也就是針對(duì)表達(dá)內(nèi)容非常隨便的自然語言的處理。
2,PVC計(jì)算三大問題
PVC計(jì)算過程中遇到了結(jié)構(gòu)化標(biāo)準(zhǔn)配方、半結(jié)構(gòu)化表格規(guī)范及非結(jié)構(gòu)化表達(dá)式規(guī)則三個(gè)類型的問題。下面使用最簡(jiǎn)單的例子表達(dá)
結(jié)構(gòu)化標(biāo)準(zhǔn)配方
PVC | 100 |
DINP | 40 |
Caco3 | 10 |
HSt | 1 |
Sb2O3 | 4 |
半結(jié)構(gòu)化表格配方范
特征碼 | 增透明劑編碼 | 份量 |
B1 | TM-001 | 1 |
B2 | TM-002 | 0.5 |
B3 | TM-003 | 1.5 |
非結(jié)構(gòu)化表達(dá)式規(guī)則
產(chǎn)品名第2個(gè)字符為X,則增加DINP份量2。
3,CKRule界面設(shè)置
物料清單會(huì)被抽象出來成為一個(gè)對(duì)象。該對(duì)象有名稱,份量,重量等內(nèi)容

在傳入傳出對(duì)象上,則定義了配方計(jì)算對(duì)象主要的屬性,如產(chǎn)品名,訂單號(hào),特性,顏色,油份,花紋,長(zhǎng)度,寬度,厚度,密度,重量等等。

半結(jié)構(gòu)化表格規(guī)范,使用了CKRule中的決策表邏輯,目前只增加了一個(gè)增透劑使用規(guī)范,規(guī)范中標(biāo)明,如果一定的特征碼就要增加增透劑一定數(shù)據(jù)。

在處理非結(jié)構(gòu)化規(guī)則時(shí),使用了CKRule的客戶規(guī)則池功能,定義了多個(gè)關(guān)鍵字,并針對(duì)規(guī)則編寫過程中的實(shí)際情況增加了兩個(gè)方法,取第N個(gè)字符和增加份量。

客戶規(guī)則池相關(guān)代碼
取第N個(gè)字符 | var_result = ""; if(!string.IsNullOrEmpty(字符串)){ if(字符串.Length>索引&&索引> -1){ _result = 字符串.Substring(索引,1); } } return_result; |
增加份量 | AddRow(物料集合,x=>{ x.名稱 = 物料名稱; x.份量 = 份量; }); |

最后就是在總規(guī)則中初始化結(jié)構(gòu)化,半結(jié)構(gòu)化,非結(jié)構(gòu)化數(shù)據(jù)。并執(zhí)行決策表和規(guī)則池。

主規(guī)則相關(guān)代碼
初始化結(jié)構(gòu)化標(biāo)準(zhǔn)數(shù)據(jù) | var_table =LookDB(@" selectNameas名稱,MPercentas份量,0as重量fromMatBase ainnerjoinFml bona.BaseId=b.Idwhereb.PRoductName ='" +產(chǎn)品名+ "'"); Fill(物料集合,_table); |
初始化半結(jié)構(gòu)化表格數(shù)據(jù) | var_table =LookDB(@"select TableName,Prop1,Prop2,Prop3,Prop4,Prop5,Prop6 from TableSet"); InitTable(_table); |
初始化非結(jié)構(gòu)化規(guī)則表 | var_table =LookDB(@"select ''asid, sindexas""index"", ''asreturnType, 'Get' + nameaspropname, 1ascodestyle, ifcode, 0asthencodeisscript, thencode, 0aspriority, ''asexecstep frompoolset "); InitPool(_table); |
執(zhí)行決策表和規(guī)則池 | ExeTable(); ExePool(); |
4,業(yè)務(wù)系統(tǒng)中的抽象
上一節(jié)已經(jīng)介紹了PVC配方計(jì)算在CKRule上面的定義,而CKRule不是直接面對(duì)終端客戶的,業(yè)務(wù)系統(tǒng)才是面對(duì)客戶的,也就是說客戶不會(huì)直接操作CKRule,為了業(yè)務(wù)系統(tǒng)界面友好性和設(shè)置的需要,定義業(yè)務(wù)系統(tǒng)中的對(duì)象,數(shù)據(jù)表和公式編輯界面顯得相當(dāng)?shù)谋匾恕?/p>
下面將介紹對(duì)象的定義
配方對(duì)象定義
[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; }
}
擴(kuò)展說明:配方計(jì)算也許不僅僅有這些內(nèi)容,還可能有更多的,如生產(chǎn)班組,部門,班長(zhǎng),時(shí)間,壓紋層數(shù),如果層數(shù)變化那厚度也會(huì)變化,而這些的定義都必須是業(yè)務(wù)系統(tǒng)的開發(fā)員進(jìn)行的,也就是說,計(jì)算的過程可能是多變的,不簡(jiǎn)單的是上面的這樣。但只要?jiǎng)澢宄鞒虉D,做好調(diào)用設(shè)計(jì)和對(duì)象設(shè)計(jì),這些都不是問題,CKRule還沒有集成流程功能,這可能會(huì)有一些的影響,但做常規(guī)的規(guī)則計(jì)算已經(jīng)很充分了。關(guān)鍵還是看模型者的設(shè)計(jì)。
數(shù)據(jù)表設(shè)計(jì)
決策表數(shù)據(jù)設(shè)計(jì),事實(shí)上,相對(duì)通用的設(shè)置也許是最合理的,下面的設(shè)計(jì)是很簡(jiǎn)單的,但這樣設(shè)計(jì)即使決策表的初始化非常的方法。