组任务
组任务的存在是指定给特定的一批人去操作任务,例如班长审核,既可以是正班长,也可以是副班长,但是并没有指定某一个人,只要符合条件的都可以去拾取任务,然后完成任务。
a.查询组任务
String assignee = "wang";
String definitionKey = "calssAsk";
String taskId = "e8714d9d-8148-11eb-8ede-e0d55e485056";
// 任务查询
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionKey(definitionKey)
.taskCandidateUser(assignee).list();
b.拾取/归还任务
拾取任务的本质将任务负责人指定为拾取人,归还任务的本质是将任务负责人置为空。
// 拾取任务
taskService.claim(taskId,"wang");
// 归还任务
taskService.setAssignee(taskId,null);
c.变更任务负责人
变更任务负责人本质是转办,将任务指定给办理人为负责人。
// 变更负责人
taskService.setAssignee(taskId,"chen");
d.完成任务
完成任务与之前一样。
String assignee = "wang";
String definitionKey = "calssAsk";
// 查询任务
Task task = taskService.createTaskQuery()
.taskAssignee(assignee)
.processDefinitionKey(definitionKey)
.singleResult();
// 完成任务
taskService.complete(task.getId());
网关
网关的目的是为了控制流程流向,它可以提供更精细的流程控制。
a.排它网关
当执行到排它网关时,会进行条件判断,如果为true,则会执行该分支。
注意:只会执行一个条件为true的分支,如果几个条件都为true,会执行id值较小的分支。
为什么使用排它网关?
排它网关能实现的通过条件判断一样可以实现,为什么需要采用排它网关?
使用连线条件判断:如果条件判断不满足任何一种条件,该流程直接结束(异常结束)
使用排它网关:抛出系统异常,方便定位解决。
例:填写班费使用申请的时候,花费超过100需要班长审批,不足100需要生活委员审批,就可以使用排它网关。
b.并行网关
分支:
为每一个流程都创建一个分支,且都会运行。即使定义了条件,系统也会忽略。
汇聚:
所有分支全部操作完成,才会进行到下一步。每个流程的最终结果汇聚到一起。
例:填写班费使用申请的时候,花费需要班长与生活委员同时审批同意才能走到下一步,可以使用并行网关。
c.包含网关
具有排它网关与并行网关共同的性质,既会判断条件进入流程,也会在分支汇聚点等待汇聚完成后进入下一个节点。
例如,一次申请费用超过100,需要班长与生活委员审批,不超过100需要生活委员与副班长审批,这种需求可以使用包含网关。
d.事件网关
什么是事件网关?
基于事件的网关,允许基于事件做选择。
事件网关的执行原理?
网关的每一条出口顺序流,都需要连接至一个捕获中间事件。当流程执行到达基于事件的网关时,网关类似等待状态地动作:执行被暂停。并且,为每一条出口顺序流,创建一个事件订阅。流程的走向完全是由于中间事件的选择。而由哪一个事件来决定流程的走向则是由最先触发的事件来决定的。
事件网关和其他网关的区别
请注意基于事件的网关,其出口顺序流与一般的顺序流不同。这些顺序流从不实际被执行。相反,它们允许流程引擎决定,当执行到达一个基于事件的网关时,需要订阅什么事件。
1.定时器事件
到达网关执行一个定时任务,通过cron表达式配置周期执行条件。
2.消息事件
在流程定义里面定义一个消息事件,并在消息事件里面去引用。
3.信号事件
在流程里面定义新增一个信号引用,并在信号事件里面引用。