开源源码,项目下载地址https://gitee.com/lowcode2/ailowcode.git
无代码-审批流
审批流是一种工作流,常见于中后台系统,其本质是待审信息的流动方式及决策过程。在审批流中,申请者(人或系统)提供待审信息,交由相关审批人进行传递及处理。每个审批者会基于自己的岗位职责与权限分工对待审信息进行核对、判断及协商,直至抵达最高决策层进行取舍。
无代码审批流,为了提高审批流的灵活性,使用拖拽表单来动态渲染审批页面,通过sql来指派审批者。详细使用方法,见后续介绍。
(一)操作手册
1 快速入门
点击菜单“无代码配置/审批流管理”,打开审批流管理页面;点击“创建一个空模型”打开添加对话框,可创建一条新的审批流模型,如下图所示。点击审批流行项目的 “设计[定制]”按钮,打开定制化开发的审批流设计器。点击审批流行项目的 “设计[官]”按钮,打开Activiti官方自带的审批流设计器。点击审批流行项目的 “部署”按钮,可进行流程部署。
Activiti自带设计器如下图所示。审批流技术应用的是Activiti6。具体使用方法可参考Activiti官方文档。
定制化开发的审批流设计器:主要由4个区域组成,如下图所示。图中左侧标识1是组件区,中间标识2是设计区,右侧标识3是组件属性区,顶部标识4是工具栏。
目前支持的组件有:套索工具、连接工具、开始、结束、用户任务、边界定时任务、排他网关、并行网关等组件。各组件功能,如下表所示。
组件名称 | 说明 |
套索工具 | 套索选择组件 |
连接工具 | 组件间连接工具 |
开始 | 流程执行入口 |
结束 | 流程执行结束 |
用户任务 | 用户任务是一种任务,它等待一个人来完成。在用户任务中,可以指定专门的候选用户或候选组来完成任务。 |
边界定时任务 | 在Activiti工作流引擎中,边界时间事件是一种在给定时间触发流程执行的事件。 |
排他网关 | 用来在流程中基于特定条件进行决策的节点。它会对所有入口流程进行评估,并根据条件执行对应的一个出口流程。 |
并行网关 | 用于允许多个路径并行执行。并行网关的行为取决于它如何配置以及它是如何连接到其他流程元素的。 |
定制化流程设计器,设计的目的是给部分组件,做功能扩展;比如:“用户任务”组件的属性中,支持通过“派遣SQL”来指定用户,通过“表单ID”来指定页面动态渲染的拖拽表单。如下图所示。
2. 应用案例:请假审批流
点击菜单“无代码配置/审批流管理”,打开审批流管理页面,添加一条名为“请假申请单-m2表单”的审批流项目。点击该行项目的“设计[定制]”按钮,打开审批流设计器,流程设计如下图所示。
点击选中标识1“开始”节点,右侧显示开始节点的属性栏,点击“打开设计器”,会打开拖拽表单设计器,可设计请假表单页面,如下图所示。
点击选中下图标识1“经理审批”节点,右侧显示用户任务节点的属性栏。属性栏中关键配置项有:派遣SQL 和表单ID。派遣SQL,此处配置sql为select‘${loginUserId}'as‘userId';sql中变量loginUserId是系统内置的当前登录用户ID。表单ID,此处可通过“打开设计器”来配置自定义表单;不配置的话,使用默认表单(表单中只有一个审批意见输入框)。总监审批、财务审批节点和经理审批节点一样,都是用户任务组件,参考经理审批节点配置。至此,审批流配置完成,分别点击工具栏的“保存”和“部署”按钮,完成流程部署。注意:为了测试方便,各节点的派遣SQL都使用select‘${loginUserId}'as‘userId',指定当前登录用户接收任务。
发布到待办任务:点击菜单“无代码配置/审批申请单管理”,打开审批申请单管理页面。页面中添加配置一条“请假申请单-m1待办” 记录,用于发布到待办任务,如下图所示。模型标识对应审批流管理中的模型标识。申请单模式:1,待办任务模式;2,表单模式。待办任务模式,一般是由定时任务发起,员工在待办任务中接收到任务进行处理;如员工转正申请,由定时任务查出待转正员工,针对性发起任务。表单模式,是由员工直接发起,如请假申请。此处申请单模式填写2,表示由员工直接填写请假表单,发起审批任务。
完成上述的审批申请单管理配置后,点击菜单“待办任务(无代码)/创建申请单M2表单”,打开表单模式申请单页面,如下图所示。
点击“打开表单”,可打开请假表单页面,如下图所示。该页面,首先是获取审批流设计器中“开始”节点属性中配置的拖拽表单ID,然后通过拖拽表单ID进行动态渲染显示。点击“提交申请”发起审批流程。
审批角色:经理审批。点击菜单“待办任务(无代码)/我的待办任务”,打开我的待办任务页面,如下图所示。审批任务当前在经理审批节点,点击流程图可查看出流程当前状态。
点击“审批”按钮,打开审批对话框,如下图所示。点击“审批通过”按钮,完成当前节点任务。
审批角色:总监审批。刷新我的待办任务页面,任务流转到“总监审批”节点,如下图所示。点击“审批”按钮,打开审批对话框,点击“审批通过”按钮,完成当前节点任务。
审批角色:财务审批。刷新我的待办任务页面,任务流转到“财务审批”节点,如下图所示。点击“审批”按钮,打开审批对话框,点击“审批通过”按钮,完成当前节点任务。
查看我的任务状态。点击“待办任务(无代码)/我的申请”,打开我的申请页面,点击“已结束”按钮,查看已结束的任务,如下图所示。
点击“我的申请/详细”按钮,查看任务审批详细内容,如下图所示。
3. 应用案例:员工转正审批流
敬请关注,后续补上
(二)设计研发
1. 需求分析
本系统是基于Activiti6.0的工作流平台开发,是一个以 Activiti6.0为核心的工作流引擎为基础,提供审批流设计和执行能力的平台。本系统中的流程设计器,采用定制化设计器,使流程设计,更偏向无代码应用,更简洁更灵活。
- 审批流管理:设计个审批流管理页面,可以管理系统中所有的审批流,管理功能包括:创建、编辑、删除、打开设计器、部署等功能。
- 定制化审批流设计器:区别于官方设计器,官方设计器功能很全也很复杂,定制化设计器可根据自身项目需求,做定制化开发,更简洁更灵活。定制化设计器,同样也通过拖拽组件来设计流程,各组件的属性栏可定制化开发。设计器组件包括:开始、结束、用户任务、服务任务、边界定时任务、排他网关、并行网关、子流程等。组件功能及属性栏功能如下所示:。
- 开始组件:属性栏中提供拖拽表单ID输入框,通过输入表单ID与拖拽表单关联,当发起流程时,可通过表单ID直接动态渲染出提交表单。
- 用户任务组件:当流程执行到用户任务时,会创建一个新任务,并将其加入到分配人或群组的任务列表中。属性栏中提供:派遣SQL、表单ID输入框。派遣SQL:通过查询sql,来指定派遣的用户,这样用户指派会更灵活。表单ID:通过输入表单ID与拖拽表单关联,当用户执行任务时,可通过表单ID直接动态渲染出任务审批表单页面。
- 服务任务组件:用于请求流程外部服务或者自动执行程序。属性栏中提供:表达式、代理表达式。表达式:直接调用service类的指定方法,如:${emailTestService.send(‘1’)},表示执行emailTestService类的send()方法。代理表达式:调用代理类的默认方法execute(),代理类需要实现org.activiti.engine.delegate.JavaDelegate类,配置方法如:${serviceTask},表示调用serviceTask的execute()方法。
- 边界定时任务组件:边界定时任务是一种在特定时间点或经过一定时间后触发特定行为的功能。属性栏中提供:持续时间的输入框,指定定时器之前要等待多长时间,使用ISO 8601规定的格式 (由BPMN 2.0规定)。S表示秒,M表示分,D表示天,P表示时间段,T表示精确到时间的时间段。如:PT5M:间隔5分钟,PT2H:间隔2小时,P1H:代表1小时后执行此时间定时器。
- 并行网关组件:将流程分成多条分支并行执行,也可以把多条分支汇聚在一起。
- 排他网关组件:也称为异或(XOR)网关或基于数据的排他网关,主要用于在流程中实现决策。当流程执行到这个网关时,会根据判断条件去选择执行某一条分支。排他网关只会选择一个为true的分支执行。如果有两个分支条件都为true,排他网关会选择id值较小的一条分支去执行。
- 子流程组件:子流程任务是一种特殊的流程活动,它可以包含其他的流程元素,如流程任务、流程网关、流程事件和顺序流等。子流程可以被视为一个较大的流程的组成部分,或者是一个容器,用于存放其他流程活动。
- 创建申请单:支持待办任务模式、和表单模式。待办任务模式,适合定时任务自动发起,待办人员被动接收任务进行处理,如:员工转正申请。表单模式,由任务发起者主动发起,如请假申请。提交申请单表单通过拖拽表单动态渲染。
- 我的申请:通过我的申请功能,任务发起者可以查看已发起任务的执行状态。
- 我的待办任务:参与人通过“我的待办任务”功能,查询待处理任务,并进行审批处理。审批表单通过拖拽表单动态渲染。
我的已办任务:参与人通过“我的已办任务”功能,查询自己处理过的任务。任务详细表单,是通过拖拽表单动态渲染。
2. 总体设计
审批流系统应用技术及架构:使用B/S模式,后端使用springcloud架构技术,前端使用Vue技术,前端流程画布使用bpmn-js技术。
审批流系统由:审批流管理、审批申请单管理、待办任务3个大模块组成。待办任务功能由:创建申请单M1、创建申请单M2、我的申请、我的待办任务、我的已办任务组成。系统结构如下图所示。
3. 概要设计
1) 用例设计
用例分析如下表:
用例:审批流模型设计部署用例 范围:无代码-审批流 级别:管理员 主要参与者:管理员,变通用户 涉众及其关注点: 管理员:
普通用户: 创建申请单,查看我的申请单,审批我的待办任务,查看我的已办任务。 前置条件:无。 成功保证:无。 主成功场景:
扩展:无 特殊需求:无 技术与数据变元表:无 发生频率:无。 未解决问题:无 |
2) 用例图设计
审批流子系统用例图:该系统面向管理员和普通用户。管理员可以创建审批流模型和申请单管理。审批流模型中可以进行流程设计,并对设计的流程节点配置拖拽表单。申请单管理,可以配置发布申请单M1和M2模式。普通用户可以创建申请单、查看我的申请、审批我的待办任务、查看我的已办任务等操作。用例图如下图所示.
4. 详细设计
本系统是基于Activiti6.0的工作流平台开发,是一个以 Activiti6.0为核心的工作流引擎为基础,提供审批流设计和执行能力的平台。Activiti是一个开源的审批流和业务流程管理(BPM)平台,它允许开发者通过图形界面设计业务流程,然后将流程模型转换为可执行的流程定义。
本系统中的流程设计器,采用定制化设计器,使流程设计,更偏向无代码应用,更简洁更灵活。pom.xml中导入activiti依赖包如下所示。
- 1. <dependency>
- 2. <groupId>org.activiti</groupId>
- 3. <artifactId>activiti-json-converter</artifactId>
- 4. <version>6.0.0</version>
- 5. </dependency>
- 6. <dependency>
- 7. <groupId>org.activiti</groupId>
- 8. <artifactId>activiti-spring-boot-starter-basic</artifactId>
- 9. <version>6.0.0</version>
- 10. </dependency>
1) 数据库表设计
Activiti6功能对应的基础表结构见数据库中以“act_”开头的表。本文主要介绍基于Activiti6的BPM平台,实现的动态审批流系统。数据库业务表如下:审批申请单管理表(actd_app_form)、拽表表单数据表(ttf_form)、审批节点表单表(actd_form_data);请假案例创建的自定义表:请假业务主表(tbz_leave)、请假业务从表(tbz_leave_log)。相关数据表结构如下图所示。
动态表单数据表,表名:ttf_form。作用:记录拖拽表单的数据结构,详细介绍见“无代码-拖拽表单”章节。
审批申请单管理表,表名:actd_app_form。作用:单表结构,主要是用来记录需要发布的审批流程(对应的管理菜单:无代码配置/审批申请单管理)。数据表结构信息,如下表所示。
序号 | 列名 | 数据类型 | 主键 | 非空 | 说明 |
1 | id | bigint | 是 | 是 | 主键 |
2 | name | varchar(100) | 是 | 名称; | |
3 | act_model_key | varchar(100) | 是 | 模型标识key | |
4 | app_form_mode | int | 是 | 申请单模式:1,待办任务;2,表单模式;0,未开放; | |
5 | delete_flag | int | 是 | 是否删除;模板:逻辑删除标志:1:true,0:false | |
6 | version | int | 是 | 版本号;乐观锁版本号 | |
7 | creator | varchar(100) | 是 | 创建人; | |
8 | create_time | timestamp | 是 | 创建时间; | |
9 | createman | varchar(100) | 是 | 创建人姓名; | |
10 | creator_id | bigint | 是 | 创建人ID; | |
11 | updator | varchar(100) | 是 | 更新人; | |
12 | update_time | timestamp | 更新时间; | ||
13 | updator_id | bigint | 更新人ID; | ||
14 | company_id | bigint | 租户ID(暂时没用) |
其它表分析:略
5. 代码解读
后续更新,敬请关注
评论记录:
回复评论: