集成序言:
其它商业版的工作流引擎,我这里就不一一诉说了,用过才知道好坏,要不技术过硬各种资料查查查,要不金钱开道请商务入驻。但是Activiti系列网上的资料确实是最多的,毕竟市场占有率摆在那。
Activiti7相对前面几个版本,优缺点我就不概述了,这些可以自行百度,首先7的表结构和代码整理,就是一个大版本,这些都是隐性的。对照到最大的显性变化,可能就是推出了微流程的实现。但是这些和我们只是单纯工具使用者来说,压根不受影响,最起码80%的api调用方式还是依照之前版本的方式,总之大的变动不明显,小的优化一堆堆。这也是作者想用新技术的原因,就贪了那点性能。
产品思路方向:
按照传统的集成方式无非就是: 通用的后端微服务引擎+通用的业务表单设计器+通用的前端回显表单内容的组件+专属的bpmn流程模型设计器+外部用户权限系统;这几者的关系很容易理解,就是字面意思。
- 首先你得实现适合自己公司ui界面的模型设计器,在设计器里需要集成bpmn的规范,如果有条件,还能集成外部用户权限系统到里面,这样就方便画流程的时候更方便的编写各种网关条件和设置默认的节点负责人。
- 接着要实现一套通用的业务表单设计器api,能让用户通过前端页面操作,可以快速的构造出一张业务表单,该表单记录着该业务的基础信息,并且需同时记录该业务表的全部属性信息,方便后期回显给前端。
- 然后要实现一套通用的前端回显表单内容的组件,前端通过后端返回的业务表数据(业务表基础数据+业务表属性信息),回显表单给用户查看。这一块市面是有很多类似组件,比如FormMaking。
- 最后就是核心的流程运转了,这一部分就是外部用户权限系统+通用的后端微服务引擎合作部分了。配置人员画好A流程,配置好A业务表单,然后就将A流程与A业务表单进行绑定,用户通过回显的A表单填写A业务数据,最后调取外部用户权限系统分配下一节点负责人,再点击同意或者拒绝使流程运转到下一步。
写道这里,想必对于集成这玩意已经有想法了把。大的方向就这4点,其中2,3可以不实现前端部分,自己后端写死就行了,唯一的麻烦就是缺少了动态配置的优点,集成者自己可以权衡选择。
activiti7的坑:
1,想集成必须看源码,开发者丧心病狂的在各大Service中强行植入了Security,常规方式是不可能绕过的,除非改源码。但是对于玩jwt+redis那一套的人,其实Security的存在并不重要。再加上微服务的架构盛行,集成之前肯定是已存在用户系统了,所以只需要考虑如何对接外部用户系统就够了,而这也是集成的核心。
2,既然被强行植入了Security,但是我确实不需要他,那么该怎么排除它并集成外部独立用户系统,再加上ACTIVITI内部的用户组系的干扰?你没看错,是完全排除,不是伪排除,网上很多都是伪排除的方式。
3,既然被强行植入了Security,但是我的外部用户权限系统本来就用的Security,那么该怎么集成?自己去写中间层转换把,把自己的Security用户角色体系写一个配置类,启动的时候塞到Activiti7的Security体系中。
4,Activiti7的代码被优化整理过,部分api和service产生了变动,导致以前的调用方式产生了错误。至于正确的调用的方式?比如流程会签,动态分配,自由跳转,进度坐标添加说明展示等核心功能。
5,如果你是初学者,哪怕你看视频学会了基本操作,但是涉及到具体业务后,你会发现通过你学的基本操作再去构造各个API是多么费力的一件事,因为对它的理解并不深刻,所以在构造API的时候往往缺少了通用性,这是初学者不可避免的问题。
集成(请认真看图片标红文字,你能想到的功能其实全都有):
先看一下源码目录结构,其中状态引擎放到最后讲,因为他是一套独立的流程引擎,和activiti没有任何关系。但是对于简单流程却很实用!如果不想集成activiti7的话。
看红色箭头的注解就能理解了,本人按照上诉的产品思路已经完成了那些模块。至于通用的表单回显和设计器,我也只是实现非常简陋的,目前只有回显。这一块就需要强大的前端功底了,如果没有这个条件,就前端写死把,反正后端数据是规整的。
后端架构为: SpringBoot2.3.2.RELEASE+SpringCloudAlibaba(nacos,dubbo)+redis,Jwtt+tkmybatis+mysql8,很常规的一套微服务架构
项目初衷是为了实现一套新架构的用户权限系统+流程引擎+表单引擎+服务器运维+开发工具的系统,是对自己多年工作经验的总结,也是对开源社区新技术的求知实践。
架构选型SpringCloud Alibaba系列组件,目前该脚手架的第一版与第二版都已稳定运行在生产环境中,而第三版仍在继续深耕优化。架构设计整体清晰,强调低耦合,低引用,用最少的体量去实现业务场景,充分利用已有资源。
基于整体架构:
重写全部出入参的数据类型序列化与反序列化规范,通过封装的工具统一格式化形成类似伪报文的restful概念。重写继承的方式扩展了validator系列参数校验与转换的规则,通过封装的定制化标签实现参数的期望值转换。重写扩展spring-schedules系列,使其能实现定时任务增删改查的功能,减少外部定时任务插件的依赖。
基于业务场景:
丰富redis+jwt的安全认证体系,通过封装请求头,校验域名,校验签名串,颁发token的方式进行常规的请求校验,通过token携带的角色,数据范围进行接口鉴权的请求校验。
丰富了拦截器错误与页面错误响应规范,区分不同的开发环境,定制统一格式话的报警提示。
丰富orm数据访问层体系,通过封装sqlsession后提供5大泛型API,并与扩展单表Mapper组件,强行约束了数据库访问规范,保证sql调用的来源统一,并为后期sql拦截,分析,耗时业务场景留下余地。
丰富了常用接口aop插件,其中包括接口数据加解密,RateLimiter限流,鉴权,检查ip,检查重复提交,token放行,签名串放行,自动数据分页等。
丰富了与微信的交互功能,其中包括公众号/小程序扫码登陆,解析用户数据,支付,消息推送等功能。
丰富了不同开发场景下的单体与微服务之间的切换功能,并扩展附件上传功能为本地/远程/压缩多种优化方式。
丰富了服务器运维与开发工具相关api,其中包括获取服务器内存,cpu,jvm等软件件信息,代码生成,自动建表等开发工具。平台日志,接口日志,接口频率监控,系统最近一周用户情况,与服务健康检查等功能。
基于开源activiti7,实现了微服务版的流程引擎设计与表单设计。
全部模块都是通过API网关聚合集成到了前端ui里,ui集成过程中考虑到仅仅用作演示,所以后台api都是经过处理的,缩小了范围。正式集成的时候,可以改动下查询条件,扩大查询范围。下面看一看前端效果
以上就是activiti7的集成到实现的一系列效果了。是不是很解耦,集成者不需要太懂activiti,只要看得懂我写的api就行了,也就20多个吧,就能实现这一套东西了,并且还安全可靠不踩坑。
下面再来讲一讲状态引擎,状态引擎适合简单流程的实现,逻辑也很清晰,这套实现是我基于上一家公司产品,自己取其精华动手实现的。效果还是很不错的,流程走向也清晰。
介绍完毕!看到最后,有兴趣的朋友可以加我QQ群121837392,咨询源码事宜。
暂时演示环境:https://yj.whpyinfo.com:8065
或
暂时演示环境:https://projectview.top
微信小程序扫码后,不要刷新浏览器,等待3秒左右web端自动登陆,默认只能查看流程相关菜单。
源码提供的功能包括二方面:
1,黑盒操作,运行起来后,通过给与指定参数调取对应api,即可让画好的流程顺利运行下去。比如新开发一个报销流程,只需要通过源码提供的画图工具画好流程图,并导入流程引擎中,之后就是常规的启动,运行等一些列api的调用,直至流程运行结束,这中间都是不需要改动任何源码的,因为源码中的api都是朝着通用性设计的,真正实现零开发对接业务系统。
2,白盒操作,自己根据情况,适当的在api种增删改查自己的业务逻辑。因为api写的很具有层次感,所以只要阅读后,看名字也知道什么意思,改动起来难度不大。
最后提醒一下,我是个人开发者,拥有多年的工作流开发经验,源码本身也是作者断断续续历时一年的时间打磨而成,不可能让你白嫖的拿去的,这不现实。