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

查看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”的這種方式來(lái)實(shí)現(xiàn)設(shè)置一組候選人
1.3、組任務(wù)
1.3.1、組任務(wù)辦理流程
- a、查詢組任務(wù)
指定候選人,查詢?cè)摵蜻x人當(dāng)前的待辦任務(wù)。
候選人不能立即辦理任務(wù)。
- b、拾取(claim)任務(wù)
該組任務(wù)的所有候選人都能拾取。
將候選人的組任務(wù),變成個(gè)人任務(wù)。原來(lái)候選人就變成了該任務(wù)的負(fù)責(zé)人。
如果拾取后不想辦理該任務(wù)?
需要將已經(jīng)拾取的個(gè)人任務(wù)歸還到組里邊,將個(gè)人任務(wù)變成了組任務(wù)。
- c、查詢個(gè)人任務(wù)
查詢方式同個(gè)人任務(wù)部分,根據(jù)assignee查詢用戶負(fù)責(zé)的個(gè)人任務(wù)。
- d、辦理個(gè)人任務(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("流程實(shí)例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)樽约旱膫€(gè)人任務(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、 查詢個(gè)人待辦任務(wù)
查詢方式同個(gè)人任務(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("流程實(shí)例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、 辦理個(gè)人任務(wù)
同個(gè)人任務(wù)辦理
/**
* 完成個(gè)人任務(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ù)
如果個(gè)人不想辦理該組任務(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é)人來(lái)處理
/**
* 任務(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ù)庫(kù)表操作
查詢當(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è)置了候選人,會(huì)向該表插入候選人記錄,有幾個(gè)候選就插入幾個(gè)
與act_ru_identitylink對(duì)應(yīng)的還有一張歷史表act_hi_identitylink,向act_ru_identitylink插入記錄的同時(shí)也會(huì)向歷史表插入記錄。任務(wù)完成
以上就是Activiti進(jìn)階之組任務(wù)實(shí)現(xiàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Activiti進(jìn)階組任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java使用BeanUtils.copyProperties踩坑經(jīng)歷
最近在做個(gè)項(xiàng)目,踩了個(gè)坑特此記錄一下,本文主要介紹了使用BeanUtils.copyProperties踩坑經(jīng)歷,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Java8新特性之空指針異常的克星Optional類的實(shí)現(xiàn)
這篇文章主要介紹了Java8新特性之空指針異常的克星Optional類的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
IntelliJ Idea 2017注冊(cè)碼免費(fèi)激活方法
IDEA 全稱 IntelliJ IDEA,是Java語(yǔ)言開發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具之一。下面給大家介紹IntelliJ Idea 2017注冊(cè)碼免費(fèi)激活方法,需要的朋友參考下2018-01-01

