企业级工作流解决方案(一)--总体介绍

  引言:国内对于流程引擎的介绍非常的少,但是不能否认流程引擎的重要性,流程引擎在各个行业都有应用,OA管理的请假流程、出差流程,项目管理上的合同审批流程、验收流程、启动流程,Erp中的采购流程、入库出库流程,政府里面的招标流程、结算流程等,都有流程引擎的身影,当然这里说的流程指审批意义的流程,还有一些不用人为参与的生产作业生产过程也是可以用工作流来解决的。

  工作了多年,是时候把工作中的一些东西沉淀下来,准备写一系列文章,系统的介绍企业级工作流管理平台的搭建以及设计思路,希望能对其他人有所帮助。这一系列文章基础技术的介绍会比较少一些,多偏向于设计思路以及方案的选型,有问题还请指正。

  先来一张总体的架构设计图

技术方案选型:

  微服务通信采用DotNetty,请求答复消息采用Json-Rpc 2.0格式标准定义,参照了surging的设计,去掉了服务注册,负载均衡等内容,地址:https://github.com/dotnetcore/surging

  基础组件采用的是Abp这套基础组件,这套开发框架出来了多年,社区活跃度一直都比较高,基本上是比较成熟了,国内也有很多文章介绍,大家可以在园子里面找,我这边的做法是把源码下载下来,改成自己的组件,扩展了一些功能,另外,全部舍去他里面zero这套东西。

  流程引擎这块,其实有三种方案选择,第一种就是本文要介绍的自已搭建,基于微软的WWF工作流开发平台来做设计开发的,第二种就是拿开源的流程引擎来改造,但我看了一下,开源的比较优秀的也不多,学习成本也非常之大,第三种就是花钱买别人的,比如K2,再做二次开发,同样学习成本也不小,还要花钱。

  流程引擎设计时采用的Devexpress这套UI工具,把WWF设计器集成到了Winform里面,自定义了各种活动设计界面。

  流程运行时采用WWF运行时持久化这套机制,真正的执行逻辑放到自定义活动里面,流程跟踪采用raphael这个js组件来根据流程运行时数据动态画出来的。

  前端框架采用ng-alain,也就是angular这个方向,工作流管理表单加载用angular动态创建组件实现。

  权限系统这块,没有用abp zore这套了,前端也没有用,自己设计,前端集成到ng-alain。

  关于自定义表单说明,自定义表单已经做了部分设计,参照着k2的smart form来做,这套东西太强大了,主要是ng-alain前端框架对组件的封装并不能满足各种自定义的需求,所以需要对他们做二次封装。目前依赖于Xml格式的表单定义,表单每个字段的权限控制可以在流程引擎里面配置。地址:https://help.k2.com/onlinehelp/K2smartforms/UserGuide/4.7/default.htm#What_is_K2_smartforms.html%3FTocPath%3D_____1

架构说明

操作系统层

        因为.net core不包含wwf,因此,工作流定义时和运行时服务都必须宿主到windows平台下,除去与工作流相关的,其他库都是用的.net standard开发的,可以选择部署到linux平台。

基础设施层

        数据库可以选择Sql Server或者Mysql,数据访问采用的是frameworkcore封装的,整个系统多租户支持,读写分离支持。系统中用到了比较多的缓存,缓存部分可以流行的nosql实现。微服务传输通信用的是dotnetty。

基础组件层

        基础组件就是用abp这套东西,对里面的配置管理、消息通知、权限认证、验证、Uow访问这块做了修改,增强了部分功能。另外还包括对微服务组件的封装。

应用服务层

        应用服务里面的权限系统和基础服务的作用就相当于abp zero的作用,权限数据全部存储到缓存中,因为这部分数据更新频率低,访问量大。流程管理服务封装了业务系统与流程引擎之间的交互,如果第三方系统要与流程引擎对接,也是参照这套封装来做。流程定义时和运行时服务都是与工作流相关的,.net framework平台。业务系统插件就是具体业务所在的位置。

服务宿主层

        中小型应用,一般把流程定义时和流程运行时宿主到一个Host,其他所有服务宿主在一起,不同的服务之间调用,走微服务调用这块流程,大型的应用可以把服务拆分开来部署,服务与服务之间的调用可以加nginx做负载均衡。

展现层

        ng-alain这套前端开发框架,重写了里面的拦截器和用户认证与abp对接,工作流设计时工具是winform实现的,用于流程定义管理。Mobile暂时没有实现,准备用ng-alain系列实现。

用户层

        流程定义一般由系统开发人员或者经过培训的系统管理员来定义,一般不是由用户来做。

第三方访问

        第三方接入主要是调用工作流运行时提供的接口,可以参考工作流管理服务实现思路。

系列文章大致目录

微服务

      总体架构介绍

      消息处理模型之服务端处理

      消息处理模型之消息传输通道

      消息处理模型之与Abp集成

      Tcp消息传输模型之消息编解码

      Tcp消息传输模型之服务端处理

      Tcp消息传输模型之客户端处理

集成Abp和ng-alain

      权限系统

      权限系统服务

      用户身份认证与权限验证

      用户权限验证

      数据库读写分离

      自动化脚本

      Abp其他改造(配置功能补充、signalr消息通信)

      T4Template

工作流

      工作流实体模型

      工作流表单模型

      活动-插件模型

      工作流设计时之活动介绍

      工作流设计时之审批活动

      工作流设计时之子流程活动

      工作流设计时之流程设计器

      工作流设计时之流程定义管理

      工作流运行时之流程持久化

      工作流运行时之流程跟踪

      工作流运行时之创建流程

      工作流运行时之流程规则解析

      工作流运行时之试运行工作流

      工作流运行时之运行工作流

      工作流运行时之任务通知

      工作流运行时之流程跟踪图

      工作流管理之管理框架

      工作流管理之与业务表单交互

      工作流管理之活动保存、审批、转发、执行下一步骤审批人

      工作流管理之任务管理

      工作流管理之流程实例管理

系统截图

流程设计

任务分配规则

路由选择规则

活动表单权限规则

子流程活动定义

流程管理

流程跟踪图

流程文档

工作台及新待办通知

流程实例管理

待办邮件

接下来详细介绍,喜欢可以继续,不喜欢,则可跳过。有问题可以QQ或者邮箱交流:邮箱:061104001@163.com,QQ:523477776

 

原文地址:https://www.cnblogs.com/spritekuang/p/10805440.html