1.流程图
step2的相关配置
2.监听类
package com.knife.testActivity;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class Process2Listener implements TaskListener {
@Override
public void notify(DelegateTask paramDelegateTask) {
// TODO Auto-generated method stub
System.out.println("############task create ... "+paramDelegateTask.getAssignee());
}
}
package com.knife.testActivity;
import java.util.Map;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class Process4Listener implements TaskListener {
@Override
public void notify(DelegateTask paramDelegateTask) {
// TODO Auto-generated method stub
System.out.println("############task complete ... "+paramDelegateTask.getAssignee());
Map<String,Object> map2 = paramDelegateTask.getVariables();
for(String key:map2.keySet())
System.out.println(key+" "+map2.get(key));
}
}
3.
package com.knife.testActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest2 {
@Autowired
ProcessEngine processEngine;
public String createDeployment(String name,String resource) {
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.name(name)
.addClasspathResource(resource).deploy();
System.out.println("部署ID:" + deployment.getId());// 1
System.out.println("部署时间:" + deployment.getDeploymentTime());
ProcessDefinition process=processEngine.getRepositoryService() // 获取service
.createProcessDefinitionQuery() // 创建流程定义查询
.deploymentId(deployment.getId()).singleResult();
System.out.println("流程定义ID:" + process.getId());// 1
return process.getId();
}
public Task getTask(String pid,String user) {
Task task = processEngine.getTaskService().createTaskQuery().processDefinitionId(pid).taskAssignee(user).singleResult();
if(task!=null) {
System.out.println(task.getId()+":"+task.getName() + ":" + task.getAssignee());
}else {
System.out.println(user+" 不存在");
}
return task;
}
public String startProcessByPid(String pid,String user) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("user", user);
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(pid,map);
return processInstance.getId();
}
@Test
public void test1() {
String name = "myProcess2";
String user = "boss";
String pid = createDeployment(name, "process/MyProcess2.bpmn");
System.out.println("############部署流程:"+pid);
startProcessByPid(pid,user);
System.out.println("############开启流程进入step1");
Task step1 = getTask(pid,user);
HashMap<String, Object> map = new HashMap<>();
List<String> userlist = new ArrayList<String>();
userlist.add("aaa");
userlist.add("bbb");
userlist.add("ccc");
map.put("users", userlist);
map.put("looptime", userlist.size());
System.out.println("############指定多个用户 进入step2");
processEngine.getTaskService().complete(step1.getId(), map);
List<Task> tasklist = processEngine.getTaskService().createTaskQuery().processDefinitionId(pid).list();
for(Task task:tasklist) {
System.out.println(task.getId()+":"+task.getName() + ":" + task.getAssignee());
}
System.out.println("############每个用户单独提交");
for(String user1:userlist) {
Task step2 = getTask(pid,user1);
if(step2!=null) {
HashMap<String, Object> map1 = new HashMap<>();
map1.put("condition", user1+" ok");
processEngine.getTaskService().complete(step2.getId(), map1);
}
}
System.out.println("############所有用户提交完成 进入step3");
tasklist = processEngine.getTaskService().createTaskQuery().processDefinitionId(pid).list();
for(Task task:tasklist) {
System.out.println(task.getId()+":"+task.getName() + ":" + task.getAssignee());
Map<String,Object> map2 = task.getProcessVariables();
for(String key:map2.keySet())
System.out.println(key+" "+map2.get(key));
}
}
}
4.测试结果
部署ID:c53b5305-518d-11eb-bc27-b0fc365d7a1f
部署时间:Fri Jan 08 16:44:50 CST 2021
流程定义ID:myProcess2:22:c56e22d7-518d-11eb-bc27-b0fc365d7a1f
############部署流程:myProcess2:22:c56e22d7-518d-11eb-bc27-b0fc365d7a1f
############开启流程进入step1
c580725b-518d-11eb-bc27-b0fc365d7a1f:step1:boss
############指定多个用户 进入step2
############task create ... aaa
############task create ... bbb
############task create ... ccc
c59496ac-518d-11eb-bc27-b0fc365d7a1f:step2:aaa
c595810e-518d-11eb-bc27-b0fc365d7a1f:step2:bbb
c5958110-518d-11eb-bc27-b0fc365d7a1f:step2:ccc
############每个用户单独提交
c59496ac-518d-11eb-bc27-b0fc365d7a1f:step2:aaa
############task complete ... aaa
condition aaa ok
nrOfActiveInstances 3
loopCounter 0
looptime 3
user aaa
users [aaa, bbb, ccc]
nrOfCompletedInstances 0
nrOfInstances 3
c595810e-518d-11eb-bc27-b0fc365d7a1f:step2:bbb
############task complete ... bbb
condition bbb ok
nrOfActiveInstances 2
loopCounter 1
looptime 3
user bbb
users [aaa, bbb, ccc]
nrOfCompletedInstances 1
nrOfInstances 3
c5958110-518d-11eb-bc27-b0fc365d7a1f:step2:ccc
############task complete ... ccc
condition ccc ok
nrOfActiveInstances 1
loopCounter 2
looptime 3
user ccc
users [aaa, bbb, ccc]
nrOfCompletedInstances 2
nrOfInstances 3
############所有用户提交完成 进入step3
c5d19fb3-518d-11eb-bc27-b0fc365d7a1f:step3:null