需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与者来完成任务
设置候选人:画图
候选人 采用Candidate Users字段设置 多人使用逗号隔开
画完图之后,部署,然后启动流程实例,提交zhangsan的任务,接下来的看代码注释吧
代码语言:javascript复制package com.itheima.test;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class ActivitiGroupTest {
ProcessEngine processEngine;
TaskService taskService;
String candidateUser = "lisan";
static String KEY = "holiday";
@Before
public void init() {
processEngine = ProcessEngines.getDefaultProcessEngine();
taskService = processEngine.getTaskService();
}
/**
* 部署流程定义
*/
@Test
public void deployment(){
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("pic/holidayGroup.bpmn")
.addClasspathResource("pic/holidayGroup.png")
.name("请假流程")
.deploy();
System.out.println(deploy);
}
/**
* 启动流程实例
*/
@Test
public void startProcessInstance(){
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ActivitiGroupTest.KEY);
System.out.println(processInstance);
}
/**
* 查询组任务
*/
@Test
public void queryGroupTask() {
queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
System.out.println(task);
});
}
/**
* 用户拾取组任务
*/
@Test
public void claimTask() {
queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
taskService.claim(task.getId(), candidateUser);
System.out.println(candidateUser "用户拾取了[" task.getName() "]任务");
});
}
/**
* 用户归还组任务
*/
@Test
public void unClaimTask(){
queryTaskByCandidateUser(null, candidateUser, true).forEach(task -> {
taskService.setAssignee(task.getId(),null);
System.out.println(candidateUser "用户丢弃了[" task.getName() "]任务");
});
}
/**
* 用户任务交接,委托
*/
@Test
public void toAssignee(){
queryTaskByCandidateUser(null,candidateUser,true).forEach(task -> {
taskService.setAssignee(task.getId(),"lisi");
System.out.println(candidateUser "用户将[" task.getName() "]任务交接给了lisi用户");
});
}
/**
* 查询并处理自己的任务
*/
@Test
public void queryCompletTask() {
queryTaskByCandidateUser(null, "lisi", true).forEach(task -> {
taskService.complete(task.getId());
System.out.println(candidateUser "处理了[" task.getName() "]任务");
});
}
/**
* 根据候选人查询任务
*
* @param candidateUser 候选人
* @param assignee 指定人
* @param isAssignee 是否是指定人
* @return 任务列表
*/
public List<Task> queryTaskByCandidateUser(String candidateUser, String assignee, Boolean isAssignee) {
TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(ActivitiGroupTest.KEY);
if (isAssignee) {
taskQuery.taskAssignee(assignee);
} else {
taskQuery.taskCandidateUser(candidateUser);
}
return taskQuery.list();
}
}
作者:彼岸舞
时间:2020 9 6
内容关于:Activiti工作流
本文来源于网络,只做技术分享,一概不负任何责任