1. 组任务
同一个任务,一组人都可以查看,其中只有一个人可以申请到该任务进行处理(其他人员看不到该任务),如果过程中不想处理了,
可以将任务退回,这样组内其他人员可再次看到该任务,进行任务申请
1.1 创建流程图并设置任务候选人
1.2 部署流程
//流程部署
@Test
public void deployment(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService对象进行流程部署
RepositoryService repositoryService = processEngine.getRepositoryService();
//进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("holiday/holidaygroup.bpmn") //加载流程文件
.addClasspathResource("holiday/holidaygroup.png")
.name("请假流程-组任务审批") //设置流程名称
.deploy(); //部署
//输出部署信息
System.out.println("流程名称:"+deployment.getName());
System.out.println("流程ID:"+deployment.getId());
System.out.println("流程Key:"+deployment.getKey());
}
1.3 启动流程实例
//启动一个流程实例
@Test
public void getInstance(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取Runtime
RuntimeService runtimeService = processEngine.getRuntimeService();
//设置流程变量
Holiday holiday=new Holiday();
holiday.setNum(3);
Map<String,Object>map=new HashMap<>();
map.put("holiday",holiday);
//启动一个流程实例
ProcessInstance holidaygroup = runtimeService.startProcessInstanceByKey("holidaygroup", map);
System.out.println("流程实例name:"+holidaygroup.getName());
}
2. 组任务代办任务流程
2.1 查询组任务,但是不能执行
//提交任务
@Test
public void commitTask(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("tingting").singleResult();
//处理任务
taskService.complete(task.getId());
}
2.2 查看数据库
2.3 查询组任务
//查询组任务
@Test
public void getGropTask(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService
TaskService taskService = processEngine.getTaskService();
//查询组任务
List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser("mayuan").list();
for (Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务处理人:"+task.getAssignee());
}
}
2.4 查看控制台效果 此时三个用户都可以查看到任务
没有任务处理人为null说明当前任务 没有 人拾取
2.5 拾取任务 当任务被拾取后其他角色是看不到任务的
/**
* 拾取任务
*/
@Test
public void claimTask() {
//获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//获取组任务
String candidateUser="zhuyuan";
Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser(candidateUser).singleResult();
//不等于Null代表能够获取到该任务
if(task!=null){
//拾取任务 任务ID,任务执行人
taskService.claim(task.getId(),candidateUser);
System.out.println("任务被:"+candidateUser+"拾取~");
}
}
2.6 查看数据库 任务表
2.7 查看任务
/**
* 查看任务
*/
@Test
public void getTask() {
//获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("zhuyuan").singleResult();
//处理任务
if(task!=null){
taskService.complete(task.getId());
System.out.println("任务处理完毕");
}
}
2.8 当 一个角色拾取任务后不想处理时会进行退回任务操作
/**
* 任务退回/交接
*/
@Test
public void taskReturn(){
//获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("huaixin").singleResult();
if(task!=null){
//任务退回 任务ID null代表没有处理人执行,需要后续再次拾取任务
//任务交接 任务ID 如果第二个参数,处理人不为空代表将该任务交给次处理人
taskService.setAssignee(task.getId(),"wangnan");
System.out.println("任务退回");
}
}
2.9 查看数据库任务表