Activiti工作流开源引擎是国外组件,设计者没有考虑国内大部分中国式的流程场景,其中对于并行流程分支,单分支退回其他分支仍在运行是我们不能理解的;
我们希望看到是,并行网关流程分支中,只要有人退回,即认为总流程被退回;即某一分支退回,最终的结果是撤销总流程中所有人的待办,同时杀掉该流程进程;
以下为基本设计思路
数据库工作流相关核心表:
所有流程实例:(对应数据库中表:act_hi_procinst)
所有流程实例节点(对应数据库中表:act_hi_actinst)
所有运行任务(对应数据库中表:act_hi_taskinst)
当前运行任务(对应数据库中表:act_ru_task)
执行实例表(对应数据库中表:act_ru_execution)
并行网关退回实现思路:
1. 所有相关实例任务核心表,都有共同根实例‘PROC_INST_ID_’
2. 执行退回动作时,
a. 记录根流程实例状态;
b. 记录根实例下所有历史实例、任务状态;
c. 删除根实例下所有当前运行任务、执行实例;
参考资料:
Activiti 并行网关实现撤回功能_程序员刘先生的博客-CSDN博客
activiti之并行网关,驳回_勤奋写代码的人-CSDN博客_activiti并行网关驳回