Activiti進(jìn)階之組任務(wù)實現(xiàn)示例詳解
1.組任務(wù)
1.1、需求
在流程定義中在任務(wù)結(jié)點的 assignee 固定設(shè)置任務(wù)負(fù)責(zé)人,在流程定義時將參與者固定設(shè)置在.bpmn 文件中,如果臨時任務(wù)負(fù)責(zé)人變更則需要修改流程定義,系統(tǒng)可擴(kuò)展性差。
針對這種情況可以給任務(wù)設(shè)置多個候選人,可以從候選人中選擇參與者來完成任務(wù)。
1.2、設(shè)置任務(wù)候選人
在流程圖中任務(wù)節(jié)點的配置中設(shè)置 candidate-users(候選人),多個候選人之間用逗號分開。

查看bpmn文件
<userTask activiti:candidateUsers="lisi,wangwu" activiti:exclusive="true" id="_3" name="經(jīng)理審批"/>
我們可以看到部門經(jīng)理的審核人已經(jīng)設(shè)置為 lisi,wangwu 這樣的一組候選人,可以使用
activiti:candiateUsers=”用戶 1,用戶 2,用戶 3”的這種方式來實現(xiàn)設(shè)置一組候選人
1.3、組任務(wù)
1.3.1、組任務(wù)辦理流程
- a、查詢組任務(wù)
指定候選人,查詢該候選人當(dāng)前的待辦任務(wù)。
候選人不能立即辦理任務(wù)。
- b、拾取(claim)任務(wù)
該組任務(wù)的所有候選人都能拾取。
將候選人的組任務(wù),變成個人任務(wù)。原來候選人就變成了該任務(wù)的負(fù)責(zé)人。
如果拾取后不想辦理該任務(wù)?
需要將已經(jīng)拾取的個人任務(wù)歸還到組里邊,將個人任務(wù)變成了組任務(wù)。
- c、查詢個人任務(wù)
查詢方式同個人任務(wù)部分,根據(jù)assignee查詢用戶負(fù)責(zé)的個人任務(wù)。
- d、辦理個人任務(wù)
1.3.2、 查詢組任務(wù)
根據(jù)候選人查詢組任務(wù)
/**
* 查詢組任務(wù)
*/
@Test
public void test03(){
String key = "evection1";
String candidateUser = "lisi";
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskCandidateUser(candidateUser)
.list();
for (Task task : list) {
System.out.println("流程實例Id:" + task.getProcessInstanceId());
System.out.println("任務(wù)ID:" + task.getId());
System.out.println("負(fù)責(zé)人:" + task.getAssignee());
System.out.println("任務(wù)名稱:" + task.getName());
}
}
1.3.3 、 拾取組任務(wù)
候選人員拾取組任務(wù)后該任務(wù)變?yōu)樽约旱膫€人任務(wù)。
/**
* 候選人 拾取任務(wù)
*/
@Test
public void test04(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
String taskId = "72505";
// 候選人
String userId = "lisi";
// 拾取任務(wù)
Task task = taskService.createTaskQuery()
.taskId(taskId)
.taskCandidateUser(userId) // 根據(jù)候選人查詢
.singleResult();
if(task != null){
// 可以拾取任務(wù)
taskService.claim(taskId,userId);
System.out.println("拾取成功");
}
}
1.3.4、 查詢個人待辦任務(wù)
查詢方式同個人任務(wù)查詢
@Test
public void test03(){
String key = "evection1";
String candidateUser = "lisi";
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processDefinitionKey(key)
//.taskCandidateUser(candidateUser)
//.taskCandidateOrAssigned(candidateUser)
.taskAssignee(candidateUser)
.list();
for (Task task : list) {
System.out.println("流程實例Id:" + task.getProcessInstanceId());
System.out.println("任務(wù)ID:" + task.getId());
System.out.println("負(fù)責(zé)人:" + task.getAssignee());
System.out.println("任務(wù)名稱:" + task.getName());
}
}
1.3.5、 辦理個人任務(wù)
同個人任務(wù)辦理
/**
* 完成個人任務(wù)
*/
@Test
public void test05(){
String taskId = "72505";
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
taskService.complete(taskId);
System.out.println("完成任務(wù):" + taskId);
}
1.3.6、 歸還組任務(wù)
如果個人不想辦理該組任務(wù),可以歸還組任務(wù),歸還后該用戶不再是該任務(wù)的負(fù)責(zé)人
/**
* 歸還任務(wù)
*/
@Test
public void test06(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
String taskId = "75002";
String userId= "zhangsan";
Task task = taskService.createTaskQuery()
.taskId(taskId)
.taskAssignee(userId)
.singleResult();
if(task != null){
// 如果設(shè)置為null,歸還組任務(wù),任務(wù)沒有負(fù)責(zé)人
taskService.setAssignee(taskId,null);
}
}
1.3.7、 任務(wù)交接
任務(wù)負(fù)責(zé)人將任務(wù)交給其他負(fù)責(zé)人來處理
/**
* 任務(wù)交接
*/
@Test
public void test07(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
String taskId = "75002";
String userId= "zhangsan";
Task task = taskService.createTaskQuery()
.taskId(taskId)
.taskAssignee(userId)
.singleResult();
if(task != null){
// 設(shè)置該任務(wù)的新的負(fù)責(zé)人
taskService.setAssignee(taskId,"趙六");
}
}
1.3.8、 數(shù)據(jù)庫表操作
查詢當(dāng)前任務(wù)執(zhí)行表
SELECT * FROM act_ru_task
任務(wù)執(zhí)行表,記錄當(dāng)前執(zhí)行的任務(wù),由于該任務(wù)當(dāng)前是組任務(wù),所有assignee為空,當(dāng)拾取任務(wù)后該字段就是拾取用戶的id
查詢?nèi)蝿?wù)參與者
SELECT * FROM act_ru_identitylink
任務(wù)參與者,記錄當(dāng)前參考任務(wù)用戶或組,當(dāng)前任務(wù)如果設(shè)置了候選人,會向該表插入候選人記錄,有幾個候選就插入幾個
與act_ru_identitylink對應(yīng)的還有一張歷史表act_hi_identitylink,向act_ru_identitylink插入記錄的同時也會向歷史表插入記錄。任務(wù)完成
以上就是Activiti進(jìn)階之組任務(wù)實現(xiàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Activiti進(jìn)階組任務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java的super關(guān)鍵字與instanceof運算符使用方法
這篇文章主要介紹了Java的super關(guān)鍵字與instanceof運算符使用方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
使用Spring Security OAuth2實現(xiàn)單點登錄
在本教程中,我們將討論如何使用Spring Security OAuth和Spring Boot實現(xiàn)SSO - 單點登錄。感興趣的朋友跟隨小編一起看看吧2019-06-06
Eclipse運行android項目報錯Unable to build: the file dx.jar was not
今天小編就為大家分享一篇關(guān)于Eclipse運行android項目報錯Unable to build: the file dx.jar was not loaded from the SDK folder的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

