本發(fā)明涉及業(yè)務(wù)流程管理領(lǐng)域,且特別涉及一種基于規(guī)則的流程調(diào)度方法及系統(tǒng)。
背景技術(shù):
業(yè)務(wù)流程管理是企業(yè)必不可少的工作環(huán)節(jié),大多數(shù)企業(yè)采用業(yè)務(wù)流程管理軟件對(duì)其業(yè)務(wù)進(jìn)行流程化管理。在現(xiàn)有的業(yè)務(wù)流程管理中,針對(duì)具體的業(yè)務(wù)應(yīng)用場(chǎng)景,通過工作流系統(tǒng)提供的流程設(shè)計(jì)器繪制完整的流程圖,通過在流程圖的遷移線上設(shè)置遷移條件的方式表述流程流轉(zhuǎn)。由上游的應(yīng)用系統(tǒng)調(diào)用工作流系統(tǒng)提供的api進(jìn)行流程驅(qū)動(dòng),通過改變工作流的流程變量的值,來影響遷移條件的命中情況,從而驅(qū)動(dòng)流程走向不同的流程分支。而為了實(shí)現(xiàn)在不同應(yīng)用場(chǎng)景下對(duì)流程變量做不同賦值,目前的做法是:建立關(guān)系型數(shù)據(jù)庫表結(jié)構(gòu)作為參數(shù)表,通過查詢參數(shù)表方式獲得不同應(yīng)用場(chǎng)景下的流程變量值。并通過編寫復(fù)雜程序邏輯的方式,實(shí)現(xiàn)對(duì)流程變量的賦值。
上述方法需針對(duì)具體的業(yè)務(wù)應(yīng)用場(chǎng)景繪制完整的流程圖,由于業(yè)務(wù)應(yīng)用場(chǎng)景多,且無法完整復(fù)用,導(dǎo)致需要繪制的流程圖過多,大大加重了維護(hù)成本。且當(dāng)業(yè)務(wù)應(yīng)用場(chǎng)景發(fā)生變化時(shí),可能會(huì)導(dǎo)致流程圖重新繪制、原有的關(guān)系型參數(shù)表的結(jié)構(gòu)需要調(diào)整、程序邏輯需要大量修改,變動(dòng)不夠靈活。進(jìn)一步的,在進(jìn)行變動(dòng)時(shí),涉及改造的系統(tǒng)、模塊和功能過多,因此帶來的開發(fā)和測(cè)試成本較高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為了克服現(xiàn)有流程調(diào)度方法很難根據(jù)場(chǎng)景變化而進(jìn)行相應(yīng)的變動(dòng)的問題,提供一種基于規(guī)則的流程調(diào)度方法及系統(tǒng)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于規(guī)則的流程調(diào)度方法,該方法包括:
接收業(yè)務(wù)流程創(chuàng)建請(qǐng)求并根據(jù)業(yè)務(wù)流程創(chuàng)建請(qǐng)求從數(shù)據(jù)庫中的業(yè)務(wù)流程定義表中查找對(duì)應(yīng)的規(guī)則參數(shù);
根據(jù)規(guī)則參數(shù)進(jìn)行規(guī)則計(jì)算,獲得計(jì)算結(jié)果;
根據(jù)計(jì)算結(jié)果從數(shù)據(jù)庫選取符合要求的至少一個(gè)子流程定義,形成子流程定義集合;
根據(jù)子流程定義集合啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程;
將創(chuàng)建成功的多個(gè)子流程進(jìn)行組合形成業(yè)務(wù)流程。
于本發(fā)明一實(shí)施例中,規(guī)則參數(shù)包括規(guī)則包名稱和規(guī)則要素。
于本發(fā)明一實(shí)施例中,計(jì)算結(jié)果包括規(guī)則編號(hào)、規(guī)則組編號(hào)、規(guī)則結(jié)論。
于本發(fā)明一實(shí)施例中,根據(jù)計(jì)算結(jié)果從數(shù)據(jù)庫選取符合要求的至少一個(gè)子流程定義,形成子流程定義集合,包括:
從計(jì)算結(jié)果中獲取規(guī)則組編號(hào)和規(guī)則結(jié)論;
根據(jù)規(guī)則組編號(hào)從數(shù)據(jù)庫中的子流程定義和規(guī)則組編號(hào)關(guān)系表中獲得命中的至少一個(gè)子流程定義;
將至少一個(gè)子流程定義組合在一起,形成子流程定義集合。
于本發(fā)明一實(shí)施例中,在根據(jù)子流程定義集合啟動(dòng)異步線程,并行創(chuàng)建多個(gè)子流程這一步驟中,每一子流程的創(chuàng)建包括:
根據(jù)子流程定義創(chuàng)建子流程實(shí)例;
初始化子流程實(shí)例并重新啟動(dòng);
當(dāng)子流程實(shí)例啟動(dòng)成功則判斷該子流程創(chuàng)建成功;否則,判斷該子流程創(chuàng)建失敗。
于本發(fā)明一實(shí)施例中,基于規(guī)則的流程調(diào)度方法還包括:
在并行創(chuàng)建多個(gè)子流程后判斷是否所有的子流程均創(chuàng)建成功;
若存在子流程沒有創(chuàng)建成功,則從子流程定義集合中裝載未成功的子流程定義,重新啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程。
于本發(fā)明一實(shí)施例中,基于規(guī)則的流程調(diào)度方法還包括,在形成子流程定義集合后存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息。
于本發(fā)明一實(shí)施例中,存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息這一步驟與并行創(chuàng)建多個(gè)子流程同步進(jìn)行;或者,在形成子流程定義集合后存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息,之后再并行創(chuàng)建多個(gè)子流程。
本發(fā)明另一方面還提供一種基于規(guī)則的流程調(diào)度系統(tǒng),該系統(tǒng)包括調(diào)度模塊、規(guī)則引擎、獲取模塊、子流程創(chuàng)建模塊以及業(yè)務(wù)流程創(chuàng)建模塊。調(diào)度模塊接收業(yè)務(wù)流程創(chuàng)建請(qǐng)求并根據(jù)業(yè)務(wù)流程創(chuàng)建請(qǐng)求從數(shù)據(jù)庫中的業(yè)務(wù)流程定義表中查找對(duì)應(yīng)的規(guī)則參數(shù)。規(guī)則引擎根據(jù)規(guī)則參數(shù)進(jìn)行規(guī)則計(jì)算,獲得計(jì)算結(jié)果。獲取模塊根據(jù)計(jì)算結(jié)果從數(shù)據(jù)庫選取符合要求的至少一個(gè)子流程定義,形成子流程定義集合。子流程創(chuàng)建模塊根據(jù)子流程定義集合啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程。業(yè)務(wù)流程創(chuàng)建模塊將創(chuàng)建成功的多個(gè)子流程進(jìn)行組合形成業(yè)務(wù)流程。
于本發(fā)明一實(shí)施例中,基于規(guī)則的流程調(diào)度系統(tǒng)還包括數(shù)據(jù)庫,數(shù)據(jù)庫在形成子流程定義集合后存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息。
綜上所述,本發(fā)明提供的基于規(guī)則的流程調(diào)度方法及系統(tǒng)根據(jù)接收的業(yè)務(wù)流程創(chuàng)建請(qǐng)求在數(shù)據(jù)庫內(nèi)查找相對(duì)應(yīng)的多個(gè)子流程定義并根據(jù)子流程定義來創(chuàng)建多個(gè)子流程,最后將多個(gè)子流程組合在一起形成業(yè)務(wù)流程。不同的業(yè)務(wù)流程可選取多個(gè)不同的子流程的組合,多段復(fù)用的子流程使得本發(fā)明提供的基于規(guī)則的流程調(diào)度方法實(shí)現(xiàn)應(yīng)用場(chǎng)景和流程模型的解耦,系統(tǒng)無需再單獨(dú)針對(duì)每個(gè)應(yīng)用場(chǎng)景繪制相應(yīng)的且完整的流程圖,而僅僅只需要獲取數(shù)據(jù)庫內(nèi)相應(yīng)的幾個(gè)子流程定義形成子流程定義集合并進(jìn)行相應(yīng)的子流程的創(chuàng)建,最后進(jìn)行組合即可。進(jìn)一步的,子流程的復(fù)用也大大提高了數(shù)據(jù)的利用率,減小系統(tǒng)內(nèi)數(shù)據(jù)的存儲(chǔ)量,提高業(yè)務(wù)流程調(diào)度的效率。
為讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合附圖,作詳細(xì)說明如下。
附圖說明
圖1所示為本發(fā)明一實(shí)施例提供的基于規(guī)則的流程調(diào)度方法的流程圖。
圖2所示為本發(fā)明一實(shí)施例提供的基于規(guī)則的流程調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
如圖1所示,本實(shí)施例提供的基于規(guī)則的流程調(diào)度方法包括:接收業(yè)務(wù)流程創(chuàng)建請(qǐng)求并根據(jù)業(yè)務(wù)流程創(chuàng)建請(qǐng)求從數(shù)據(jù)庫中的業(yè)務(wù)流程定義表中查找對(duì)應(yīng)的規(guī)則參數(shù)(步驟s1)。根據(jù)規(guī)則參數(shù)進(jìn)行規(guī)則計(jì)算,獲得計(jì)算結(jié)果(步驟s2)。根據(jù)計(jì)算結(jié)果從數(shù)據(jù)庫選取符合要求的至少一個(gè)子流程定義,形成子流程定義集合(步驟s3)。根據(jù)子流程定義集合啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程(步驟s4)。將創(chuàng)建成功的多個(gè)子流程進(jìn)行組合形成業(yè)務(wù)流程(步驟s5)。
本實(shí)施例提供的基于規(guī)則的流程調(diào)度方法始于步驟s1,當(dāng)調(diào)度模塊接收到用戶發(fā)起的一應(yīng)用場(chǎng)景的業(yè)務(wù)流程創(chuàng)建請(qǐng)求后,調(diào)度模塊查找數(shù)據(jù)庫內(nèi)的業(yè)務(wù)流程定義表,判斷業(yè)務(wù)流程定義表內(nèi)是否包含有待創(chuàng)建的業(yè)務(wù)流程。若包含有,則獲取該業(yè)務(wù)流程所對(duì)應(yīng)的規(guī)則參數(shù)。所述規(guī)則參數(shù)包括規(guī)則包的名稱和規(guī)則要素等參數(shù)。若業(yè)務(wù)流程定義表內(nèi)沒有包含待創(chuàng)建的業(yè)務(wù)流程,則返回線程并在業(yè)務(wù)流程定義表內(nèi)增加該業(yè)務(wù)流程并添加該業(yè)務(wù)流程對(duì)應(yīng)的規(guī)則參數(shù)。
當(dāng)獲取到待創(chuàng)建的業(yè)務(wù)流程的規(guī)則參數(shù)后,規(guī)則引擎根據(jù)規(guī)則參數(shù)內(nèi)的規(guī)則包名稱和規(guī)則要素進(jìn)行規(guī)則計(jì)算,得到計(jì)算結(jié)果。于本實(shí)施例中,規(guī)則引擎為drools,在drools中使用的規(guī)則推理機(jī)的推力算法為rete算法。然而,本發(fā)明對(duì)此不作任何限定。于其它實(shí)施例中,規(guī)則引擎可為ilog。于本實(shí)施例中,規(guī)則引擎計(jì)算的結(jié)果包括規(guī)則編號(hào)、規(guī)則組編號(hào)以及規(guī)則結(jié)論。
在步驟s3中,根據(jù)計(jì)算結(jié)果中的規(guī)則組編號(hào)和規(guī)則結(jié)論,查詢數(shù)據(jù)庫中子流程定義和規(guī)則組編號(hào)關(guān)系表。判斷是否有子流程定義被命中;若是則將至少一個(gè)命中的子流程定義進(jìn)行組合,形成子流程定義集合。若沒有命中,則返回線程并將新的子流程定義和規(guī)則組編號(hào)添加進(jìn)子流程定義和規(guī)則組編號(hào)關(guān)系表,更新數(shù)據(jù)庫中的子流程定義和規(guī)則組編號(hào)關(guān)系表。
當(dāng)形成子流程定義集合后執(zhí)行步驟s4,啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程。即每一線程根據(jù)一個(gè)子流程定義創(chuàng)建一個(gè)子流程。每一子流程的創(chuàng)建包括:
首先,根據(jù)子流程定義創(chuàng)建子流程實(shí)例。
接著,初始化子流程實(shí)例并重新啟動(dòng)。
最后,判斷子流程實(shí)例是否創(chuàng)建成功;判斷的標(biāo)準(zhǔn)為:當(dāng)子流程實(shí)例啟動(dòng)成功則判斷該子流程創(chuàng)建成功;否則,判斷該子流程創(chuàng)建失敗。
于本實(shí)施例中,基于規(guī)則的調(diào)度方法還包括步驟s6:在并行創(chuàng)建多個(gè)子流程后判斷是否所有的子流程均創(chuàng)建成功。若所有線程上的子流程均創(chuàng)建成功后,則執(zhí)行步驟s5,將創(chuàng)建成功的多個(gè)子流程進(jìn)行組合形成業(yè)務(wù)流程。若在子流程的創(chuàng)建過程中存在有子流程沒有創(chuàng)建成功,則執(zhí)行步驟s7,從子流程定義集合中裝載未成功的子流程定義,重新啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程,即回到步驟s4。然而,本發(fā)明對(duì)此不作任何限定。于其它實(shí)施例中,當(dāng)存在有子流程沒有創(chuàng)建成功時(shí)則返回線程。
本實(shí)施例提供的基于規(guī)則的調(diào)度方法的工作原理為:將復(fù)雜的且會(huì)隨著應(yīng)用場(chǎng)景變化的業(yè)務(wù)流程進(jìn)行分解和提取后調(diào)用數(shù)據(jù)庫內(nèi)的多個(gè)子流程定義,根據(jù)多個(gè)子流程定義創(chuàng)建子流程,最后組合形成業(yè)務(wù)流程。本實(shí)施例提供的調(diào)度方法中無需針對(duì)一個(gè)業(yè)務(wù)流程繪制單獨(dú)的且完整的流程圖,僅僅通過調(diào)用系統(tǒng)內(nèi)的多個(gè)可復(fù)用的子流程即可構(gòu)建一個(gè)業(yè)務(wù)流程,且隨著應(yīng)用場(chǎng)景的變化,只需調(diào)整獲取的子流程或子流程的組合順序,實(shí)現(xiàn)了業(yè)務(wù)場(chǎng)景和流程模型的解耦,使用非常靈活。進(jìn)一步的,該調(diào)度方法實(shí)現(xiàn)了業(yè)務(wù)流程的抽象化、模塊化和規(guī)則化,大幅度降低了開發(fā)成本和維護(hù)成本。
在創(chuàng)建子流程時(shí)采用異步線程且動(dòng)態(tài)創(chuàng)建線程,該設(shè)置大大提高了子流程創(chuàng)建的效率,動(dòng)態(tài)創(chuàng)建線程可根據(jù)不同的子流程數(shù)量來分配線程的數(shù)量,合理安排系統(tǒng)資源,在滿足效率的同時(shí)減小資源消耗。
于本實(shí)施例中,基于規(guī)則的流程調(diào)度方法還包括步驟s8:在形成子流程定義集合后存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息。在子流程創(chuàng)建過程中,若存在子流程創(chuàng)建失敗需要重新創(chuàng)建時(shí),系統(tǒng)可通過調(diào)取存儲(chǔ)的業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息來獲得相應(yīng)的信息。于本實(shí)施例中,步驟s8設(shè)置在步驟s3和步驟s4之間。然而,本發(fā)明對(duì)此不作任何限定。于其它實(shí)施例中,步驟s8可與步驟s4并行,即在步驟s3后有兩個(gè)分支步驟,其中一個(gè)為步驟s4,另一個(gè)為步驟s8。
與上述基于規(guī)則的流程調(diào)度方法相對(duì)應(yīng)的,本實(shí)施例還提供一種基于規(guī)則的流程調(diào)度系統(tǒng)。該系統(tǒng)包括調(diào)度模塊100、規(guī)則引擎200、獲取模塊300、子流程創(chuàng)建模塊400、業(yè)務(wù)流程創(chuàng)建模塊500以及數(shù)據(jù)庫600。調(diào)度模塊100接收業(yè)務(wù)流程創(chuàng)建請(qǐng)求并根據(jù)業(yè)務(wù)流程創(chuàng)建請(qǐng)求從數(shù)據(jù)庫600中的業(yè)務(wù)流程定義表中查找對(duì)應(yīng)的規(guī)則參數(shù)。規(guī)則引擎200根據(jù)規(guī)則參數(shù)進(jìn)行規(guī)則計(jì)算,獲得計(jì)算結(jié)果。獲取模塊300根據(jù)計(jì)算結(jié)果從數(shù)據(jù)庫選取符合要求的至少一個(gè)子流程定義,形成子流程定義集合。子流程創(chuàng)建模塊400根據(jù)子流程定義集合啟動(dòng)異步線程,動(dòng)態(tài)創(chuàng)建線程,并行創(chuàng)建多個(gè)子流程。業(yè)務(wù)流程創(chuàng)建模塊500將創(chuàng)建成功的多個(gè)子流程進(jìn)行組合形成業(yè)務(wù)流程。數(shù)據(jù)庫600在形成子流程定義集合后存儲(chǔ)業(yè)務(wù)流程實(shí)例信息和子流程實(shí)例信息。
該基于規(guī)則的流程調(diào)度系統(tǒng)采用上述基于規(guī)則的流程調(diào)度方法進(jìn)行工作,具體的工作原理在此不作冗述。
在實(shí)際的使用中,一個(gè)業(yè)務(wù)系統(tǒng)可以包含一個(gè)或多個(gè)基于規(guī)則的流程調(diào)度系統(tǒng),多個(gè)基于規(guī)則的流程調(diào)度系統(tǒng)可共用一個(gè)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)來進(jìn)行相應(yīng)的業(yè)務(wù)流程的建立,實(shí)現(xiàn)數(shù)據(jù)的共享。
綜上所述,本發(fā)明提供的基于規(guī)則的流程調(diào)度方法及系統(tǒng)根據(jù)接收的業(yè)務(wù)流程創(chuàng)建請(qǐng)求在數(shù)據(jù)庫內(nèi)查找相對(duì)應(yīng)的多個(gè)子流程定義并根據(jù)子流程定義來創(chuàng)建多個(gè)子流程,最后將多個(gè)子流程組合在一起形成業(yè)務(wù)流程。不同的業(yè)務(wù)流程可選取多個(gè)不同的子流程的組合,多段復(fù)用的子流程使得本發(fā)明提供的基于規(guī)則的流程調(diào)度方法實(shí)現(xiàn)應(yīng)用場(chǎng)景和流程模型的解耦,系統(tǒng)無需再單獨(dú)針對(duì)每個(gè)應(yīng)用場(chǎng)景繪制相應(yīng)的且完整的流程圖,而僅僅只需要獲取數(shù)據(jù)庫內(nèi)相應(yīng)的幾個(gè)子流程定義形成子流程定義集合并進(jìn)行相應(yīng)的子流程的創(chuàng)建,最后進(jìn)行組合即可。進(jìn)一步的,子流程的復(fù)用也大大提高了數(shù)據(jù)的利用率,減小系統(tǒng)內(nèi)數(shù)據(jù)的存儲(chǔ)量,提高業(yè)務(wù)流程調(diào)度的效率。
雖然本發(fā)明已由較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明,任何熟知此技藝者,在不脫離本發(fā)明的精神和范圍內(nèi),可作些許的更動(dòng)與潤(rùn)飾,因此本發(fā)明的保護(hù)范圍當(dāng)視權(quán)利要求書所要求保護(hù)的范圍為準(zhǔn)。