任务的完成有三个方法,在此选其一进行分析。
首先是通过activiti引擎自带的任务处理服务taskService调用complete方法,直接看其具体实现,如下:
使用的命令模式直接执行CompleteTaskCmd中的execute方法
标注1是传入的变量,比如动态传入的处理人,多实例节点的集合元素等,标注2是具体的任务处理操作,继续跟踪,如下图:
标注1为开启事件,标注2为向流程人员表act_ru_identitylink中插入数据,如下:
标注3为调度任务完成事件,标注4为删除掉运行时任务表act_ru_task中的数据,标注5为向下个待办的跳转,继续追踪。
标注1获取当前节点的ActivityImpl对象,标注2根据节点behavior继续向下流转,标注3调度事件,继续跟踪标注2流转部分,如下:
继续向下流转
标注1为判断是不是补偿器【当勾选用户任务里面的是否补偿后,此节点称之为补偿器,只有当边流程中有界补偿事件或者中间补偿事件才生效】,标注2为单实例的流转,标注3为多实例的流转,这里继续跟踪单实例的情况。

继续往下走
首先判断当前节点是不是中间捕获事件,如果不是先调度取消定时任务事件,然后继续向下流转
标注1为获取默认流,标注2为获取当前节点的所有流出,标注3为计算线上的条件,将为真的放入集合
标注1流出线只有一条时执行take方法,标注2流出线有多条时执行takeAll方法,标注3为没有流出线时,标注3的具体内容见下图:

标注1当默认流不为空时,流转到默认流,否则有两种情况,当节点为补偿器的时候执行标注2部分,不然说明整个流程已经结束,没有流出执行标注3,下面跟踪当有一条线的时候take的具体实现

执行原子操作,这部分是引擎流转通用部分,可参见:activiti发起流程实例源码分析
到此完成整个任务的处理与流转到下个节点的操作,有啥疑问可留言一起讨论哈。