Activiti 工作流會簽開發設計思路

2021-08-27 02:45:22 字數 2613 閱讀 6122

activiti 工作流會簽開發設計思路

在流程業務管理中,任務是通常都是由乙個人去處理的,而多個人同時處理乙個任務,這種任務我們稱之為會簽任務。這種業務需求也很常見,如乙個請款單,領導審批環節中,就需要多個部門領導簽字。在流程業務中,我們可以把每個領導簽字的環節都定義為任務,但若這樣,這個流程業務有一點是固定的,就是簽批人是固定的。而任務是由乙個領導簽完再到另一領導,當然也可以由多個領導同時簽字。

傳統的用流程業務來解決可以採用以下的做法:

序列會簽

並行會簽

前者在流程業務中,叫序列會簽,也即是由乙個領導簽完再至另一領導籤。後者我們稱之為並行會簽,表示幾個領導同時進行簽發,而不清楚最終是誰先簽。

以上的解決方式有兩大業務需求下是不能滿足的,若會簽的領導不是固定的,即可以由上一任務審批人提交前隨意進行選擇,另一種是對於會簽業務中,要求若其中一部分領導審批通過,即直接往下走,不需要全部領導進行審批。另外,對於這種情況下,統計最終領導會簽的結果也是比較困難的,即對審批單的意見是同意還是否決沒有辦法清楚。以上兩種業務需求也是很常見的日常需求,但我們若採用了固定的流程節點,則不能實現。在這裡,可以採用activiti的節點多例項來處理,以上流程則可以簡化為下:

何謂多工例項節點?在activiti5上的解析則為動態的多工節點,可以根據傳入的動態人員數進行動態生成任務。生成的任務數則不固定,可以進行並行會簽,也可以進行序列會簽。會簽任務最終是否需要往下執行,由會簽設定的規則來進行約束。如我們可以常規去設定「一票通過」、「一票否決」、「少數服務多數」等會簽規則。因此,我們需要在會簽節點上繫結我們的設計規則。會簽規則設定介面如下:

通過會簽設計規則,可以清楚最終會簽人員的投票結果。其資料結構如下所示:

會簽任務的定義本身已經由activiti來實現了,但需要動態傳入動態的人員數

$

其中,issequential為true則為序列會簽,若為false則為並行會簽,而activiti:collection可以來自我們spring容器中的介面及方法,表示獲取會簽使用者集合,taskuserassignservice.getsignuser(execution)。其獲取會簽的使用者值來自兩個方面,乙個在介面中指定的會簽人員,另乙個在後台會簽節點上配置的人員。

後台會簽節點人員設定

任務審批面上選擇下一任務會簽人員

為完成會簽的條件signcomplete.iscomplete(execution),可以在這裡根據我們的會簽規則及目前的會簽情況,決定會簽是否完成。其實現如下所示:

最終實現邏輯:

@override

public boolean iscomplete(activityexecution execution)

//更新會簽節點的狀態。

bpmprostatusdao.updstatus(actinstid, nodeid,status);

//清除會簽使用者。

taskuserassignservice.clearsignuser();

} return iscompleted;

}/**

* 根據會簽規則計算投票結果。

** 1.如果會簽規則為空,那麼需要所有的人同意通過會簽,否則不通過。

* 2.否則按照規則計算投票結果。

*

* @param bpmnodesign 會簽規則

* @param actinstid 流程例項id

* @param nodeid 節點id名稱

* @param completecounter 迴圈次數

* @param instanceofnumbers 總的會簽次數。

* @return

*/private voteresult calcresult(bpmnodesign bpmnodesign,string actinstid,string nodeid,integer completecounter,integer instanceofnumbers)

//投同意票數

integer agreevotescounts=tasksigndataservice.getagreevotecount(actinstid, nodeid);

//沒有設定會簽規則

//(那麼得全部會簽通過才通過,否則不通過)

if(bpmnodesign==null)

//投票已經全部完成

else if(completecounter.equals(instanceofnumbers))

}//按反對票數進行決定

else

//投票已經全部完成

else if(completecounter.equals(instanceofnumbers))

}} //按絕對票數投票

else

//投票已經全部完成

else if(completecounter.equals(instanceofnumbers))

}//按反對票數進行決定

else

//投票已經全部完成

else if(completecounter.equals(instanceofnumbers))

}} return voteresult;

}  

activiti工作流會簽功能的實現

邏輯實現 1 設定乙個變數signcount 如果同意,signcount 1 如果是會簽流程 list task tasks taskservice.createtaskquery taskname 會簽部門 processinstanceid processinstanceid list 如果是...

智遙工作流 會簽與多人審批區別

在智遙工作流中會簽和多人審批很相似,都需要多個人進行審批,有些人弄不懂之間的區別 多人審批 1.使用者在轉下一步的時候,可選擇多人審批 2.必須所有人同意才能往下轉 3.只要其中乙個人退回,流程就退回了,還未審批的人,無需再審批 會簽 1.使用者選擇轉會簽後,所有人都必須進行審批,無論是同意還是不同...

智遙工作流 會簽與多人審批區別

在智遙工作流中會簽和多人審批很相似,都需要多個人進行審批,有些人弄不懂之間的區別 多人審批 1.使用者在轉下一步的時候,可選擇多人審批 2.必須所有人同意才能往下轉 3.只要其中乙個人退回,流程就退回了,還未審批的人,無需再審批 會簽 1.使用者選擇轉會簽後,所有人都必須進行審批,無論是同意還是不同...