Activiti任务分配
一.个人任务分配
1.个人任务分配方式一(直接指定办理人)
流程图
流程部署并启动
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("个人任务");//添加部署名称
builder.addClasspathResource("personalTask1.bpmn");
builder.addClasspathResource("personalTask1.bpmn");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
//可根据id、key、message启动流程
runtimeService.startProcessInstanceByKey("myProcess_person1");
// runtimeService.startProcessInstanceById("");
// runtimeService.startProcessInstanceByMessage("");
}
使用办理人(张三)查询任务
/**
* 查看任务
* TaskService
*/
@Test
public void queryTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "张三";
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
执行任务
/**
* 办理任务
*/
@Test
public void handleTask() {
TaskService taskService = processEngine.getTaskService(); //根据上一步生成的taskId执行任务
String taskId = "165004";
/* Map map=new HashMap();
map.put("money",800);//选择分支
taskService.complete(taskId,map);*/
taskService.complete(taskId);
}
2.个人任务分配方式二(流程变量)
流程图
部署流程
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("个人任务");//添加部署名称
builder.addClasspathResource("personalTask1.bpmn");
builder.addClasspathResource("personalTask1.bpmn");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
启动流程并设置办理人
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
Map map=new HashMap();
map.put("userName","小白");//这里的userName就是流程图${userName}指定的变量名
runtimeService.startProcessInstanceByKey("myProcess_personal2",map);
}
办理人(小白)查询任务
@Test
public void queryTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "小白";
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
办理人(小白)执行任务(参照个人任务分配方式一)
3.个人任务分配方式三(类)
编辑类
@SuppressWarnings("serial")
public class TaskListenerImpl implements TaskListener {
//用来指定任务办理人
@Override
public void notify(DelegateTask delegateTask) {
delegateTask.setAssignee("小黑");
}
}
流程图
部署流程并启动
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("个人任务");//添加部署名称
builder.addClasspathResource("personalTask3.bpmn");
builder.addClasspathResource("personalTask3.png");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_personal3");
}
办理人(小黑)查询任务
@Test
public void queryTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "小黑";
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
办理人(小黑)执行任务(参照个人任务分配方式一)
4.认领任务(可以把任务从一个人转到另一个人)
把小黑的任务转给小蓝
@Test
public void setAssigneeTask(){
TaskService taskService = processEngine.getTaskService();
taskService.setAssignee("190004","小蓝");
}
二.组任务分配
1.组任务分配方式一(直接指定办理人)
流程图
组成员之间用英文半角逗号隔开
部署流程并启动
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("组任务");//添加部署名称
builder.addClasspathResource("groupTask.bpmn");
builder.addClasspathResource("groupTask.png");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_group");
}
组成员查询组任务(小张,小李,小王)
组成员都可以查询到任务
@Test
public void queryGroupTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "小李";
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
执行任务
@Test
public void handleTask() {
TaskService taskService = processEngine.getTaskService(); //根据上一步生成的taskId执行任务
String taskId = "207504";
taskService.complete(taskId);
}
2.组任务分配方式二(流程变量)
流程图
部署流程并启动
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("组任务");//添加部署名称
builder.addClasspathResource("groupTask2.bpmn");
builder.addClasspathResource("groupTask2.png");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
Map map=new HashMap();
map.put("userIds","一一,二二,三三");//这里的userName就是流程图${userName}指定的变量名
runtimeService.startProcessInstanceByKey("myProcess_group2",map);
// runtimeService.startProcessInstanceByKey("myProcess_group");
}
任务组办理人查询任务
@Test
public void queryGroupTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "二二";
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
3.组任务分配方式三(类)
编辑类
@SuppressWarnings("serial")
public class GroupTaskListenerImpl implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
delegateTask.addCandidateUser("大大");
delegateTask.addCandidateUser("小小");
delegateTask.addCandidateUser("中中");
}
}
流程图
部署流程并启动
/**
* 发布流程
* RepositoryService
*/
@Test
public void deployProcess() {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
builder.name("组任务");//添加部署名称
builder.addClasspathResource("groupTask3.bpmn");
builder.addClasspathResource("groupTask3.png");
Deployment deployment = builder.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
/**
* 启动流程
* <p>
* RuntimeService
*/
@Test
public void startProcess() {
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_group3");
}
任务组办理人查询任务
@Test
public void queryGroupTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "中中";
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
4.组任务常用方法
组成员查询组任务
@Test
public void queryGroupTask() {
TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "小李";
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
for (Task task : tasks) {
System.out.println("taskId:" + task.getId());
System.out.println("taskName:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("---------------------------------------------------------------------");
}
}
查询正在执行的组任务成员
@Test
public void findGroupUser(){
String taskId = "207504";
List<IdentityLink> identityLinksForTask = processEngine.getTaskService()
.getIdentityLinksForTask(taskId);
for (IdentityLink identityLink: identityLinksForTask ) {
System.out.println(identityLink.getTaskId()+" "+identityLink.getUserId()+" "+identityLink.getProcessInstanceId()+" "+identityLink.getType());
}
}
查询历史组任务所有办理人
@Test
public void findHistroy(){
String processInstanceId = "207501";//流程实例ID
List<HistoricIdentityLink> historicIdentityLinksForProcessInstance = processEngine.getHistoryService()
.getHistoricIdentityLinksForProcessInstance(processInstanceId);
for (HistoricIdentityLink historicIdentityLink: historicIdentityLinksForProcessInstance ) {
System.out.println(historicIdentityLink.getTaskId()+" "+historicIdentityLink.getUserId()+" "+historicIdentityLink.getProcessInstanceId()+" "+historicIdentityLink.getType());
}
}
将组任务分配给个人
@Test
public void groupTaskToPerson(){
String userId="马六";
String taskId = "207504";
processEngine.getTaskService().claim(taskId,userId);
}
将个人任务退回给组任务
@Test
public void groupTaskToPerson2(){
String taskId = "207504";
processEngine.getTaskService().setAssignee(taskId,null);
}
向组任务中添加(删除)办理人
@Test
public void addPersonToGroup(){
String taskId = "207504";
String userId="小李";
//添加
processEngine.getTaskService()
.addCandidateUser(taskId,userId);
//删除
processEngine.getTaskService()
.deleteCandidateUser(taskId,userId);
}
来源:CSDN
作者:桀骜浮沉
链接:https://blog.csdn.net/weixin_45742032/article/details/104493202