網(wǎng)站建設(shè)與制作報價百度代理公司
1、Candidate-users候選人
1.1、需求
在流程定義中在任務(wù)結(jié)點的assignee固定設(shè)置任務(wù)負(fù)責(zé)人,在流程定義時將參與者固定設(shè)置在.bpmn文件中,如果要臨時變更任務(wù)負(fù)責(zé)人則需要修改流程定義,系統(tǒng)擴(kuò)展性很差,針對這種情況,我們可以給任務(wù)設(shè)置多個候選人,從候選人中選擇參與者來完成任務(wù)
1.2、設(shè)置任務(wù)候選人
2、組任務(wù)辦理流程
第一步:查詢組任務(wù)
指定候選人,查詢該候選人當(dāng)前的待辦任務(wù)
候選人不能辦理任務(wù)
第二步:拾取(claim)任務(wù)
該組任務(wù)的所有候選人都能拾取
將候選人的組任務(wù),變成個人任務(wù),原來的候選人就變成了該任務(wù)的負(fù)責(zé)人
如果拾取后不想辦理該任務(wù)
需要將已經(jīng)拾取
第三步:查詢個人任務(wù)
查詢方式同個人任務(wù)部分,根據(jù)assignee查詢用戶負(fù)責(zé)的個人任務(wù)
第四步:辦理個人任務(wù)
3、關(guān)鍵代碼
3.1、部署及啟動
@Test
public void deployProcess04() {
? ? // 流程部署
? ? Deployment deploy = repositoryService.createDeployment()
? ? ? ? ? ? .addClasspathResource("process/jiaban04.bpmn20.xml")
? ? ? ? ? ? .name("請假申請流程")
? ? ? ? ? ? .deploy();
? ? System.out.println(deploy.getId());
? ? System.out.println(deploy.getName());
?
? ? ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("jiaban04");
? ? System.out.println(processInstance.getId());
}
3.2、查詢組任務(wù)
@Test
public void findGroupTaskList() {
? ? //查詢組任務(wù)
? ? List<Task> list = taskService.createTaskQuery()
? ? ? ? ? ? .taskCandidateUser("zhangsan01")//根據(jù)候選人查詢
? ? ? ? ? ? .list();
? ? for (Task task : list) {
? ? ? ? System.out.println("----------------------------");
? ? ? ? System.out.println("流程實例id:" + task.getProcessInstanceId());
? ? ? ? System.out.println("任務(wù)id:" + task.getId());
? ? ? ? System.out.println("任務(wù)負(fù)責(zé)人:" + task.getAssignee());
? ? ? ? System.out.println("任務(wù)名稱:" + task.getName());
? ? }
}
3.3、拾取組任務(wù)
@Test
public void claimTask(){
? ? //拾取任務(wù),即使該用戶不是候選人也能拾取(建議拾取時校驗是否有資格)
? ? //校驗該用戶有沒有拾取任務(wù)的資格
? ? Task task = taskService.createTaskQuery()
? ? ? ? ? ? .taskCandidateUser("zhangsan01")//根據(jù)候選人查詢
? ? ? ? ? ? .singleResult();
? ? if(task!=null){
? ? ? ? //拾取任務(wù)
? ? ? ? taskService.claim(taskId, "zhangsan01");
? ? ? ? System.out.println("任務(wù)拾取成功");
? ? }
}
張三01拾取任務(wù)了,張三02就不能拾取了
3.4、 查詢個人待辦任務(wù)
查詢方式同個人任務(wù)查詢
@Test
public void findGroupPendingTaskList() {
? ? //任務(wù)負(fù)責(zé)人
? ? String assignee = "zhangsan01";
? ? List<Task> list = taskService.createTaskQuery()
? ? ? ? ? ? .taskAssignee(assignee)//只查詢該任務(wù)負(fù)責(zé)人的任務(wù)
? ? ? ? ? ? .list();
? ? for (Task task : list) {
? ? ? ? System.out.println("流程實例id:" + task.getProcessInstanceId());
? ? ? ? System.out.println("任務(wù)id:" + task.getId());
? ? ? ? System.out.println("任務(wù)負(fù)責(zé)人:" + task.getAssignee());
? ? ? ? System.out.println("任務(wù)名稱:" + task.getName());
? ? }
}
3.5、 辦理個人任務(wù)
同個人任務(wù)辦理
@Test
public void completGroupTask() {
? ? Task task = taskService.createTaskQuery()
? ? ? ? ? ? .taskAssignee("zhangsan01") ?//要查詢的負(fù)責(zé)人
? ? ? ? ? ? .singleResult();//返回一條
? ? taskService.complete(task.getId());
}
3.6、歸還組任務(wù)
如果個人不想辦理該組任務(wù),可以歸還組任務(wù),歸還后該用戶不再是該任務(wù)的負(fù)責(zé)人
@Test
public void assigneeToGroupTask() {
? ? String taskId = "d96c3f28-825e-11ed-95b4-7c57581a7819";
? ? // 任務(wù)負(fù)責(zé)人
? ? String userId = "zhangsan01";
? ? // 校驗userId是否是taskId的負(fù)責(zé)人,如果是負(fù)責(zé)人才可以歸還組任務(wù)
? ? Task task = taskService
? ? ? ? ? ? .createTaskQuery()
? ? ? ? ? ? .taskId(taskId)
? ? ? ? ? ? .taskAssignee(userId)
? ? ? ? ? ? .singleResult();
? ? if (task != null) {
? ? ? ? // 如果設(shè)置為null,歸還組任務(wù),該 任務(wù)沒有負(fù)責(zé)人
? ? ? ? taskService.setAssignee(taskId, null);
? ? }
}
3.7、 任務(wù)交接
任務(wù)交接,任務(wù)負(fù)責(zé)人將任務(wù)交給其它候選人辦理該任務(wù)
@Test
public void assigneeToCandidateUser() {
? ? // 當(dāng)前待辦任務(wù)
? ? String taskId = "d96c3f28-825e-11ed-95b4-7c57581a7819";
? ? // 校驗zhangsan01是否是taskId的負(fù)責(zé)人,如果是負(fù)責(zé)人才可以歸還組任務(wù)
? ? Task task = taskService
? ? ? ? ? ? .createTaskQuery()
? ? ? ? ? ? .taskId(taskId)
? ? ? ? ? ? .taskAssignee("zhangsan01")
? ? ? ? ? ? .singleResult();
? ? if (task != null) {
? ? ? ? // 將此任務(wù)交給其它候選人zhangsan02辦理該 任務(wù)
? ? ? ? taskService.setAssignee(taskId, "zhangsan02");
? ? }
}
?