基于Web的业务流程管理系统设计

2019-11-12 12:01熊棠何怡璇
电脑知识与技术 2019年25期
关键词:哈希时限业务流程

熊棠 何怡璇

摘要:在Linux系统中,使用Ruby on Rails 5框架设计一个基于Web的业务流程管理系统。提供流程仓库、流程设计、流程配置、流程引擎、流程维护、流程入口等功能。

关键词:BPMS;流程管理;Ruby on Rails 5

中图分类号:TP311          文献标志码:A

文章编号:1009-3044(2019)25-0059-03

现代企业运作中,一个项目的生命周期可以分为多个阶段,由多个人员经手;可以用业务流程管理系统(Business Process Management System,BPMS)对项目进行管理。BPMS是在工作流(Workflow)等技术基础上发展起来的,基于业务流程建模,支持业务流程的分析、建模、模拟、优化、协同与监控等功能的新一代企业应用系统核心[1]。

在Linux系统中,使用Ruby on Rails 5框架,设计一个用于招投标代理企业的业务流程管理系统,使其具有上述功能。

1 系统环境

招投标代理企业的主要业务就是为政府部门、企事业单位提供招投标代理服务。一个项目从开始到结束时间跨度较长、业务人员需同时处理几个乃至十几个项目,可采用简易的BPMS对项目进行管理。系统在Ubuntu16.04操作系统上运行,采用Ruby on Rails 5框架,mysql 5.7数据库。

2 需求分析

招投标代理企业以项目为中心,须对项目进行全生命周期管理。因此,以项目为中心来进行系统设计。

2.1 项目分类

经业务梳理,项目可归纳为政府采购、非政府采购及其他三个类型。不同类型的项目,步骤流程、时间节点及需收集的数据均有差异。

2.2 访问控制

项目部门和行政部门需参与项目管理,项目部门负责项目的建立、主要步骤的处理,行政部门负责时间安排、房间安排、公告发布、合同管理、归档管理及考勤考评。项目部门多采用项目部(组)结合项目负责人制,项目负责人独立负责整个项目,对其所在部(组)主管负责。行政部门多采用岗位制,且大量存在一人身兼多岗的情况。

因此,在访问控制设计上,项目负责人只能操作自己负责的项目,主管可以看到本部(组)的所有项目,并具有相应的权限。项目进行到需要某岗位人员操作时,该岗位用户可以访问项目的特定步骤。

2.3 控制

一个项目在进行时,应具备正常进行、非正常返回、跳过不必要步骤、重新指定负责人员等功能。完成之后应可查询、展示、归档、导出。

3 模型设计

3.1 Project类

系统以项目为中心进行设计,核心模型为Project,存储项目的所有数据。因不同类型项目需要存储的数据项不同,Project的字段应为所有类型项目需记录字段的合集,并经合并处理。

3.2 Workflow类

项目的数据是根据推进情况逐步录入系统的,此过程就是工作流Workflow。工作流定義了一个项目需要经过什么样的流程,每一个流程需要做些什么,由谁负责,流程时限等。这些属性由流程模板来定义。工作流包含至少一个步骤。

3.3 Step类

步骤Step是工作流的组成部分,通过工作流与项目和模板关联,用以记录当前项目的进展情况。Step有以下几个主要属性。

previous_step_id:上一个步骤的id,用以形成线性的工作流;

status:状态,有预备、激活、异常、退回、完成、跳过五种状态;

sequence:用以读取流程模板配置;

must_be_finished_at:时限,该步骤最晚应完成的时间。

3.4 流程模板

流程模板用来配置整个工作流,通过全局变量@@project_template进行访问,为哈希类型数据。此变量可以写为一个类,也可以动态生成。

3.4.1 一级结构

@@project_template的结构为{‘【项目类型代字】 => {【表示项目流程的哈希表】}},即每个项目类型用一对键-值对表示。如政府采购,项目类型代字为“zfcg”,则键-值对为‘zfcg => {【表示政府采购流程的哈希表】}。

3.4.2 二级结构

以政府采购为例说明项目流程的哈希表结构:

{

‘title => ‘政府采购,

‘steps => [【表示步骤的哈希式】]

}

title的值为字符串,表示该类型的名字;steps的值为数组,数组的每个元素对应工作流中的一个步骤。

3.4.3 三级结构

steps数组每个元素均为哈希表,定义一个步骤的所有属性。其结构为:

{

‘title => ‘【步骤名称】,

‘duty => ‘【步骤责任人】,

‘max_time_interval => ‘【最大时间间隔】,

‘skipped => ‘【是否运行跳过】,

‘operations => [【表示该步骤可操作字段】]

}

duty的值为字符串,用来表示可操作当前步骤的用户,形如‘duty[政采备案审核岗]、‘head_user、‘dept[事业部]等,经解析后可定位至一个或一组人员。

max_time_interval表示项目开始、或完成某一步骤后、或数据库中该项目某个表示日期时间的数据值后N天内必须完成此步骤。临期可预警,超期可告警。

operations的值为数组,数组的每个元素对应一个可操作字段。

3.4.4 四级结构

operations数组每个元素均为哈希表,定义一个字段的操作方式及数据来源。其结构为:

{

‘model => ‘【要操作的ActiveRecord模型类名】,

‘field => ‘【要操作的字段名】,

‘title => ‘【页面显示文字】,

‘source => ‘【数据来源】

}

要操作ActiveRecord模型的类名,通常为Project,设置该属性是为了便于灵活扩展。

数据来源表示如何得到这个字段的值,通过自定义的视图辅助方法解析,得到数据的输入方式。如有动态数据则请求自建Src类处理。

需要注意的是,哈希类型变量增加键-值对不会影响原有的数据,故可根据需要定义新属性。

3.5 Src类

Src类根据流程模板的source参数提供数据,支持参数传递,使用类方法run,经过解析,对应到Src类相应的类方法并返回值。如source的值为‘form_blank_select_customer()表示下拉菜单,菜单选项由Src.run(‘customer())给出。

run方法的参数并不是真实的方法名,和真实方法名一一对应,这个对应关系通过哈希类型常量DATASOURCE实现。如‘customer()对应Src类的类方法real_customer_gthjn(),该方法返回一个哈希变量。

4 控制与视图

按类型新建项目后,控制器根据项目类型读取流程模板并创建视图。

4.1 根据流程模板创建视图

新建项目或执行项目某个步骤,都需要根据流程模板动态创建视图。根据项目类型和当前步骤序列,在流程模板中定位当前步骤的operations值来创建表单。控制器遍历operations,将哈希类型的元素值作為参数交由视图辅助方法data_input()处理。

data_input()直接获取model类名和要操作的字段名field,对source则按照规则进行解析。解析时采用正则表达式,首先解析第一个关键字。常用关键字如下:

form_blank:插入文本框。下拉菜单、时间选择器、多选菜单等可在文本框基础上通过JS实现;

form_check_box:插入复选框。复选框可通过JS实现多种功能,如通过勾选控制其他表单元素;

list:插入列表。列出现有数据,支持增删改操作;

window_open:插入按钮,可打开新窗口。通过新窗口的脚本对父窗口元素进行操作;

auto:当前页面不显示,表单提交后在后台处理。

其次解析后续关键字,给表单添加页面脚本等。最后一个关键字是字母数字与括号的组合,交由Src类处理。

根据上述流程创建出视图。

4.2 流程控制

创建好的项目能看到流程图。部分步骤有完成时限,如计算时限的参数不全,该步骤及后续步骤将暂时不被创建。

每个方格即为一个步骤,用不同样式区分步骤状态。具有权限的用户可以对已完成的步骤进行修改;当前激活的步骤可以执行,并可转移给其他用户作为责任人;未激活步骤如skipped属性为true,则有‘跳过按钮。被跳过步骤如后续步骤未完成则有‘恢复按钮。每个步骤均有详细操作日志,用于事后审计。

每个步骤均可‘通过和‘不通过,通过即完成并激活下一步,不通过则将本步骤设为预备并将上一步设置为激活。留言备注可用于记录通过或不通过的理由且不可更改,用于交流及事后审计。留言采用JSON格式存储,可记录多条留言。

‘上一步和‘下一步用于浏览已完成的步骤,预备及跳过的步骤不可浏览。

4.3 提示与异常

每一个步骤完成后,系统会自动对后续所有步骤进行更新。当计算时限的参数完备时,之前未创建的步骤及后续步骤将被创建,并设置时限的具体日期。

计算时限时根据流程模板的设置分为自然日和工作日,自然日直接计算可得,工作日使用API获得结果。

当前时间距时限72小时开始有提示标注;时限当日,开始告警;时限已过时,将显示超期。超期信息将记入日志,供事后审计、考勤。

5 数据处理

录入项目数据之后,可以项目数据为基础进行各种统计分析,比如废标率统计、耗时统计等。对于数据展示和导出,采用了在线模拟Excel工作区样式和导出为Excel文件的方式,以兼容现有工作习惯。

在线模拟Excel工作区采用table元素,配合js和css,实现类似的视觉效果。为了数据安全,此处不再提供数据增删改功能。

数据导出使用第三方gem axlsx,可以使用图表、图像、自动列宽、自定义样式和完整模式验证生成XLSX电子表格[2]。

6 结束语

经过系统测试及一年的线上运行,该系统达到了设计要求。但该系统还存在只支持线性流程,不支持分支流程的问题,将在后续进行改进。

参考文献:

[1] 业务流程管理 - 维基百科,自由的百科全书[EB/OL]. https://zh.wikipedia.com/wiki/%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B%E7%AE%A1%E7%90%86.

[2] axlsx | RubyGems.org | Ruby 社区 Gem 托管[EB/OL]. https://rubygems.org/gems/axlsx.

猜你喜欢
哈希时限业务流程
RPA机器人助业务流程智能化
心电图QRS波时限与慢性心力衰竭患者预后的相关性分析
平行时空
STK业务流程优化的探究
企业财务管理、业务流程管理中整合ERP之探索
基于财务业务流程再造的ERP信息系统构建探析
基于OpenCV与均值哈希算法的人脸相似识别系统
基于维度分解的哈希多维快速流分类算法
反时限过流保护模型优化与曲线交叉研究
基于同态哈希函数的云数据完整性验证算法