1.概念

image.png
上面有很多任务,但其中最常用的就是第一个-用户任务。

image.png
- 执行人就是当前的处理人
- 候选人就是一堆人,多个人逗号隔开
- 候选组 可以理解为用户组
- 任务到期时间:一个时间,到了之后就会执行下一个逻辑,相当于定时器,例如:请假流程到班主任,到期时间3天,如果3天班主任都没有审批,就认为可以执行拒绝的操作。
2.执行任务实战
-
我们首先创建一个新的审核流程,从开始先到老师然后到校长的最后结束的一个流程,因为在IDEA的插件BPMActiviti,我发现没法保存,所以用了另外一种方式做了bpmn的流程,大家可以参考这个系列的专门讲 如果使用bpmnjs的一个帖子。
image.png
做好之后我们就可以像之前的步骤一样,首先部署创建流程,然后再创建一个流程实例,下面就直接贴出图片供参考了:

image.png
然后是创建流程实例的代码:
//初始化流程实例
@Test
public void initProcessInstance(){
//1.你的业务数据生成之后,这条业务的id就是bkey
//2.然后将流程数据与业务数据进行关联
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("task_process1","b-key001");
System.out.print("流程实例id:"+processInstance.getProcessInstanceId());
}
做完之后就可以在数据库中查看我们创建的数据了:

image.png

image.png
- 那么现在我们就可以查询任务列表和属于相应人员的任务:
//任务查询
@Test
public void findTasks(){
List<Task> list = taskService.createTaskQuery().list();
for(Task task:list){
System.out.println("id:"+task.getId());
System.out.println("name:"+task.getName());
System.out.println("assignee:"+task.getAssignee());
}
}
// 查询自己的任务
@Test
public void findTasksByAssignee(){
List<Task> list = taskService.createTaskQuery().taskAssignee("老师").list();
for(Task task:list){
System.out.println("id:"+task.getId());
System.out.println("name:"+task.getName());
System.out.println("assignee:"+task.getAssignee());
}
}
第一个任务是到老师那儿,我们查询到老师的任务id之后,试下完成任务的接口:
// 执行任务
@Test
public void completeTask(){
taskService.complete("db1ccfd8-8803-11eb-b37e-8eeb3d902084");
System.out.println("执行完成任务");
}
之后在人员表中就多了校长的信息了:

image.png

image.png
然后下一步我们在使用校长任务的id,再次执行完成,在看数据库会发现这三个表的数据都没了,最后是到历史表了。

image.png
3.拾取任务实战
拾取任务是需要多个候选人的,所以我们得再画一个BPMN的流程图:

image.png
其中候选人写的是两个id

image.png
拾取任务是使用claim方法,第一个参数是任务id,第二个任务是userid,归还候选任务是setAssignee,意思就是设置办理人,如果为null则意味着重新把任务交给了候选人,如果设置为人,则相当于交办任务了。
// 拾取任务
@Test
public void claimTask(){
taskService.claim("a02364ff-8a46-11eb-b158-acde48001122","wang");
//归还候选任务
taskService.setAssignee("a02364ff-8a46-11eb-b158-acde48001122",null);
//交办任务
taskService.setAssignee("a02364ff-8a46-11eb-b158-acde48001122","li");
}
