谢一丹,裴焕斗,唐道光,张佳慧
(1.中北大学 仪器与电子学院,山西太原 030051;2.百信信息技术有限公司,山西太原 030006)
随着信息的飞速发展和企业的快速壮大,企业对工作流程自动化的需求越来越强烈,工作流技术应运而生。当今通用流行的工作流组件有JBPM[1-2]、Activiti[3]、Osworkflow,但项目管理系统的工作流仍存在着流程繁杂的问题,以及一旦流程错乱就难以准确定位的弊病[4-6],而且IT 企业项目流程变更频繁,经常涉及部门和岗位调整[7]。同时文献[8]指出现在工作流技术缺少一种支持流程定义、流程演进的方案。基于以上背景,设计了一种基于自定义工作流技术的项目管理系统。
系统设计基于B/S 架构,用户通过浏览器访问和使用系统,系统采用前后端分离的形式,前端使用Vue 框架以及一些其他的组件,后端采用Django框架。系统首先由前端发送请求,经过负载均衡Nginx 转发到Uwsgi 服务器,然后调用Django 业务代码,到达Redis 与MySQL 数据库。所选技术流程如图1所示。
图1 所选技术流程图
系统基于MySQL 数据库和Redis 数据库设计了数据库模型,其中用户的账户密码等基础信息及数据更新频繁的信息存放在Redis 数据库中,方便快速查找,减轻数据库压力;而审批记录存放在MySQL数据库中[9]。该系统数据库模型如图2 所示,主要由用户表、部门表、岗位表、部门-岗位表、用户-部门岗位表、流程记录表、流程实例表、审核表及审核链路表等十一张表组成。
图2 系统数据库模型图
系统采用Python 语言实现自定义工作流,包括流程步骤设计、流程表单设计、工作流控制模式以及工作流引擎设计。
传统的流程步骤只是根据具体业务流程进行工作流设计[10-11],没有给出具体设计方案,而该设计采用三层结构进行流程步骤设计,具体流程步骤设计方案如图3 所示。该设计将整个项目的自动化流转分为三层,首先,在整体上通过项目阶段进行流转,其次,具体任务通过任务分配进行流转,最后,文档的审批可进入审批流转。其中任意一层流转出现问题,只需要定位到该层去解决问题。
图3 三层结构流程步骤设计
2.1.1 体系流程步骤设计
每个项目需要经过不同的阶段,同时项目阶段下的活动需要多个部门的配合[12]。因此在体系流程步骤设计中,首先,将项目管理中的组织分解结构OBS(Organization Breakdown Structure)和工作分解结构WBS(Work Breakdown Structure)相结合,使项目阶段、部门与工作包之间建立起联系;然后当任务执行时再对工作包进行分解,这样简化了模块流程,同时也为后续工作包的详细分解提供接口。
2.1.2 任务流程步骤设计
在任务执行时,负责人只会将任务分配给下一级人员,并不会落实到具体的实施人员,鉴于此,设计了分解-审核-统一提交-再审核的步骤来解决项目管理中多层级任务分配问题。任务流程步骤设计如图4 所示。
图4 任务流程步骤图
其具体操作步骤为:
1)用户1 新建任务指定给用户2,用户2 在执行任务时有两种方式,若采用方式1 则进入步骤2),否则进入步骤4)。
2)用户2 直接执行该任务,完成任务后,若任务需要审批则进入步骤3),否则转入步骤5)。
3)执行审批流程,在审批流程全部结束后,任务完成。
4)用户2 将任务分解给子级用户3、用户4 及用户5,子级用户分别执行各自任务。用户2 对各子级用户提交的任务情况进行初次审批,若驳回则子级用户重新执行任务,若任务均通过,则由用户2 统一提交;统一提交后若需要审批,自动转入步骤3),否则转入步骤5)。
5)所有任务流程执行完毕,该任务完成。
2.1.3 审批流程步骤设计
审批流程步骤设计是自定义工作流的核心[13-14]。其设计思路为先建立父级列表,选择需要经过的审批部门,然后建立子级列表,选择具体审核人员,具体审批流程步骤设计如图5 所示。
图5 审批流程步骤图
以顺序执行的流程审批为例介绍具体步骤:
1)用户在完成任务后点击提交按钮,获取审批examine_status 状态:为0 则不需要审批,提交即完成;为1转入步骤2),进行文档审批;为2转入步骤3),进行流程审批。
2)进入文档审批,按照流程步骤表中预先设置好的审核步骤及审核人,判断pass_or_no 字段状态。若通过则审核页自动签字,直至最后一个节点审批完成后进入步骤4);若驳回则此条审批作废,将该步骤所有状态重置,需重新提交审批。
3)进入流程审批,同样按照流程步骤表中预先设置好的审核步骤及审核人,判断pass_or_no 字段状态。若通过则进入下一审核人审核,直至rank 为最后一个层级且审核通过,然后进入步骤4);若驳回,则需要重新提交审批。
4)所有审批流程结束,该活动结束。
在自定义工作流设计中,可以将流程表单视为HTML 页面[15]。表单还包含了完成整个业务流程所需要记录的信息。以测试用例的审核流程为例,测试用例的表单包含了需求编号、需求标题、需求类型、需求优先级(高、较高、一般、较低、低)等表单项。
另外,由于权限的不同,用户填写的表单也不同,由此将多个岗位归属于同一角色下,然后对角色赋予权限。如测试岗位的人员可以填写测试用例、测试步骤,但没有填写审批信息的入口,提交表单后,流程进入审批环节,拥有审批权限的人员可以进行审批,填写审批意见。
工作流中的过程控制就是根据具体的业务流程对会签和分支两大模式进行组合[16-17]。传统的工作流控制模式只以结束状态判断能否进行流转,而改进后的控制模式,将各个活动的跳转依托于活动的两个状态:开始和结束,然后再基于两大控制模式进行流转。因为项目管理对活动排序有其独特性,如常使用的前导图法,如图6 所示,除了传统的结束-开始这一种关系外,还包含了开始-开始、开始-结束以及结束-结束三种关系。
图6 活动关系图
以项目活动为例,活动任务流转图如图7 所示。
图7 活动任务流转图
1)项目活动开始后,活动A、活动B、活动C 三者的状态status 进入start。
2)对于活动D 需要一直获取其前置活动A 及活动B 的当前状态,然后判断初始设定的前置活动与后继活动间的关系(relation 字段)是否满足条件,若满足条件mook 字段置为1,否则为0;然后判断活动D 的所有前置活动间的关系,即活动A 和活动B 是否满足”与关系”,若判断结果next 为1,则活动D 状态可被置为开始,否则不可开始。
3)对于活动E,在活动C、活动D 均结束后可开始执行,按步骤2)所示,先对活动C、活动D 与活动E之间的关系进行判断,然后对活动C、D 间的关系进行判断,条件都满足则活动E 可开始进行,否则不可开始。
4)活动E 结束后,此项目活动结束。
该工作流引擎的主要工作就是根据工作流的控制模式和设计的流程步骤,对流程进行实例化[18]。然后通过任务驱动的方式来完成流程的流转,即用户分别通过新建任务、分配任务、执行任务以及审核任务来完成整个项目信息的流转。其次,通过对用户当前操作、当前层级、当前任务状态和步骤流程表中事先的定义的事件来判断下一个节点的流转,每次执行的操作都会生成一条对应记录。关键代码如下所示:
具体工作流引擎的执行步骤如下:
1)新建一个任务,由被指定人员完成,选择审批类型(type)及具体的审批流(examine_id)加入流程记录表和流程实例表。
2)任务新建完成后,更新消息提醒表及日志表,被指定人员接收到该条消息。
3)此时任务状态变为开始,在被指定人员填写任务进度时,任务状态变为进行中;当任务完成提交时,若需要经过审批则进入步骤4)。
4)进入该步骤,任务状态变为开始审批,通过审核链路表(next_id)获取下一处理人,然后通过该审批人员的层级(rank)从而判断该条审批是否完成,若未全部完成,则循环执行步骤4),否则进入步骤5)。
5)判断是否有抄送节点,有则进行抄送,没有则此流程完成。任务状态变成审批结束。
该系统自2022 年3 月在某IT 企业投入使用以来,使用人数达500 余人,参与使用系统的部门为21个,累计在线处理3 028 条审批流程。审批流程包括文档审批和流程审批,其中文档审批包括可交付物的审批及其他文档审批,流程审批包括测试用例审批、项目延期审批、任务审批等多种审批。
系统后台数据库获取的原始数据包括id、create_time、updata_time、user_id、rank、name、examine_id、info、status、type、department、project 等字段。从审批流程开始到结束,24 小时内完成审批数量为1 157 条,且在0~4 小时内完成485 条。由此可见,0~4 小时内完成审批数量占比高达42%,与线下审批相比,效率明显提升。
该设计针对IT 企业项目管理工作流中流程定义严格、业务流程复杂的问题,结合项目管理理论,给出了项目管理系统中自定义工作流设计的具体方案,并且提出了一种改进的控制模式,将项目管理中的多种业务整合为规范流程,满足项目规划的需求。同时详细介绍了项目管理系统中审批流程的设计和实现方法,审批处理流程速度明显加快。该系统使得企业项目管理工作更加高效便捷。
未来将继续提升项目管理系统中自定义工作流的可配置性,同时综合考虑不同类型项目间的共性,增强系统通用性。