基于Activiti的考勤工作流系统设计与实现

2022-03-16 08:13:53 | 浏览次数:


打开文本图片集

DOI:10.16644/j.cnki.cn33-1094/tp.2016.02.022

摘  要: 针对大学考勤工作过程管理自动化、智能化和整合的需求,设计实现了基于Activiti的考勤工作流系统。以服务对象为中心梳理出系统核心业务,并使用Activiti Modeler完成了业务建模。介绍了系统的数据通信模式和控制数据、相关数据和应用数据的分类及作用。通过Java示例代码描述了Activiti流程部署与启动执行的步骤,并给出了基于事务内存的异常处理模式。该系统将考勤业务梳理后制定成业务流程规范,为校园信息化建设提供一定的参考。

关键词: Activiti; 考勤; 工作流; 事务内存

中图分类号:TP302          文献标志码:A     文章编号:1006-8228(2016)02-75-04

Design and implementation of attendance workflow system based on Activiti

Sun Yong

(Department of Information Technology, Zhejiang Institute of Communications, Hangzhou, Zhejiang 311112, China)

Abstract: According to the requirement for automation, intelligence and integration in the college attendance process management, a work flow system based on Activiti is designed and realized. Focusing on the service object, teasing out the system"s core business, Activiti Modeler is used to complete the business modeling. The data communication mode and the classification and function of control data, related data and application data are introduced in this paper. The steps of Activiti process deployment and implementation are described by Java sample code, and the exception handling mode based on transactional memory is given. The system sets up a business process specification by combing the attendance process, and can provide a reference for the campus information construction.

Key words: Activiti; attendance; work flow; transaction memory

0 引言

云计算、大数据、物联网与移动互联网是当前IT界的四大发展趋势,其中移动互联网是最接地气的,也是最有生命力的,无论是国家层面还是各大企业,都纷纷部署移动信息化平台。

“缤纷校园App”是一款面向大学校园的多时段、多主体、多类型、多模块的基于LBS的即时考勤手机App,用于助力校园安全管理,提升平安校园品质。由于它的大多数业务均涉及到多个参与者(例如,请假流程涉及了学生、辅导员、分管领导等角色),所以引入工作流系统[1]进行任务的分工协作成为必然。针对它的业务流程管理问题,我们设计了一种基于Activiti[2]的工作流系统,以信息技术驱动考勤流程的自动化,以业务流程为中心全面串联学校的考勤管理工作。Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台。其核心是使用Java开发的快速、稳定的BPMN2.0[3]流程引擎。它可以运行在任何类型的Java程序中,如服务器、集群、云服务等,其设计非常简约。Activiti在全球得到了广泛的应用,在中国也不例外,已经成为目前最主流的流程引擎。

1 系统设计

1.1 以服务对象为中心确定核心业务

业务流程必须从业务角度去审视,没有业务也就没有流程。所以,做工作流系统设计的第一前提就是清楚系统的核心业务是什么。而服务对象是业务的重要要素,所以那些为服务对象创造价值的业务就是核心业务。例如,国税、地税的缴税业务,房管局为房地产从业者及社会公众提供的各种房屋证件的办理业务等。对于“缤纷校园App”,其服务对象是大学师生及其管理者,核心业务即为请假和点名(包括课堂点名、晨点名、晚点名等)。

流程是由活动集组成的,确定好业务之后,需要对业务流程中的活动进一步地规范化。如果流程中所有活动杂乱而不遵循任何规范,那么流程是无法进行优化的。

1.1.1 活动本身的规范化

一个活动代表着某个完整的流程上下文中一个细分的业务环节,此业务环节可以逐级分解为多个更细的业务环节,直到不能分解为止。应将这个业务环节上对应的与流程相关的所有属性(包括这个活动本身的属性以及与此活动相关的业务属性)封装为一个完整活动。具体如下:

⑴ 活动的基本属性(名称);

⑵ 活动的参与者属性(人工活动);

⑶ 活动的时间属性;

⑷ 活动的业务属性,包括表单、规则、事件、权限、KPI绩效指标等,行业不同还会有很多其他特定属性。

通过上面的分析可知,活动本身的规范化内容很多,这些内容直接影响流程的分类、简化及重用,例如活动的时间属性,在人工活动的大多数场景下需要对每个活动定义一个办理期限,那么对于同岗位、同业务操作的同一个活动,都应该遵循相同的办理期限,而不应该有各种各样的理由来对期限进行延期。同样的,对于活动的业务属性也要制定相应的规范,以达到整个业务流程规范化的目的。

1.1.2 活动之间的作用

活动之间的作用是指活动与活动之间的转移逻辑及交互逻辑。通过结合流程实际运行数据,统计流程中重复的活动、活动占用的资源和时间、活动所耗费的成本等,来对活动本身的业务属性进行分析,就可以调整活动之间各种控制模式。例如,将两个串行连接的活动,改为并行连接,这就是流程优化中最常采用和最有效的策略。

1.2 核心业务建模

建模就是将设计好的业务流程模型化,并持久化地形成抽象通用的模型的过程。本文采用Activiti的Modeler作为建模器,创建符合BPMN2.0规范的业务模型,并将模型文件存储在数据库的模型库中,以便工作流和业务系统访问。请假业务工作流如图1所示。

对于请假流程中的“审批”环节,由于请假时间不同,负责人不同,所以需要一个分支路由的节点。同时为支持客户需求的灵活变化,将审批决策硬编码在业务系统中就不合适了,而应采用Activiti中的规则引擎来自动进行审批决策,并支持客户对审批规则的实时修改。利用规则引擎可以将业务规则脱离应用单独处理,使用预定义的规则文件语法编写业务规则,把业务数据交给规则引擎解释,然后返回处理结果,根据返回的结果就可以判定业务的处理方式了(例如,当前的请假申请是应该由辅导员还是由分管领导负责审批)。

晚点名业务工作流如图2所示(其他点名流程相对简单,不再赘述)。

纪检委是学校中负责考勤工作的组织,由于学生人数多,所以需要并行出多个流程活动(并行活动的最大个数由纪检委中的可用核查执行单位最大个数决定)以提高核查工作效率,并将结果汇总至辅导员。需要注意的是,在系统中,核查工作除了被动方式(纪检委检查学生)外,还接受学生通过手机App主动发送位置信息(属于另一个工作流,不再详述),以减轻纪检委的人工核查工作。

学生处可视情况对检查结果进行复审并通知学生家长,也可以直接忽略某次核查结果。

1.3 数据通信

工作流系统和业务系统作为一个整体,在流程与业务之间、流程与流程之间均需进行数据通信。系统数据通信模式如图3所示。

⑴ 控制数据:工作流系统管理的内部控制数据,这些数据包括了与流程实例和活动实例相关的执行数据和状态数据,例如流程实例的状态和执行时间、活动实例执行者、活动执行时间和状态、紧急程度等。

⑵ 相关数据:工作流系统使用相关数据来确定流程实例的流转条件,并选择下一个将执行的活动,相关数据由业务系统访问并更新。例如请假流程中的“请假天数”,这个数据会决定该流程的审批路径,不同的请假天数,路径也可能不同。

⑶ 应用数据:业务系统管理的业务数据,有些业务应用数据需要传递给工作流引擎,作为人工UI的列表显示使用。

2 系统实现

“缤纷校园App”采用Spring MVC作为开发框架,Activiti从最开始设计时就考虑了与Spring的集成,从引擎的默认配置文件(activiti.cfg.xml)可以看出,Activiti的配置文件解析及XML规范都是基于Spring扩展的,这一特点对于将Activiti和“缤纷校园App”业务系统的集成可以说是水到渠成。下面以请假业务为例,介绍工作流的实现。

2.1 部署流程

由于工作流系统中一般都存在多个流程,Activiti允许把一批资源打包部署,为开发者提供了便利。例如,假设请假与晚点名工作流文件分别为“leave.bpmn”和“night.bpmn”,可先使用zip格式将两个文件压缩为“bfxy.bar”文件(扩展名bar为Activiti专用),然后将压缩包放置在服务器的Java classpath中即可部署,部分Java代码如下。

@Autowired //注入Activiti流程库服务

private RepositoryService rs;

public void zipWorkflowDeploy() {

//读取流程文件压缩包

InputStream zipStream=getClass().

getClassLoader().getResourceAsStream("bfxy.bar");

//将流程部署到引擎中

DeploymentBuilder db=rs.createDeployment();

db.addZipInputStream(new ZipInputStream(zipStream));

db.deploy();

}

2.2 在Spring容器中启动请假流程的部分Java代码

@Service

@Transactional //启用事务管理器

public class LeaveWorkFlowService {

@Autowired //注入业务实体管理对象

LeaveManager leaveManager;

@Autowired //注入Activiti相关服务

private IdentityService identityService;

@Autowired

private RuntimeService runtimeService;

//保存请假实体并启动流程的方法

public ProcessInstance startWorkflow(Leave entity,

String userId, Map<String,Object>variables) {

//持久化请假实体

leaveManager.save(entity);

//实体保存后的ID作为流程业务key

String businessKey=entity.getId().toString();

//设置启动流程的人员ID

identityService.setAuthenticatedUserId(userId);

//启动流程并返回

return runtimeService.startProcessInstanceByKey

(businessKey);

}

}

2.3 异常处理

一个稳定健壮的应用系统离不开良好的异常处理机制,程序语言只提供了最基本的异常处理机制,在实际开发中,往往需要设计者给出更加易用、友好、统一的异常框架设计。本文基于笔者前期研究成果,设计了一种基于事务内存的工作流异常处理机制[4]。事务内存是一种通过事务来实现并发控制的编程范式,事务的ACID特性由事务内存引擎来保证,无需开发者关心。与其他并发控制方法(例如锁)相比,事务内存具有安全、易用等优点,近年来在学术界受到了广泛关注。

若在每个流程活动执行过程中,出现的异常使得整个活动不能继续执行下去,此时即采取事务内存的回滚操作,以保证活动的所有行为(活动本身的执行、此活动节点绑定的事件或服务的执行、任务的分配等)都处于一个原子事务中;若活动成功执行,则需“提交”整个事务。

2.4 程序界面

“缤纷校园App”中学生请假与晚点名业务的手机客户端界面如图4所示。图中,左侧按钮“就寝签到”将创建一个学生主动点名的工作流,并触发相应活动,该工作流应由学生本人发起执行,并只在纪检委规定的点名时间内有效;右侧按钮“提交”则将创建一个“请假”工作流,并触发相应活动。

3 总结

本文设计了一套基于Activiti、面向“缤纷校园App”的工作流系统。并从业务梳理与优化、流程建模、数据通信、流程部署与执行和异常处理等角度对考勤工作流系统设计与实现的方法进行了介绍。利用该系统,将原本散乱甚至混乱的考勤业务梳理后制定成业务流程规范,进而约束了考勤业务的规范化处理和运转,保障了校园安全管理,提升了平安校园品质。

目前系统部署成功后流程即可正常使用,但是对于复杂流程的迁移尚存在问题,例如迁移后的流程图显示不准确等。下一步的工作是深入完善考勤工作流框架的设计,使该系统具有更广泛的适用性和扩展性。

参考文献(References):

[1] 阿尔斯特.工作流管理:模型方法和系统[M].清华大学出版

社,2004.

[2] 闫洪磊.Activiti实战[M].机械工业出版社,2015.

[3] 江东明,薛锦云.基于BPMN的Web服务并发交互机制[J].计

算机科学,2014.8:50-54

[4] 林菲,孙勇.自稳定的分布式事务内存模型及算法[J].计算机

研究与发展,2014.51(9):2046-2057

推荐访问: 工作流 考勤 设计 系统 Activiti