admin 管理员组

文章数量: 1184232


2024年3月20日发(作者:数据库都有哪些)

第29卷

Vol.29

第11期

No.11

电子设计工程

ElectronicDesignEngineering

2021年6月

Jun.2021

Activiti工作流框架在OA系统中的应用

杨光

(西安庆安航空电子有限公司信息开发室,陕西西安710077)

摘要:针对OA系统中复杂的业务流程和流程流转过程中人员及角色的复杂关系,采用了Activiti

工作流框架,通过对框架中的身份信息数据表进行重构,并结合面向切面的SpringAOP及非关系型

数据库Redis,可以同时将流程任务的执行人分配给单人、人员列表、角色。在用户发起流程和处理

流程时,使用异步的处理方式,先行向Redis写入任务列表中有变化的人员列表,再使用定时任务,

每隔1s从Redis的人员列表中查询其任务列表并存入Redis。通过请求及响应测试表明,人员的待

办和已办任务列表查看时间可以降低至45ms以内。

关键词:OA系统;工作流框架;Activiti;Java;Redis

中图分类号:TP311文献标识码:A文章编号:1674-6236(2021)11-0065-05

DOI:10.14022/1674-6236.2021.11.014

TheapplicationofActivitiworkflowinOAsystem

YANGGuang

China)

Abstract:AsthecomplicatedbusinessprocessesandrelationsofpersonsandrolesinOAsystem,

ructuringofidentitydatabasetablesandusing

Whenusersstartaprocessand

SpringAOPandRedis,thetasksofprocessescanbeassignedtosingleperson,listofpersonsandroles.

escheduledtaskisusedto

durationofdisplayingthetodotasklistandthefinishedtasklistcanbedecreasedbelow45ms.

Keywords:OAsystem;workflowstructure;Activiti;Java;Redis

现代企业的办公自动化OA系统具有复杂的

流程审签业务,以公文审签为例,起草人员编写公

文,部门负责人审核,公司领导批准后,公文会下发

到各个部门和员工。若审批人员不同意,则可以

驳回流程,在起草人员修改后重新发起流程,进入

审批状态。

在传统的工作流中,任务的指派人员角色单一,

只能按照人员或角色指派任务。随着人员或角色的

复杂度的逐步提高,单一指派任务的方式已经不能

收稿日期:2021-03-03稿件编号:202103029

(DepartmentofInformationDevelopment,Xi’anQing’anAviationElectronicsCo.,Ltd.,Xi’an710077,

executetheirtasks,t

ingtothetestofrequestandresponsetime,the

完全满足系统的需要。文中在任务单一指派的基础

上,提出了重构人员身份数据表的方法,可以将任务

同时按人员或角色指派,提高了系统的灵活性。

1Activiti的技术特点

1.1工作流引擎ProcessEngine

工作流引擎ProcessEngine类是Activiti框架的

核心类,通过它可以获得Activiti所需的所有Service

类,以及生成流程运行时的各种实例、数据、监控以

及管理流程的正常运行

[1]

作者简介:杨光(1989—),男,陕西西安人,工程师。研究方向:工作流框架在大型信息化系统中的应用,

jeecg-boot框架在ERP系统中的应用。

-65-

《电子设计工程》2021年第11期

官方API提供了多种获取ProcessEngine的方

法,这里使用名为的配置文件来获取,

如图1所示

[2]

图1工作流引擎的配置文件

1.2各Service类

通过ProcessEngine对象可以生成各个Service

类,各类的作用如表1所示。

表1各Service类及作用

RepositoryService

Service类

作用

管理流程定义

RuntimeService

执行管理,包括启动、推进、删除

流程实例等操作

任务管理

HistoryService

TaskService

历史管理

IdentityService

组织机构管理

FormService(可选服务)任务表单管理

1.3BPMN

业务流程建模与标注(BusinessProcessModeland

Notation

组合成一

,BPMN

个业

是描述流程的基本符号,

流程图(BusinessProcess

包括图元

Diagram)

的方式

[3]

,如图2所示。

图2描述流程的基本符号

简单方法,

IDE安装

绘制的流程图是后缀名为

Activiti插件后,可以提供绘制流程的

bpmn的文件,

这类文件本质上是一个xml格式的文件

[4]

在xml格式文件中,包含代表各类元素的标签。

IDE

的文件。流程图中各个基本符号的属性都可以转换

提供绘制流程图的方式,可以自动生成xml格式

为xml文件中的各类标签和标签的属性

[5]

1.4

以act_

Activiti

数据库

开头,

的后台有数据库的支持,

表名的第二部分是表示表用途的两个

所有的表名都

字母标识,用途与服务的API对应

[6]

-66-

2数据库的二次开发

2.1

Activiti

数据库

信息表)、

的组织机构表包括

act_id_info(用户

act_id_group

扩展信息

(用户组

表)、

act_id_membership

act_id_user

(用户与用户组对应信息表)、

鉴于OA

(用户信息表)

系统部门、人员、

角色关系的复杂性,这

4

色关系的要求,

张表不能完全满足

因此需要调整表的结构或者重新设

OA系统对用户、人员、部门、角

计表。部门表可以使用act_id_group表,并补充相应

字段。用户表可以使用act_id_user,再增加人员表

person_info

membership

人员id、部门

可以作为人员

与用户表建

id、角色code、

-

角色名称等字段,

部门

-

角色表,

关系。

通过补充

act_id_

可以体

现人员所在部门及人员在该部门的角色。通过这种

方式,可以很好地对Activiti组织机构表进行重构,

以满足OA系统复杂的用户、人员、部门、角色、权限

等要求

[8]

2.2二次开发后的兼容性

进行数据库的二次开发以后,由于没有破坏原

有的数据表结构,因此在流程中可以使用调整后的数

据库结构进行处理,包括流程变量、个人任务、组任

务。所以二次开发可以完全兼容原数据库及方法。

3业务描述和流程图绘制

3.1业务描述

在OA系统进行文件分发时,首先由起草人编写

文件,编写完成后,部门负责人进行审核。如果部门

负责人及后续的公司领导均审批通过,则根据公文

的分发范围进行分发;如果审批不通过,则直接退回

到起草人阶段重新编写。

3.2流程图绘制

使用Eclipse的Activiti插件绘制公文审签流程

图,如图3所示。

为了满足OA系统越来越复杂的人员和角色设

计,文中提出了可以分别按照人员和角色分配任务

的方法。

在部门负责人审核任务中,由于起草人分属不

同的部门,所以部门负责人是变量,设置属性中的

Assignee

人。在起草人编写任务完成时,

为变量${deptLeaderId},且部门负责人是单

根据该人员查询所

杨光Activiti工作流框架在OA系统中的应用

图3公文审签流程图

在部门的负责人id,将流程变量设置为部门负责人

id,下一步的任务处理人即为部门负责人,如图4所示。

图4部门负责人审核任务的属性

在公司领导审批任务中,审批人为公司领导的

角色,与流程发起人无关。因此,可以直接将公司领

导审批任务的属性Candidategroups设置为company

Leader角色,如图5所示。

图5公司领导审批任务的属性

4关键代码设计

4.1部署流程定义

首先使用Spring框架注入流程引擎Process

Engine

并通过

的实例,

仓库Service

其次通过流程引擎创建仓库

创建部署对象

[9]

。通过

Service

部署对

象可以加载流程图,并为流程图指定名称,如图6

所示。

4.2启动流程实例

通过runtimeService启动流程实例,流程实例启

动后会生成流程实例id(processInstanceId),该数据

会伴随流程执行的整个过程,如图7所示。

图6部署流程定义

图7启动流程实例

4.3任务的完成

完成任务有多种方法,其中之一是使用taskService

的complete方法。如图8所示,首先可以查询出任务

的id,其次使用taskService的complete方法,传入参

数任务id,即可将任务完成。完成任务后,观察数据

库可以发现,历史表中会出现该任务的信息,而正在

执行的表中该任务会消失。

图8任务完成

4.4待办和已办的列表查询

对于待办和已办列表的查询,文中提出了同

时根据人员id和角色id查询,合并查询结果集的

方法。

以待办列表的查询为例,若人员id为“RY00001”,

需要查询该人员的待办列表,则按照以下步骤,如

图9所示。

Query().taskAssignee("RY00001").list()

1)使用kService().createTask

任务taskList1。

语句获得个人

的id

2

)根据人员的

"JS00001",使用

id可以查询其所属的角色,

kService

角色

().createTaskQuery().taskCandidateGroup("JS00001").

list()语句获得个人任务

任务

3)

2

使用

合并

List

,即

addAll

taskList2

得到

方法,

该人员

将个人任务

的任务,

1

taskList=

与个人

(taskList2)。

-67-

《电子设计工程》2021年第11期

图9查询任务

4.5任务列表的性能优化

使用上述方法查询人员的任务列表时,由于需

要将2个以上的List合并,且无法根据分页进行查

询,所以任务数量会增加,从而导致数据重组的速率

下降,影响系统性能

[10]

。经过实验得出,当一个人员

具有3个角色,且个人任务为7条,第一个角色的任

务为4条,第二个角色的任务为6条,第三个角色的

任务为3条,将3类任务进行合并,并进行数据重组

时,查询耗时为4718ms,已经超过了用户的可忍受

等待时间,影响了用户的体验,如图10所示。

图10任务列表查询时间

使用面向切面的编程SpringAOP以及非关系型

数据库Redis可以有效地解决这个问题

[11]

,具体如下

所示:

成任务时,

1)使用

使用后置增强获取人员

SpringAOP面向切面编

id

。利用切面来

,每次用户完

完成获取人员id并将人员的任务存入Redis缓存。利

用SpringAOP的目的是使得将任务存入Redis的操

作与业务进行解耦。首先定义切面类TaskAspect,

在切面类中定义切面的增强类型是后置增强

@After

在该方法中,

,后置增强的方法是

查询出该人员的待办和已办任务

*com.*.taskExecute(..)。

列表,并将其序列化为JSON字符串

[12]

和已

2

)使用

任务

Java

列表

调用

的JSON

Redis

API

串存

,将该人员的待办

入Redis中。其

中,key可以是人员的id+任务类型(已办和待办),

value可以是任务列表的JSON字符串。

接从

3

Redis

)每次查询人员的待办和已办任务列表时,

中取值,并反序列化为任务列表

[13-14]

由于Redis是非关系型数据库,适合于作为缓

存,读取速度快,因此,从Redis取值查询人员的待办

-68-

和已办列表时,可以有效降低查询时间

[15-20]

实验表明,使用Redis作为缓存,在相同的查询

条件下,可以将任务的查询时间从4718ms降低至

43ms,如图11所示。

图11从Redis缓存中查询任务列表时间

法,可

4)

使用

有效

Redis

降低

缓存任务列表的

查询已办和待办

JSON

任务

字符串的方

列表的时

间。然而,这样会引入另一个问题,当用户发起流程

或者处理流程时,由于需要将用户的已办和待办任

务列表全部查出,并序列化为JSON字符串,存入

Redis

和转换的时间也会增加,

,因此当用户的任务列表数据量过大时,

这样导致用户点击发起流

查询

程按钮或点击审批流程按钮时,会产生长时间的等

待,如图12所示。

图12用户操作时将任务列表缓存入Redis的时间

实验表明,在相同的条件下,当用户操作时,直

接将任务列表缓存入Redis,会导致用户的等待时间

为3209ms,带来了不良的操作体验。

针对出现的此问题,文中提出了如下解决方式:

首先修改用户操作后将任务列表缓存入Redis

的方式,从同步修改为异步。当用户操作时,仍然使

用SpringAOP面向切面编程,此时将执行操作的用

户id及操作类型存入Redis缓存。由于获取用户id

及操作类型的耗时极短,因此用户发起流程和完成

任务的操作需要极短的时间,操作后会在Redis中形

成操作用户的队列。

操作用户的队列采用“FIFO+定时任务”的方式,

每隔1s从Redis中取出任务列表有变化的用户id,

将该用户对应的任务列表查询出来,并序列化后存

入Redis缓存。通过这种方式,将查询任务列表的时

间放在了后台,提升了用户的体验。

以SpringBoot的定时任务为例来说明定时任务

的实现方法。

杨光Activiti工作流框架在OA系统中的应用

首先在SpringBoot的启动类上增加@Enable

Scheduling

执行定时任务方法的类上增加注解

的注解,用来启动定时任务;

@Component

之后,在需要

,纳

入容器进行管理;通过cron表达式可以定义多种形

式的定时任务,每隔1s执行一次,在需要执行定时

任务的方法上增加注解@Scheduled(cron="*/1***

*

Redis

?")。

中取出任务列表有变化的用户

这个定时任务的方法所完成

id

队列的队头,

功能就是从

并且将该用户的任务列表查询出来,序列化后存入

Redis

式,可以将用户操作时等待的时间转化为后台执行

,最后将该用户从队列中删除。通过这种方

程序的时间,提高用户的体验。

实验表明,在相同条件下,使用异步的方式,可

以将用户操作等待时间从3209ms降低为36ms,性

能提高了两个数量级,如图13所示。

图13用户操作时将用户id缓存入Redis的时间

5结论

文中研究了Activiti工作流框架在OA系统中的

应用,提出了重构人员身份数据表的方法和同时根据

人员和角色进行工作流的流转方法,并优化了待办和

已办任务列表的查询。通过这些研究,可以使得复

杂信息化系统中的工作流配置更加灵活,同时使得

待办和已办任务列表的查询效率大幅提高。该研究

对于构建大型流程信息化系统具有一定的实际意义。

参考文献:

[1]曾翔.基于Activiti工作流框架和WebService的

[2]欧盛芬

2017.

运行管理系统的设计与实现[D].南昌:南昌大学,

的电务生产管理平台设计与实现

,阳亦斌,杨将,等.基于Activiti

[J].

工作流引擎

铁路通信信

[3]张刚

号工程技术,2020(6):50-55.

公车申请业务的设计与实现

.基于SpringMVC框架和Activiti

[D].常州

流程引擎的

:常州信息

[4]江东明

职业技术学院

,薛锦云

,2020.

机制.[J].计算机科学

.基于

,2020,41(8):50-54.

BPMN的Web服务并发交互

[5]丁苍峰

与设计

.

[J].

基于

电子设计工程

MVC架构的轻量级工作流引擎研究

[6]薛辉.工作流管理技术分析

,2018(10):212-213

应用,2019(11):313-315.

[J].计算机光盘软件与

[7]胡奇

工业出版社

.jBPM4

,2018.

工作流应用开发指南[M].北京:电子

[8]庞伟林,阮俊杰.基于Activiti工作流框架的合理

[9]孙雨升

25(24):125-128.

化建议系统设计与实现[J].电子设计工程,2017,

与实现

.

[D].

基于工作流的科研绩效考核系统的设计

[10]朱运乔.基于

沈阳

SSM

:沈阳工业大学

框架的Web应用系统搭建与实

,2018.

[11]黄裕

现[J].

.基于分布式

电脑编程技巧与维护,2019(10):34-37.

究[J].计算机与数字工程

Redis集群的

,2018(10):49-67.

WEB共享管理研

[12]韦立

策略研究

,陈珊珊

[J].

.

计算机技术与发展

基于Redis单位最大效益自适应迁移

[13]李彦辰,艾庆忠,王少非.基于Redis

,2018(10):45-76.

的分布式搜索

[14]娄锋

引擎研究[J].软件导刊,2018(3):34-65.

机技术与发展

,孙涌.轻量级

,2017,17(1):12-45.

IoC容器的研究与设计[J].计算

[15]刘荣辉

设计[J].

,

计算机应用与软件

薛冰.基于Annotation

,2019(9):56-78.

的SpringAOP系统

[16]张哲

号统计系统设计

,王荣,温伟鸽

[J].

.基于SSM框架整合的工服报

[17]郭鹏

45-87.

电脑知识与技术,2018(15):

线宽关键尺寸的蒙特卡罗模拟

,缪泓,邹艳波,等.基于模型数据库对半导体

2020(1):46-53.

[J].现代应用物理,

[18]杨永娇

应用[J].

.ORACLE

自动化与仪器仪表

数据库自动化碎片整理研究与

[19]杨天敏.基于Access数据库的图像采集与实时处

,2019(8):223-226.

[20]张冰雪

理系统设计

,刘婷婷

[J].现代电子技术

,汤亚宸,等.基于图数据库的电力

,2021(3):35-38.

设备全生命周期管理技术研究[J].电力信息与通

信技术,2019(3):1-7.

-69-


本文标签: 任务 流程 人员 用户 列表