專利名稱:一種用于工作流引擎的多任務(wù)協(xié)同調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及工作流和業(yè)務(wù)流程分析與建模技術(shù),特別涉及一種用于工作流引擎的多任務(wù)協(xié)同調(diào)度方法。
現(xiàn)有技術(shù)工作流引擎的主要目標(biāo)是實現(xiàn)工作流中多任務(wù)的調(diào)度和執(zhí)行,而工作流引擎的性能主要取決于多任務(wù)的調(diào)度方法,因此,工作流引擎中的多任務(wù)調(diào)度方法日益受到學(xué)術(shù)界和企業(yè)界的重視。Petri網(wǎng)技術(shù)是工作流引擎多任務(wù)調(diào)度中最常用的方法之一,其中,以Van derAalst在Petri網(wǎng)基礎(chǔ)上提出的工作流網(wǎng)(WF-net)調(diào)度方法最為著名。關(guān)于Petri網(wǎng)和工作流網(wǎng)的知識可參考書籍《工作流管理——模型、方法和系統(tǒng)》(Wil van der Aalst & Kees vanHee著,王建民、聞立杰等譯,清華大學(xué)出版社,2004年2月,ISBN 7-302-08118-2/TP.5866)。
盡管以Petri網(wǎng)為基礎(chǔ)的工作流網(wǎng)技術(shù),在工作流引擎多任務(wù)調(diào)度應(yīng)用中取得了一定的成果,但它還存在以下問題1、工作流網(wǎng)以三元組(P,T;F)構(gòu)成的Petri網(wǎng)為基礎(chǔ),用庫所(P)表示條件,用變遷(T)表示任務(wù),用流關(guān)系(F)連接條件和變遷。這種方法適合于每個任務(wù)只由一個客戶機(jī)負(fù)責(zé)的調(diào)度情形(即每個任務(wù)在一個客戶機(jī)上一次完成),而對于一個任務(wù)由多個客戶機(jī)同時負(fù)責(zé)的情況(即每個任務(wù)在多個客戶機(jī)上分階段完成),該調(diào)度方法因無法表述多客戶機(jī)和多任務(wù)之間的協(xié)同關(guān)系,因而無法實現(xiàn)正常的調(diào)度。
2、在工作流的多任務(wù)調(diào)度中,經(jīng)常會出現(xiàn)已執(zhí)行的任務(wù)被退回或重新執(zhí)行的逆向調(diào)度情況。而在以Petri網(wǎng)為基礎(chǔ)的工作流網(wǎng)中,用庫所(P)表示條件,用變遷(T)表示任務(wù),任務(wù)只能正向調(diào)度,不能逆向調(diào)度。因此,這種調(diào)度方法的實用性較低。
發(fā)明內(nèi)容
本發(fā)明的目的在于實現(xiàn)多步任務(wù)和多客戶機(jī)之間的協(xié)同,和實現(xiàn)多步任務(wù)的正向和逆向調(diào)度,實用性強(qiáng),調(diào)度靈活。
本發(fā)明的技術(shù)方案是這樣實現(xiàn)的1、一種用于工作流引擎的多任務(wù)協(xié)同調(diào)度方法,其特征在于按照如下步驟進(jìn)行
(1)構(gòu)建多任務(wù)協(xié)同方法的計算模型——多步任務(wù)協(xié)同網(wǎng),這是一個四元組N=(C,T;W,D)按照如下充分必要條件構(gòu)造的1°C≠φ2°T≠φ3°CI T=φ4°WC×T5°DT×C6°dom(W)Ycod(W)=CY T其中,dom(W)={x|∃y:(x,y)∈W},cod(W)={y|∃x:(x,y)∈W}:]]>在四元組中,C是一個有限的客戶機(jī)集合;T是一個有限的任務(wù)集合;W是工作的集合,表示客戶機(jī)在任務(wù)中的分工;D是轉(zhuǎn)發(fā)的集合,表示任務(wù)的流轉(zhuǎn)方向。
(2)構(gòu)建多步任務(wù)協(xié)同網(wǎng)的動態(tài)結(jié)構(gòu)——多步任務(wù)協(xié)同網(wǎng)系統(tǒng),這是一個八元組∑=(C,T;W,D;W0,PD,G,L)按照如下條件構(gòu)造的1°N=(C,T;W,D)是一個多步任務(wù)協(xié)同網(wǎng)。
2°W0W,是起始工作的集合。起始工作是指不依賴于任何任務(wù)客戶機(jī)就可以辦理的工作。
3°PD是定義在D上的轉(zhuǎn)發(fā)條件的集合。轉(zhuǎn)發(fā)條件指轉(zhuǎn)發(fā)依賴的條件。
4°G是定義在C上的分組的集合。如果客戶機(jī)即將辦理的工作和已完成任務(wù)之間存在依賴關(guān)系,則需要將這些工作和傳遞這些任務(wù)的轉(zhuǎn)發(fā)劃分成一組,稱為分組。
5°LW∪D,是循環(huán)的集合。循環(huán)指可被反復(fù)執(zhí)行的,并只保留最后一次執(zhí)行信息的環(huán)形路徑。
(3)構(gòu)建多任務(wù)調(diào)度所需的狀態(tài)集合,包括五個狀態(tài)集合1°案例的狀態(tài)集合Si={Sir,Siw,Swf}。案例是多步任務(wù)協(xié)同網(wǎng)的一次執(zhí)行,一個多步任務(wù)協(xié)同網(wǎng)可以被多次執(zhí)行,每次執(zhí)行都對應(yīng)一個不同的案例。其中,Sir就緒狀態(tài)案例等待執(zhí)行的狀態(tài),Siw在辦狀態(tài)案例正在執(zhí)行的狀態(tài),Sif完成狀態(tài)案例已經(jīng)結(jié)束的狀態(tài)。
2°工作的狀態(tài)集合Sw={Swr,Sww,Swn,Swf}。其中,
Swr就緒狀態(tài)工作等待客戶機(jī)辦理的狀態(tài),Sww在辦狀態(tài)工作正在被客戶機(jī)辦理的狀態(tài),Swn否定狀態(tài)工作因條件不滿足不能被客戶機(jī)辦理的狀態(tài),Swf完成狀態(tài)工作已經(jīng)結(jié)束的狀態(tài)。
3°務(wù)的狀態(tài)集合St={Str,Stw,Stn,Stf}。其中,Str就緒狀態(tài)任務(wù)等待客戶機(jī)辦理的狀態(tài),Stw在辦狀態(tài)任務(wù)正在被客戶機(jī)辦理的狀態(tài),Stn否定狀態(tài)任務(wù)因條件不滿足不能被客戶機(jī)辦理的狀態(tài),Stf完成狀態(tài)任務(wù)已經(jīng)結(jié)束的狀態(tài)。
4°轉(zhuǎn)發(fā)的狀態(tài)集合Sd={Sdr,Sdw,Sdn,Sdf}。其中,Sdr就緒狀態(tài)轉(zhuǎn)發(fā)等待被執(zhí)行的狀態(tài),Sdw待簽狀態(tài)轉(zhuǎn)發(fā)等待被客戶機(jī)簽收的狀態(tài),Sdn否定狀態(tài)轉(zhuǎn)發(fā)因條件不滿足不能被客戶機(jī)簽收的狀態(tài),Sdf完成狀態(tài)轉(zhuǎn)發(fā)已經(jīng)結(jié)束的狀態(tài)。
5°循環(huán)的狀態(tài)集合Sl={Slr,Slw,Sdf}。其中,Slr就緒狀態(tài)循環(huán)等待被執(zhí)行的狀態(tài),Slw工作狀態(tài)循環(huán)正在被執(zhí)行的狀態(tài),Slf完成狀態(tài)循環(huán)已經(jīng)結(jié)束的狀態(tài)。
(4)多任務(wù)調(diào)度包括啟動案例、終止案例、客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)八個調(diào)度方法。在多任務(wù)調(diào)度之前,案例和所有的工作、任務(wù)、轉(zhuǎn)發(fā)、循環(huán)都被初始化為就緒狀態(tài)。啟動案例是第一個被執(zhí)行調(diào)度,客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)是根據(jù)多步任務(wù)協(xié)同網(wǎng)的流向,包括正向和逆向,由客戶機(jī)進(jìn)行調(diào)度的,終止案例的調(diào)度是根據(jù)工作和轉(zhuǎn)發(fā)的狀態(tài)由系統(tǒng)自動調(diào)度的。
令SetStatus(x)表示設(shè)置對象x的狀態(tài),x為案例、任務(wù)、工作、轉(zhuǎn)發(fā)或循環(huán);GetStatus(x)表示獲得對象x的狀態(tài),x為案例、任務(wù)、工作、轉(zhuǎn)發(fā)或循環(huán);SetClient(x)表示設(shè)置對象所屬客戶機(jī),x為工作或轉(zhuǎn)發(fā);GetClient(x)表示獲得對象所屬客戶機(jī),x為工作或轉(zhuǎn)發(fā);PreCondition(x)表示條件計算,結(jié)果為True或False,x為轉(zhuǎn)發(fā);
Count(x)表示集合中對象的數(shù)目,x為一個集合。
則多步任務(wù)的調(diào)度方法可表述如下1°啟動案例。
設(shè)w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調(diào)度方法如下將案例和每一個起始工作的狀態(tài)設(shè)置為在辦狀態(tài)。即SetStatus(1)=SiwSetStatus(w0)=Sww,w0∈W0。
2°終止案例設(shè)w為案例i的任一工作,W是w的集合,d為案例i的任一轉(zhuǎn)發(fā),D是d的集合,則終止案例的調(diào)度方法為第一步若案例中仍有待辦的工作或待簽收的任務(wù),即GetStatus(w)=Sww,∃w∈W]]>或GetStatus(d)=Sdw,∃d∈D,]]>則不能終止案例,結(jié)束;否則轉(zhuǎn)第二步。
第二步將案例的狀態(tài)置為完稱狀態(tài),即SetStatus(i)=Sif。
3°客戶機(jī)簽辦任務(wù)。
設(shè)c是案例沖的任一客戶機(jī),gc是定義在c上的任一分組,d分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合。則客戶機(jī)c簽辦任務(wù)的調(diào)度方法如下第一步若gc中的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束;第二步若gc中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則轉(zhuǎn)第三步;否則轉(zhuǎn)第四步;第三步將gc中的每一個工作w設(shè)置為否定狀態(tài),即SetStatus(w)=Swn,w∈W;對于每一個w,若其所屬任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D,結(jié)束;否則結(jié)束。
第四步對于gc中的任一個d,若其處于待簽狀態(tài),則將d的客戶機(jī)設(shè)置為c,即SetClient(d)=c,則轉(zhuǎn)第六步;否則將d的客戶機(jī)設(shè)置為空值null,即SetClient(d)=null,并轉(zhuǎn)第五步;
第五步若d所屬任務(wù)’t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)’t和其每一個工作’w及每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),每一個工作w設(shè)置為完成狀態(tài),并將每一個工作w的客戶機(jī)設(shè)置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W。若gc中仍有轉(zhuǎn)發(fā)d處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第四步;否則轉(zhuǎn)第七步。
第七步若任務(wù)t處于就緒狀態(tài),即GetStatus(t)=Str,則將任務(wù)t設(shè)置為在辦狀態(tài),即SetStatus(t)=Stw;第八步客戶機(jī)c辦理gc中的任一個工作w。
第九步若工作w辦理完畢,則將工作w設(shè)置為完成狀態(tài),即SetStatus(w)=Swf。若gc中仍有處于在辦狀態(tài)的工作,即GetStatus(w)=Sww,∃w∈W,]]>則轉(zhuǎn)第八步;否則結(jié)束。
4°客戶機(jī)退回任務(wù)。
設(shè)c是案例沖的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合,則客戶機(jī)c退回任務(wù)的調(diào)度方法如下第一步若gc中的每一個工作w都處于在辦狀態(tài),即GetStatus(w)=Sww,w∈W,則轉(zhuǎn)第二步;否則結(jié)束。
第二步將gc中的每一個工作w都設(shè)置為就緒狀態(tài),即SetStatus(w)=Swr,w∈W。對于gc中的每一個工作w,若w所屬任務(wù)t的每一個工作w都處于就緒狀態(tài),即GetStatus(w)=Swr,w∈W,則將任務(wù)t設(shè)置為就緒狀態(tài),即SetStatus(t)=Str。
第三步對于gc中的任一個d,若其客戶機(jī)為c,即GetClient(d)=c,則將d的客戶機(jī)設(shè)置為null,并將d設(shè)置為待簽狀態(tài),即SetClient(d)=null,SetStatus(d)=Sdw,之后轉(zhuǎn)第五步;否則將d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn,之后轉(zhuǎn)第四步。
第四步若d所屬任務(wù)′t的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,并且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetClient(′w)=null,′w∈′W,則將任務(wù)′t設(shè)置為否定狀態(tài),即SetStatus(′t)=Stn。結(jié)束。
5°多步任務(wù)辦理。
設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合。則任務(wù)t辦理過程的調(diào)度方法如下第一步若任務(wù)t的每一個工作w都處于完成或否定狀態(tài),即GetStatus(w)∈{Swf,SWn}, w∈W,則轉(zhuǎn)第二步;否則結(jié)束。
第二步若任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn, w∈W,則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之后轉(zhuǎn)第七步;否則轉(zhuǎn)第三步。
第三步對于t中的任一個w,若w處于否定狀態(tài),則將w設(shè)置為完成狀態(tài),將w的客戶機(jī)設(shè)置為空值null,將與w處于同一分組gc中的每一個工作w和每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之后轉(zhuǎn)第四步;否則轉(zhuǎn)第五步。
第四步對于任一個′d,若′d所屬任務(wù)′t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)′t和任務(wù)′t的每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D。
第五步若任務(wù)t有工作w處于否定狀態(tài),即GetStatus(w)=Swn,∃w∈W,]]>則轉(zhuǎn)第三步;否則轉(zhuǎn)第六步。
第六步將任務(wù)t設(shè)置為完成狀態(tài),即SetStatud(t):=Stf,∃w∈W.]]>計算任務(wù)t的每一個轉(zhuǎn)發(fā)d的轉(zhuǎn)發(fā)條件,若結(jié)果為真,即PreCondition(d)=True,則將轉(zhuǎn)發(fā)d設(shè)置為待簽狀態(tài),即SetStatus(d)=Sdw;否則將轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn。
第七步對于任一個d,若其所屬分組gc’中的所有轉(zhuǎn)發(fā)d處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)設(shè)置為否定狀態(tài),即SetStatus(w′)=SWn,w′∈W′。
第八步對于任一個w′,若其所屬任務(wù)t’中的所有工作w′處于否定狀態(tài),即GetStatusS(w′)=Swn,w′∈W′,則將任務(wù)t’和任務(wù)t’的所有轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′。
6°多步任務(wù)重辦。
設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合。則客戶機(jī)c重辦任務(wù)t的調(diào)度方法如下第一步若任務(wù)t處于在辦狀態(tài),即GetStatus(t)=Stw,或任務(wù)t處于完成狀態(tài)且任務(wù)t沒有轉(zhuǎn)發(fā),即GetStatus(t)=Stf& Count(D)=0,或任務(wù)t處于完成狀態(tài)且任務(wù)t的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(t)=Stf& GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束。
第二步對于任一個d,若其所屬分組gc’中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′,之后轉(zhuǎn)第三步;否則轉(zhuǎn)第四步。
第三步對于任一個w′,若其所屬任務(wù)t’處于否定狀態(tài),則將任務(wù)t’和任務(wù)t’的每一個轉(zhuǎn)發(fā)d′設(shè)置為就緒狀態(tài),即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′。
第四步將任務(wù)t和任務(wù)t要重辦的工作w設(shè)置為在辦狀態(tài),并將任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為就緒狀態(tài),即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D。對于任一個d,若其所屬分組gc’中有工作W′處于否定狀態(tài),即GetStatus(w′)=Swn,∃w′∈W′,]]>則將分組gc’中的每一個工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′。
第五步若任務(wù)t有處于完成狀態(tài)的工作w,且w的客戶機(jī)為null,即GetStatus(w)=Swf]]>&GetClient(w)=null,∃w∈W,]]>則將w置為否定狀態(tài),即SetStatus(w)=Swn。
第六步對于t中的任一個w,若w所屬分組gc中的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉(zhuǎn)發(fā)′d設(shè)置為否定狀態(tài),即SetStatus(′d)=Sdn,′d∈′D。
第七步對于任一個′d,若其所屬任務(wù)′t處于完成狀態(tài),且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetStatus(′t)=Stf& GetClient(′w)=null,′w∈′W,則將任務(wù)′t和任務(wù)′t的每一個工作′w都設(shè)置為否定狀態(tài),即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W。
第八步客戶機(jī)c重辦工作w。
第九步若工作w辦理完畢,則將工作w置為完成狀態(tài),即SetStatus(w)=Swf,結(jié)束。否則轉(zhuǎn)第八步。
7°啟動循環(huán)。
設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則啟動循環(huán)的調(diào)度方法如下若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于就緒狀態(tài),即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slr,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slw;否則結(jié)束。
8°終止循環(huán)。
設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則終止循環(huán)的調(diào)度方法如下若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于運(yùn)行狀態(tài),即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slw,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slf;否則結(jié)束。
本發(fā)明實現(xiàn)了在工作流的多任務(wù)調(diào)度中,當(dāng)任務(wù)在多個客戶機(jī)上分階段完成時,多步任務(wù)和客戶機(jī)之間的協(xié)同方法,和多步任務(wù)的正向和逆向調(diào)度方法,包括啟動案例、終止案例、客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)的調(diào)度方法。經(jīng)基于該調(diào)度方法的工作流引擎軟件的實際測試,該調(diào)度方法完全滿足需求,很好地實現(xiàn)了本發(fā)明的目的。
圖1是本發(fā)明案例啟動調(diào)度流程2是本發(fā)明案例終止調(diào)度流程3是本發(fā)明客戶機(jī)簽辦和退回任務(wù)示意4是本發(fā)明客戶機(jī)簽辦任務(wù)流程5是本發(fā)明客戶機(jī)退回任務(wù)流程6是本發(fā)明任務(wù)辦理和重辦示意7是本發(fā)明任務(wù)辦理流程8是本發(fā)明任務(wù)重辦流程9是本發(fā)明啟動循環(huán)流程10是本發(fā)明終止循環(huán)流程11是本發(fā)明實例示意圖具體實施方式
參照圖1所示,設(shè)w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調(diào)度方法如下將案例和每一個起始工作的狀態(tài)設(shè)置為在辦狀態(tài)。即SetStatus(i)=SiwSetStatus(w0)=Sww,w0∈W0。
參照圖2所示,設(shè)w為案例i的任一工作,W是w的集合,d為案例i的任一轉(zhuǎn)發(fā),D是d的集合,則終止案例的調(diào)度方法為第一步若案例中仍有待辦的工作或待簽收的任務(wù),即GetStatus(w)=Sww,∃w∈W]]>或GetStatus(d)=Sdw,∃d∈D,]]>則不能終止案例,結(jié)束;否則轉(zhuǎn)第二步。
第二步將案例的狀態(tài)置為完稱狀態(tài),即SetStatus(i)=Sif。
參照圖3所示,設(shè)c是案例i中的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合。
參照圖4所示,設(shè)c是案例i中的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合。則客戶機(jī)c簽辦任務(wù)的調(diào)度方法如下第一步若gc中的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束;第二步若gc中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則轉(zhuǎn)第三步;否則轉(zhuǎn)第四步;第三步將gc中的每一個工作w設(shè)置為否定狀態(tài),即SetStatus(w)=Swn,w∈W;對于每一個w,若其所屬任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D′,結(jié)束;否則結(jié)束。
第四步對于gc中的任一個d,若其處于待簽狀態(tài),則將d的客戶機(jī)設(shè)置為c,即SetClient(d)=c,則轉(zhuǎn)第六步;否則將d的客戶機(jī)設(shè)置為空值null,即SetClient(d)=null,并轉(zhuǎn)第五步;第五步若d所屬任務(wù)’t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)’t和其每一個工作’w及每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),每一個工作w設(shè)置為完成狀態(tài),并將每一個工作w的客戶機(jī)設(shè)置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W。若gc中仍有轉(zhuǎn)發(fā)d處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第四步;否則轉(zhuǎn)第七步。
第七步若任務(wù)t處于就緒狀態(tài),即GetStatus(t)=Str,則將任務(wù)t設(shè)置為在辦狀態(tài),即SetStatus(t)=Stw;第八步客戶機(jī)c辦理gc中的任一個工作w。
第九步若工作w辦理完畢,則將工作w設(shè)置為完成狀態(tài),即SetStatus(w)=Swf。
若gc中仍有處于在辦狀態(tài)的工作,即GetStatus(w)=Sww,∃w∈W,]]>則轉(zhuǎn)第八步;否則結(jié)束。
參照圖5所示,設(shè)c是案例i中的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合,則客戶機(jī)c退回任務(wù)的調(diào)度方法如下第一步若gc中的每一個工作w都處于在辦狀態(tài),即GetStatus(w)=Sww,w∈W,則轉(zhuǎn)第二步;否則結(jié)束。
第二步將gc中的每一個工作w都設(shè)置為就緒狀態(tài),即SetStatus(w)=Swr,w∈W。對于gc中的每一個工作w,若w所屬任務(wù)t的每一個工作w都處于就緒狀態(tài),即GetStatus(w)=Swr,w∈W,則將任務(wù)t設(shè)置為就緒狀態(tài),即SetStatus(t)=Str。
第三步對于gc中的任一個d,若其客戶機(jī)為c,即GetClient(d)=c,則將d的客戶機(jī)設(shè)置為null,并將d設(shè)置為待簽狀態(tài),即SetClient(d)=null,SetStatus(d)=Sdw,之后轉(zhuǎn)第五步;否則將d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn,之后轉(zhuǎn)第四步。
第四步若d所屬任務(wù)′t的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,并且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetClient(′w)=null,′w∈′W,則將任務(wù)′t設(shè)置為否定狀態(tài),即SetStatus(′t)=Stn。結(jié)束。
參照圖6所示,設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合。
參照圖7所示,設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合。則任務(wù)t辦理過程的調(diào)度方法如下第一步若任務(wù)t的每一個工作w都處于完成或否定狀態(tài),即GetStatus(w)∈{Swf,Swn}, w∈W,則轉(zhuǎn)第二步;否則結(jié)束。
第二步若任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn, w∈W,則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之后轉(zhuǎn)第七步;否則轉(zhuǎn)第三步。
第三步對于t中的任一個w,若w處于否定狀態(tài),則將w設(shè)置為完成狀態(tài),將w的客戶機(jī)設(shè)置為空值null,將與w處于同一分組gc中的每一個工作w和每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之后轉(zhuǎn)第四步;否則轉(zhuǎn)第五步。
第四步對于任一個′d,若′d所屬任務(wù)′t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)′t和任務(wù)′t的每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D。
第五步若任務(wù)t有工作w處于否定狀態(tài),即GetStatus(w)=Swn,∃w∈W,]]>則轉(zhuǎn)第三步;否則轉(zhuǎn)第六步。
第六步將任務(wù)t設(shè)置為完成狀態(tài),即SetStatus(t):=Stf,∃w∈W.]]>計算任務(wù)t的每一個轉(zhuǎn)發(fā)d的轉(zhuǎn)發(fā)條件,若結(jié)果為真,即PreCondition(d)=True,則將轉(zhuǎn)發(fā)d設(shè)置為待簽狀態(tài),即SetStatus(d)=Sdw;否則將轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn。
第七步對于任一個d,若其所屬分組gc’中的所有轉(zhuǎn)發(fā)d處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)置為否定狀態(tài),即SetStatus(w′)=Swn,w′∈W′。
第八步對于任一個w′,若其所屬任務(wù)t’中的所有工作w′處于否定狀態(tài),即GetStatusS(w′)=Swn,w′∈W′,則將任務(wù)t’和任務(wù)t’的所有轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′。
參照圖8所示,設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合。則客戶機(jī)c重辦任務(wù)t的調(diào)度方法如下第一步若任務(wù)t處于在辦狀態(tài),即GetStatus(t)=Stw,或任務(wù)t處于完成狀態(tài)且任務(wù)t沒有轉(zhuǎn)發(fā),即GetStatus(t)=Stf&Count(D)=0,或任務(wù)t處于完成狀態(tài)且任務(wù)t的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(t)=Stf&GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束。
第二步對于任一個d,若其所屬分組gc’中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′,之后轉(zhuǎn)第三步;否則轉(zhuǎn)第四步。
第三步對于任一個w′,若其所屬任務(wù)t’處于否定狀態(tài),則將任務(wù)t’和任務(wù)t’的每一個轉(zhuǎn)發(fā)d′設(shè)置為就緒狀態(tài),即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′。
第四步將任務(wù)t和任務(wù)t要重辦的工作w設(shè)置為在辦狀態(tài),并將任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為就緒狀態(tài),即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D。對于任一個d,若其所屬分組gc’中有工作w′處于否定狀態(tài),即GetStatus(w′)=Swn,∃w′∈W′,]]>則將分組gc’中的每一個工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′。
第五步若任務(wù)t有處于完成狀態(tài)的工作w,且w的客戶機(jī)為null,即GetStatus(w)=Swf]]>&GetClient(w)=null,∃w∈W,]]>則將w設(shè)置為否定狀態(tài),即SetStatus(w)=Swn。
第六步對于t中的任一個w,若w所屬分組gc中的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉(zhuǎn)發(fā)′d設(shè)置為否定狀態(tài),即SetStatus(′d)=Sdn,′d∈′D。
第七步對于任一個′d,若其所屬任務(wù)′t處于完成狀態(tài),且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetStatus(′t)=Stf&GetClient(′w)=null,′w∈′W,則將任務(wù)′t和任務(wù)′t的每一個工作′w都設(shè)置為否定狀態(tài),即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W。
第八步客戶機(jī)c重辦工作w。
第九步若工作w辦理完畢,則將工作w設(shè)置為完成狀態(tài),即SetStatus(w)=Swf,結(jié)束。否則轉(zhuǎn)第八步。
參照圖9所示,設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則啟動循環(huán)的調(diào)度方法如下若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于就緒狀態(tài),即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slr,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slw;否則結(jié)束。
參照圖10所示,設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則終止循環(huán)的調(diào)度方法如下
若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于運(yùn)行狀態(tài),即w∈L&GetStatus(w)=Sww&GetStatus(L)=Slw,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slf;否則結(jié)束。
參照圖11所示,案例i中有6個客戶機(jī)(c1、c2、c3、c4、c5和c6)和7個任務(wù)(t1、t2、t3、t4、t5、t6、t7),其中任務(wù)t1、t5和t7是多步任務(wù)(在多個客戶機(jī)上分步完成),工作w1_1、w1_1和w_5是啟動工作,轉(zhuǎn)發(fā)d1_1和d1_2是條件轉(zhuǎn)發(fā),在c6上定義了2個分組,d2和w6_2為分組g1,d1_2和w6_1為分組g2,其它所有沒有定義分組的客戶機(jī)默認(rèn)為同一個分組,w2_1、d4、w3_1和d3是一個循環(huán)l。
多步任務(wù)協(xié)同網(wǎng)可以用圖形表示,簡稱網(wǎng)的圖。在本實施例中,采用了如圖11的圖形表示方法客戶機(jī)用圓圈表示,任務(wù)用矩形表示,工作和轉(zhuǎn)發(fā)用帶有箭頭的直線表示,起始工作和條件轉(zhuǎn)發(fā)用空心箭頭表示,循環(huán)用直線起始端的小圓圈表示(僅循環(huán)用為空心),分組用標(biāo)在直線上的靠近客戶機(jī)端的數(shù)字表示。
在案例沒有啟動前,案例和案例中所有的工作、任務(wù)、轉(zhuǎn)發(fā)、循環(huán)都處于就緒狀態(tài)。
1、案例i的正向調(diào)度示例。
(1)當(dāng)i啟動后,S(i)=Siw,S(w1_1)=Sww,S(w1_1)=Sww,S(w_5)=Sww,S(t1)=Stw,S(t2)=Stw。
(2)由圖中可以看出,t1由c1和c5同時負(fù)責(zé),對應(yīng)工作w1_1和w5,t2由c1負(fù)責(zé),對應(yīng)工作w1_2。
(3)當(dāng)w1_1和w5辦理完畢后,S(w1_1)=Swf,S(w5)=Swf,S(t1)=Stf,由于d1_1和d1_2是條件轉(zhuǎn)發(fā),需要根據(jù)條件設(shè)置進(jìn)行條件判斷,這里假設(shè)P(d1_1)=True,P(d1_2)=False,則S(d1_1)=Sdw,S(d1_2)=Sdn。
(4)當(dāng)w1_2辦理完畢后,S(w1_2)=Swf,S(t2)=Stf,S(d2)=Sdw。
(5)c2沒有定義分組,默認(rèn)所有轉(zhuǎn)發(fā)和工作為一組。由于d3為僅循環(huán)用(啟動循環(huán)運(yùn)行時才有效),這里假設(shè)不啟動循環(huán),所以c2可以簽辦任務(wù)t1,簽辦后,S(d1_1)=Sdf,S(w2_1)=Sww,S(w2_1)=Swn,S(t4)=Stw,S(t5)=Stw。
(6)c6上定義了2個分組,d2和w6_2為分組g1,d1_2和w6_1為分組g2。對于g1,c6簽辦任務(wù)t2后,S(d2)=Sdf,S(w6_2)=Sww,S(t6)=Stw。對于g2,由于S(d1_2)=Sdn,所以S(w6_1)=Swn。
(7)當(dāng)w2_1辦理完畢后,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw。
(8)當(dāng)w2_2辦理完畢后,S(w2_2)=Swf,由于S(w6_1)=Swn,S(t5)=Stf,S(d5_1)=Sdw,S(d5_2)=Sdw。
(9)當(dāng)w6_2辦理完畢后,S(w6_2)=Swf,S(t6)=Stf。
(10)c3沒有定義分組,默認(rèn)所有轉(zhuǎn)發(fā)和工作為一組。由于w3_1為僅循環(huán)用,這里假設(shè)不啟動循環(huán),所以c3簽辦任務(wù)t4和t5后,S(d4)=Sdf,S(d5_1)=Sdf,S(w3_2)=Sww。
(11)c4沒有定義分組,默認(rèn)所有轉(zhuǎn)發(fā)和工作為一組。c4簽辦任務(wù)t5后,S(d5_2)=Sdf,S(w4)=Sww。
(12)當(dāng)w3_2和w4辦理完畢后,S(w3_2)=Swf,S(w4)=Swf,S(t7)=Stf,由于i中沒有任何一個w和d處于待辦或待簽狀態(tài),所以i結(jié)束,S(i)=Sif。
2、案例的逆向調(diào)度過程示例。
(1)客戶機(jī)重辦任務(wù)設(shè)案例i正向調(diào)度到第(4)步,由于S(d1_1)=Sdw,S(d1_2)=Sdn,S(d1_2)=Sdn,所以c5可以重辦t1,c1可以重辦t1和t2。這里設(shè)c1重辦t1,重辦后,S(d1_1)=Sdr,S(d1_2)=Sdr,S(t1)=Stw,S(w1_1)=Sww。
(2)客戶機(jī)退回任務(wù)設(shè)案例i正向調(diào)度到第(6)步,由于S(w2_1)=Sww,S(w2_1)=Swn,S(w6_1)=Swn,S(w6_2)=Sww,S(t4)=Stw,S(t5)=Stw,S(t6)=Stw,所以c2和c6都可以退回任務(wù)。這里設(shè)c6退回分組g1的簽辦的任務(wù)t2,則S(w6_2)=Swr,S(d2)=Sdw??梢钥闯觯?dāng)c6退回簽辦的t2后,c1還可以重辦w1_2,從而連續(xù)實現(xiàn)多步任務(wù)調(diào)度過程中的逆向。
3、案例的循環(huán)調(diào)度過程示例。
設(shè)案例i正向調(diào)度到第(10)步,c3啟動循環(huán)l,則S(l)=Slw,S(w3_1)=Sww,S(t3)=Stw;當(dāng)w3_1辦理完畢后,S(w3_1)=Swf,S(t3)=Stf,S(d3)=Sdw;這時,c2可以簽辦任務(wù)t3,由于循環(huán)將路徑中工作、任務(wù)和轉(zhuǎn)發(fā)統(tǒng)一按照就緒狀態(tài)處理,而w2_2不在循環(huán)中,所以簽辦后S(d3)=Sdf,S(2_1)=Sww,S(t4)=Stw;當(dāng)w2_1辦理完畢后,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw;此時c3如果中止循環(huán),則S(l)=Slf,循環(huán)結(jié)束,如果不中止循環(huán),ce可以接著辦理w3_1,則S(w3_1)=Sww,S(t3)=Stw,如此反復(fù)循環(huán)直至終止循環(huán)。
權(quán)利要求
1.一種用于工作流引擎的多任務(wù)協(xié)同調(diào)度方法,其特征在于按照如下步驟進(jìn)行(i)構(gòu)建多任務(wù)協(xié)同方法的計算模型——多步任務(wù)協(xié)同網(wǎng),這是一個四元組N=(C,T;W,D)按照如下充分必要條件構(gòu)造的1°C≠φ2°T≠φ3°CI T=φ4°WC×T5°DT×C6°dom(W)Y cod(W)=CYT其中,dom(W)={x|∃y:(x,y)∈W},]]>cod(W)={y|∃x:(x,y)∈W};]]>在四元組中,C是一個有限的客戶機(jī)集合;T是一個有限的任務(wù)集合;W是工作的集合,表示客戶機(jī)在任務(wù)中的分工;D是轉(zhuǎn)發(fā)的集合,表示任務(wù)的流轉(zhuǎn)方向;(2)構(gòu)建多步任務(wù)協(xié)同網(wǎng)的動態(tài)結(jié)構(gòu)——多步任務(wù)協(xié)同網(wǎng)系統(tǒng),這是一個八元組∑=(C,T;W,D;W0,PD,G,L)按照如下條件構(gòu)造的1°N=(C,T;W,D)是一個多步任務(wù)協(xié)同網(wǎng);2°W0W,是起始工作的集合,起始工作是指不依賴于任何任務(wù)客戶機(jī)就可以辦理的工作;3°PD是定義在D上的轉(zhuǎn)發(fā)條件的集合,轉(zhuǎn)發(fā)條件指轉(zhuǎn)發(fā)依賴的條件;4°G是定義在C上的分組的集合,如果客戶機(jī)即將辦理的工作和已完成任務(wù)之間存在依賴關(guān)系,則需要將這些工作和傳遞這些任務(wù)的轉(zhuǎn)發(fā)劃分成一組,稱為分組;5°LW∪D,是循環(huán)的集合,循環(huán)指可被反復(fù)執(zhí)行的,并只保留最后一次執(zhí)行信息的環(huán)形路徑;(3)構(gòu)建多任務(wù)調(diào)度所需的狀態(tài)集合,包括五個狀態(tài)集合1°案例的狀態(tài)集合Si={Sir,Siw,Swf},案例是多步任務(wù)協(xié)同網(wǎng)的一次執(zhí)行,一個多步任務(wù)協(xié)同網(wǎng)可以被多次執(zhí)行,每次執(zhí)行都對應(yīng)一個不同的案例,其中,Sir就緒狀態(tài)案例等待執(zhí)行的狀態(tài),Siw在辦狀態(tài)案例正在執(zhí)行的狀態(tài),Sif完成狀態(tài)案例已經(jīng)結(jié)束的狀態(tài);2°工作的狀態(tài)集合Sw={Swr,Sww,Swn,Swf},其中,Swr就緒狀態(tài)工作等待客戶機(jī)辦理的狀態(tài),Sww在辦狀態(tài)工作正在被客戶機(jī)辦理的狀態(tài),Swn否定狀態(tài)工作因條件不滿足不能被客戶機(jī)辦理的狀態(tài),Swf完成狀態(tài)工作已經(jīng)結(jié)束的狀態(tài);3°任務(wù)的狀態(tài)集合St={Str,Stw,Stn,Stf},其中,Str就緒狀態(tài)任務(wù)等待客戶機(jī)辦理的狀態(tài),Stw在辦狀態(tài)任務(wù)正在被客戶機(jī)辦理的狀態(tài),Stn否定狀態(tài)任務(wù)因條件不滿足不能被客戶機(jī)辦理的狀態(tài),Stf完成狀態(tài)任務(wù)已經(jīng)結(jié)束的狀態(tài);4°轉(zhuǎn)發(fā)的狀態(tài)集合Sd={Sdr,Sdw,Sdn,Sdf},其中,Sdr就緒狀態(tài)轉(zhuǎn)發(fā)等待被執(zhí)行的狀態(tài),Sdw待簽狀態(tài)轉(zhuǎn)發(fā)等待被客戶機(jī)簽收的狀態(tài),Sdn否定狀態(tài)轉(zhuǎn)發(fā)因條件不滿足不能被客戶機(jī)簽收的狀態(tài),Sdf完成狀態(tài)轉(zhuǎn)發(fā)已經(jīng)結(jié)束的狀態(tài);5°循環(huán)的狀態(tài)集合S1={Slr,Slw,Sdf};其中,Slr就緒狀態(tài)循環(huán)等待被執(zhí)行的狀態(tài),Slw工作狀態(tài)循環(huán)正在被執(zhí)行的狀態(tài),Slf完成狀態(tài)循環(huán)已經(jīng)結(jié)束的狀態(tài);(4)多任務(wù)調(diào)度包括啟動案例、終止案例、客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)八個調(diào)度方法;在多任務(wù)調(diào)度之前,案例和所有的工作、任務(wù)、轉(zhuǎn)發(fā)、循環(huán)都被初始化為就緒狀態(tài);啟動案例是第一個被執(zhí)行調(diào)度,客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)是根據(jù)多步任務(wù)協(xié)同網(wǎng)的流向,包括正向和逆向,由客戶機(jī)進(jìn)行調(diào)度的,終止案例的調(diào)度是根據(jù)工作和轉(zhuǎn)發(fā)的狀態(tài)由系統(tǒng)自動調(diào)度的;令SetStatus(x)表示設(shè)置對象x的狀態(tài),x為案例、任務(wù)、工作、轉(zhuǎn)發(fā)或循環(huán);GetStatus(x)表示獲得對象x的狀態(tài),x為案例、任務(wù)、工作、轉(zhuǎn)發(fā)或循環(huán);SetClient(x)表示設(shè)置對象所屬客戶機(jī),x為工作或轉(zhuǎn)發(fā);GetClient(x)表示獲得對象所屬客戶機(jī),x為工作或轉(zhuǎn)發(fā);PreCondition(x)表示條件計算,結(jié)果為True或False,x為轉(zhuǎn)發(fā);Count(x)表示集合中對象的數(shù)目,x為一個集合;則多步任務(wù)的調(diào)度方法可表述如下1°啟動案例設(shè)w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調(diào)度方法如下將案例和每一個起始工作的狀態(tài)設(shè)置為在辦狀態(tài),即SetStatus(i)=SiwSetStatus(w0)=Sww,w0∈W02°終止案例設(shè)w為案例i的任一工作,W是w的集合,d為案例i的任一轉(zhuǎn)發(fā),D是d的集合,則終止案例的調(diào)度方法為第一步若案例中仍有待辦的工作或待簽收的任務(wù),即GetStatus(w)=Sww,∃w∈W]]>或GetStatus(d)=Sdw,∃d∈D,]]>則不能終止案例,結(jié)束;否則轉(zhuǎn)第二步;第二步將案例的狀態(tài)置為完稱狀態(tài),即SetStatus(i)=Sif;3°客戶機(jī)簽辦任務(wù)設(shè)c是案例i中的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d’是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合,則客戶機(jī)c簽辦任務(wù)的調(diào)度方法如下第一步若gc中的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束;第二步若gc中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則轉(zhuǎn)第三步;否則轉(zhuǎn)第四步;第三步將gc中的每一個工作w設(shè)置為否定狀態(tài),即SetStatus(w)=Swn,w∈W;對于每一個w,若其所屬任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D′,結(jié)束;否則結(jié)束;第四步對于gc中的任一個d,若其處于待簽狀態(tài),則將d的客戶機(jī)設(shè)置為c,即SetCliet(d)=c,則轉(zhuǎn)第六步;否則將d的客戶機(jī)設(shè)置為空值null,即SetClient(d)=null,并轉(zhuǎn)第五步;第五步若d所屬任務(wù)’t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)’t和其每一個工作’w及每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉(zhuǎn)發(fā)d設(shè)置為完成狀態(tài),每一個工作w設(shè)置為完成狀態(tài),并將每一個工作w的客戶機(jī)設(shè)置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W;若gc中仍有轉(zhuǎn)發(fā)d處于待簽或否定狀態(tài),即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第四步;否則轉(zhuǎn)第七步;第七步若任務(wù)t處于就緒狀態(tài),即GetStatus(t)=Str,則將任務(wù)t設(shè)置為在辦狀態(tài),即SetStatus(t)=Stw;第八步客戶機(jī)c辦理gc中的任一個工作w;第九步若工作w辦理完畢,則將工作w設(shè)置為完成狀態(tài),即SetStatus(w)=Swf;若gc中仍有處于在辦狀態(tài)的工作,即GetStatus(w)=Sww,∃w∈W,]]>則轉(zhuǎn)第八步;否則結(jié)束;4°客戶機(jī)退回任務(wù)設(shè)c是案例i中的任一客戶機(jī),gc是定義在c上的任一分組,d是分組gc中的任一轉(zhuǎn)發(fā),D是d的集合,’t是d所屬的任務(wù),d是任務(wù)’t中的任一轉(zhuǎn)發(fā),D是d的集合,’w是任務(wù)’t中的任一工作,’W是’w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務(wù),w是任務(wù)t中的任一工作,W是w的集合,d是任務(wù)t中的任一轉(zhuǎn)發(fā),D’是d’的集合,則客戶機(jī)c退回任務(wù)的調(diào)度方法如下第一步若gc中的每一個工作w都處于在辦狀態(tài),即GetStatus(w)=Sww,w∈W,則轉(zhuǎn)第二步;否則結(jié)束;第二步將gc中的每一個工作w都設(shè)置為就緒狀態(tài),即SetStatus(w)=Swr,w∈W;對于gc中的每一個工作w,若w所屬任務(wù)t的每一個工作w都處于就緒狀態(tài),即GetStatus(w)=Swr,w∈W,則將任務(wù)t設(shè)置為就緒狀態(tài),即SetStatus(t)=Str;第三步對于gc中的任一個d,若其客戶機(jī)為c,即GetClient(d)=c,則將d的客戶機(jī)設(shè)置為null,并將d設(shè)置為待簽狀態(tài),即SetClient(d)=null,SetStatus(d)=Sdw,之后轉(zhuǎn)第五步;否則將d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn,之后轉(zhuǎn)第四步;第四步若d所屬任務(wù)′t的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,并且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetClient(′w)=null,′w∈′W,則將任務(wù)′t設(shè)置為否定狀態(tài),即SetStatus(′t)=Stn;結(jié)束;5°多步任務(wù)辦理設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合,則任務(wù)t辦理過程的調(diào)度方法如下第一步若任務(wù)t的每一個工作w都處于完成或否定狀態(tài),即GetStatus(w)∈{Swf,Swn},∀·w∈W,]]>則轉(zhuǎn)第二步;否則結(jié)束;第二步若任務(wù)t的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,∀·w∈W,]]>則將任務(wù)t和任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之后轉(zhuǎn)第七步;否則轉(zhuǎn)第三步;第三步對于t中的任一個w,若w處于否定狀態(tài),則將w設(shè)置為完成狀態(tài),將w的客戶機(jī)設(shè)置為空值null,將與w處于同一分組gc中的每一個工作w和每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之后轉(zhuǎn)第四步;否則轉(zhuǎn)第五步;第四步對于任一個′d,若′d所屬任務(wù)′t處于否定狀態(tài),即GetStatus(′t)=Stn,則將任務(wù)′t和任務(wù)′t的每一個轉(zhuǎn)發(fā)′d設(shè)置為完成狀態(tài),即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D;第五步若任務(wù)t有工作w處于否定狀態(tài),即GetStatus(w)=Swn,∃w∈W,]]>則轉(zhuǎn)第三步;否則轉(zhuǎn)第六步;第六步將任務(wù)t設(shè)置為完成狀態(tài),即SetStatus(t)=Stf,∃w∈W;]]>計算任務(wù)t的每一個轉(zhuǎn)發(fā)d的轉(zhuǎn)發(fā)條件,若結(jié)果為真,即PreCondition(d)=True,則將轉(zhuǎn)發(fā)d設(shè)置為待簽狀態(tài),即SetStatus(d)=Sdw;否則將轉(zhuǎn)發(fā)d設(shè)置為否定狀態(tài),即SetStatus(d)=Sdn;第七步對于任一個d,若其所屬分組gc’中的所有轉(zhuǎn)發(fā)d處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)置為否定狀態(tài),即SetStatus(w′)=Swn,w′∈W′;第八步對于任一個w′,若其所屬任務(wù)t’中的所有工作w′處于否定狀態(tài),即GetStatusS(w′)=Swn,w′∈W′,則將任務(wù)t’和任務(wù)t’的所有轉(zhuǎn)發(fā)d′設(shè)置為否定狀態(tài),即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′;結(jié)束;6°多步任務(wù)重辦設(shè)t是案例中的任一任務(wù),w是任務(wù)t的任一工作,W是w的集合,c是負(fù)責(zé)辦理工作w的客戶機(jī),gc是定義在客戶機(jī)c上的任一分組,’d是分組gc中的任一轉(zhuǎn)發(fā),’D是’d的集合,’t是’d所屬的工作,’w是任務(wù)’t的任一工作,’W是’w的集合,’d是’t的任一轉(zhuǎn)發(fā),’D是’d的集合,w是分組gc中的任一工作,W是w的集合,d是任務(wù)t的任一轉(zhuǎn)發(fā),D是d的集合,c’是d所屬的客戶機(jī),gc’是定義在客戶機(jī)c’上的任一分組,d是分組gc’中的任一轉(zhuǎn)發(fā),D是d的集合,w’是分組gc’中的任一工作,W’是w’的集合,t’是w’所屬的任務(wù),w’是任務(wù)t’中的任一工作,W’是w’的集合,d’是t’的任一轉(zhuǎn)發(fā),D’是d’的集合,則客戶機(jī)c重辦任務(wù)t的調(diào)度方法如下第一步若任務(wù)t處于在辦狀態(tài),即GetStatus(t)=Stw,或任務(wù)t處于完成狀態(tài)且任務(wù)t沒有轉(zhuǎn)發(fā),即GetStatus(t)=Stf& Count(D)=0,或任務(wù)t處于完成狀態(tài)且任務(wù)t的每一個轉(zhuǎn)發(fā)d都處于待簽或否定狀態(tài),即GetStatus(t)=Stf& GetStatus(d)∈{Sdw,Sdn},d∈D,則轉(zhuǎn)第二步;否則結(jié)束;第二步對于任一個d,若其所屬分組gc’中的每一個轉(zhuǎn)發(fā)d都處于否定狀態(tài),即GetStatus(d)=Sdn,d∈D,則將分組gc’中的所有工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′,之后轉(zhuǎn)第三步;否則轉(zhuǎn)第四步;第三步對于任一個w′,若其所屬任務(wù)t’處于否定狀態(tài),則將任務(wù)t’和任務(wù)t’的每一個轉(zhuǎn)發(fā)d′設(shè)置為就緒狀態(tài),即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′;第四步將任務(wù)t和任務(wù)t要重辦的工作w設(shè)置為在辦狀態(tài),并將任務(wù)t的每一個轉(zhuǎn)發(fā)d設(shè)置為就緒狀態(tài),即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D;對于任一個d,若其所屬分組gc’中有工作w′處于否定狀態(tài),即GetStatus(w′)=Swn,∃w′∈W′,]]>則將分組gc’中的每一個工作w′設(shè)置為就緒狀態(tài),即SetStatus(w′)=Swr,w′∈W′;第五步若任務(wù)t有處于完成狀態(tài)的工作w,且w的客戶機(jī)為null,即GetStatus(w)=Swf& GetClient(w)=null,∃w∈W,]]>則將w設(shè)置為否定狀態(tài),即SetStatus(w)=Swn;第六步對于t中的任一個w,若w所屬分組gc中的每一個工作w都處于否定狀態(tài),即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉(zhuǎn)發(fā)′d設(shè)置為否定狀態(tài),即SetStatus(′d)=Sdn,′d∈′D;第七步對于任一個′d,若其所屬任務(wù)′t處于完成狀態(tài),且任務(wù)′t的每一個工作′w的客戶機(jī)都為空值null,即GetStatus(′t)=Stf& GetClient(′w)=null,′w∈′W,則將任務(wù)′t和任務(wù)′t的每一個工作′w都設(shè)置為否定狀態(tài),即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W;第八步客戶機(jī)c重辦工作w;第九步若工作w辦理完畢,則將工作w設(shè)置為完成狀態(tài),即SetStatus(w)=Swf,結(jié)束;否則轉(zhuǎn)第八步;7°啟動循環(huán)設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則啟動循環(huán)的調(diào)度方法如下若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于就緒狀態(tài),即w∈L &GetStatus(w)=Sww& GetStatus(L)=Slr,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slw;否則結(jié)束;8°終止循環(huán)設(shè)L為案例i的任一循環(huán),w是循環(huán)路徑上的任一工作,則終止循環(huán)的調(diào)度方法如下若工作w屬于循環(huán)L且工作w處于在辦狀態(tài)且循環(huán)L處于運(yùn)行狀態(tài),即w∈L&GetStatus(w)=Sww& GetStatus(L)=Slw,則將循環(huán)L設(shè)置為運(yùn)行狀態(tài),即SetStatus(L)=Slf;否則結(jié)束。
全文摘要
本發(fā)明公開了一種用于工作流引擎的多任務(wù)協(xié)同調(diào)度方法,構(gòu)建多任務(wù)協(xié)同方法的計算模型——多步任務(wù)協(xié)同網(wǎng),這是一個四元組N=(C,T;W,D)按照充分必要條件構(gòu)造,多任務(wù)調(diào)度包括啟動案例、終止案例、客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)八個調(diào)度方法。在多任務(wù)調(diào)度之前,案例和所有的工作、任務(wù)、轉(zhuǎn)發(fā)、循環(huán)都被初始化為就緒狀態(tài)。啟動案例是第一個被執(zhí)行調(diào)度,客戶機(jī)簽辦任務(wù)、客戶機(jī)退回任務(wù)、多步任務(wù)辦理、多步任務(wù)重辦、啟動循環(huán)和終止循環(huán)是根據(jù)多步任務(wù)協(xié)同網(wǎng)的流向,包括正向和逆向,終止案例調(diào)度是根據(jù)工作和轉(zhuǎn)發(fā)的狀態(tài)由系統(tǒng)自動調(diào)度。本發(fā)明實現(xiàn)多步任務(wù)的正向和逆向調(diào)度。
文檔編號G06F9/46GK1728165SQ200510042888
公開日2006年2月1日 申請日期2005年7月4日 優(yōu)先權(quán)日2005年7月4日
發(fā)明者胡飛虎 申請人:西安交通大學(xué), 西安龍舟科技有限責(zé)任公司