目录
参考资料
-
太多折叠了
基本认知
https://www.bilibili.com/video/BV1Wf4y1879C?p=6&vd_source=30a65f4c49a9b7fc7ffd31190ecd1814
https://segmentfault.com/a/1190000038391838
https://segmentfault.com/a/1190000038547236
全面介绍
https://blog.csdn.net/vbirdbest/category_11524623.html
别人的项目
https://blog.csdn.net/lty13142/article/details/119644401
https://blog.51cto.com/u_3423936/2769732
监听器
https://blog.csdn.net/zx110503/article/details/119669169
https://blog.csdn.net/vbirdbest/article/details/121843160
子流程
https://monday.blog.csdn.net/article/details/122204140
会签
https://blog.csdn.net/vbirdbest/article/details/122030104
资料
介绍
简单来说就是针对搭建工作流业务,传统做法是建各种表,然后写mapper、service、controller实现业务
现在别人搞了一个引擎,配置好后这个引擎自己建表、维护表,提供各种API让程序员可以在service快速实现业务
一般做企业的软件,各种审批流程软件,即BPM软件,就是写工作流
详细说明
首先要搞懂BPMN,这是用来描述流程的文件,可以理解为java的类文件,工作流引擎基于此构建流程
下面说说众多工作流引擎中,开源引擎Activity的环境部署,基于IDEA+mysql说明
搭建好开发环境后,就简单的实现一个基础的,各个环节写死的demo,也就是没有用流程变量的那种
基于普通maven工程,没有使用spring boot
之前的基础操作,每个环节的负责人都是写死的,而且流程没有分支,无法实现逻辑判断后将流程推到不同节点
可以使用流程变量作为占位符,这样每个流程实例中,各个节点的负责人就可以是可变的,根据具体需求传入参数即可,也可以根据流程变量的值,让工作流引擎自动进行逻辑判断,将流程推到不同节点
之前的基础操作,流程推送到下一个节点时,会给指定负责人发送提示
但有时候需要一种类似接任务的工作流,节点A将流程实例推到节点B后,不指定特定人选,一定权限范围内的人均可以看到这个任务,当其中一个人接受任务后,其他人就不需要再去关注这个流程实例
可以使用候选者组功能实现这个需求
如果需要工作流实现“且”逻辑,就需要使用网关
如果希望工作流某个节点可以开启新的工作流,并等待新工作流完成后再继续执行后续操作,可以使用子流程
如果某个任务,负责人A做不了主或者暂时处理不了,可以将流程委派给其他人B,此时任务名义上还是A的,实际执行是B,当B完成任务后,流程会回到A,等待A确认并推进到后续节点
之前的任务负责人Assignee
都是一个,而任务可以有多个人有权限审批,只要其中有一部分人完成审批任务就算整个任务完成。同一个任务需要多个负责人来完成被称之为“会签”。 会签就是一种投票
,满足投票人数就过。
如果希望工作流自动给相关人员发送流程审批的通知提醒,并且不在配置流程时手动添加,不侵入到流程操作的过程,影响流程执行,那可以使用监听器,对工作流进全流程监听
最后说说spring boot项目中,上面的一切操作有哪些省略的地方
Activiti7使用步骤
-
部署activiti
activiti包含一系列jar包,因此需要把业务系统和activiti的环境集成在一起进行部署
-
定义流程
使用activiti的建模工具定义业务流程
.bpmn
文件就是画出业务流程
-
部署流程定义
使用activiti提供的API把流程定义文件
.bpmn
存储到数据库中 -
启动流程实例(processinstance)
基于
.bpmn
文件定义好的流程,开启一个流程实例可以看成基于java的一个类创建了一个对象
-
用户查询待办任务(task)
现在系统的业务流程都交给了activiti管理,通过activiti就可以查询当前流程执行到哪个步骤了。当前用户需要办理哪些任务也就同样可以由activiti帮我们管理,开发人员不需要自己编写sql语句进行查询
就是使用taskService提供的函数,查询当前操作系统的用户有哪些任务
-
用户办理任务
就是把当前流程节点对应的任务完成后,调用taskService提供的函数,将流程传给下一个流程节点的负责人
-
流程结束
当任务办理完成,没有下一个任务节点后,这个流程实例就执行完成了,就像多线程下,某个线程的任务完成了,就会关闭线程