在 activiti 的历史表 act_hi_taskinst 中,主要用来记录流程实例的相关信息,当创建一个流程实例之后,这个表就记录这个流程所对应的所有任务以及审批结果,当获取审批记录的时候查询这个表是个不错的选择(act_ru_task 表和 act_ru_execution 表也可以获取到流程的相关信息,但是如果流程实例因为某个审批环节驳回或者整个流程走完,这时候就找不到实例的信息了,在需要使用历史表查询记录的时候,注意对工作流进行配置,避免操作没有保存到历史表中)。
在审批环节中,主要有以下几种场景:
1、流程走完,任务全部完成
2、流程没走完,中途驳回申请,删除流程
3、流程没走完,中途某个节点还在审批中
针对上述情况,可以通过 act_hi_taskinst 表的某些属性来确定。
1、当全部任务都完成了,这时候 act_hi_taskinst 表中相同 PROC_INST_ID(同一个流程实例)的 ACT_TYPE_ 字段记录的值包含startEvent、userTask、endEvent。
2、当流程没走完,因为某个节点审批不通过删除流程实例的,相同 PROC_INST_ID(同一个流程实例)的 ACT_TYPE_ 字段记录的值只有startEvent、userTask。(如果某个节点因为不通过申请,调用删除实例的接口有携带删除说明,DELETE_REASON 属性也有对应的值,而任务通过并没有)
3、流程没走完,中途某个节点还在审批中,这时候相同 PROC_INST_ID(同一个流程实例)的 ACT_TYPE_ 字段记录的值只有startEvent、userTask,并且待审批的任务的 END_TIME 属性为空,表示还没有记录操作的时间。