1. 引言
工作流技术 [1] [2] 起源于二十世纪七十年代中期办公自动化领域的研究,伴随着信息技术飞速发展,信息量、信息传播速度都呈现出几何式的增长。传统的手工纸质业务流转已经不能满足要求,无纸化且更环保的电子化工作流系统可以大幅度提高效率,帮助业务实现自动化流程 [3]。中国的管理及信息化是20世纪90年代开始进入信息时代的,在早期的业务管理系统大都为单机版本,只能应对相对简单、小规模的公司业务管理。随着业务的发展,部门的增多及业务的拓展,部门内部的系统越来越多,业务上需要一套自动化、跨部门流转的工作流程来进行管理。进入21世纪,it治理技术、soa [4] 治理技术、消息中间件等技术快速发展,工作流技术进入新的热潮。工作流引擎是工作流管理系统的核心软件 [5],它能够完成业务流程的定义和管理,按照预先定义的执行步骤和业务规则调度流程实例,并在业务或人物之间合理地分配资源 [6]。得益于软件基础架构及硬件基础设施的逐渐成熟完善,形成了一整套工作流的技术凯发国际一触即发的解决方案,这其中大部分基于spring mvc [7]、spring boot、spring cloud等主流框架。依赖于开源社区的公共平台,融合了遍布世界各地的软件开发者,群策群力将工作流技术衍生出了多种技术方向。本文将从信息披露工作流设计出发,结合实际的业务场景,阐述系统的总体架构、系统功能设计、系统功能模块以及数据库表结构。
流程具备六个要素(见图1):输入、活动、活动间的相互作用、输出、流程的服务对象和价值。activiti工作流引擎实现了bpmn 2.0规范 [8],可以发布设计好的流程定义,并通过api进行流程调度。具有数据持久化、引擎服务化、流程设计可视化、支持主流spring框架、历史数据分离等特性。
. process elements
图1. 流程要素
2. 信息披露系统内容
《上市公司业务管理办法》规定:发行人、上市公司的董事、监事、高级管理人员应当真实、准确、完整、及时地披露信息,应当同时向所有投资者公开披露信息 [9]。信息披露文件主要包括招股说明书、募集说明书、上市公告书、定期报告和临时报告等。信息披露制度是资本市场规范运行的有效保证,因此建立有效的信息披露机制及相关业务系统,确保资本市场有效运行。
信息披露工作流系统旨在为上市公司提供官方信息化途径进行信息披露,系统提供两条主流程,分别为上市公司主动披露流程、监管函件披露流程,其中函件披露流程可转化成主动披露流程。流程设置二级审批节点,在审批过程中可以任意退回或终止。流程正常结束后按照信息披露要求存档并发布至凯发国际一触即发官网渠道展示(见图2)。
. information disclosure process
图2. 信息披露流程
3. 系统总体架构
整个平台采用微服务架构 [10],使用springboot 2.x作为基础框架,流程引擎采用activiti,orm框架采用mybatis,数据库连接池采用druid,任务调度采用quartz,json工具采用jackson,动态脚本采用groovy,日志处理采用logback,模板框架采用freemarker。前端部分采用angularjs等主流框架组件。通过f5、nginx提供负载均衡服务,包括页面服务及后台服务转发(见图3)。系统分拆成五个微服务运行,每个服务各司其职、高度自治,通过eureka进行注册和发现,通过feign方式进行相互调用,配备mysql关系行数据库及内存数据库保存业务数据。
. project deployment operation diagram
图3. 项目部署运行图
4. 系统主要数据库表设计
本系统采用mysql关系型数据库,对系统内主要数据库表的功能及说明如下(见图4)。
. database table design
图4. 数据库表设计
1) 业务对象:业务对象是完整的业务抽象结构,对象key作为唯一性主键。包含对象名称、业务分类、发布状态、对象描述等属性。
2) 业务实体:一个业务对象下有多个实体,实体之间为一对一或一对多的关系。系统会每个业务实体生成一张数据库实体表。包含实体名称,实体描述,实体状态,数据库表信息等属性。
3) 实体属性:一个实体下包含多个实体属性,与数据库表字段一一对应。包含实体名称、数据库字段名称、字段类型。字段长度等属性。
4) 表单定义:表单key作为唯一性约束,包含了设计生成的html大文本、自定义js脚本、表单分类、发布状态、结构化数据等属性。
5) 表单权限:表单权限是流程发起或审批节点时,各个属性的权限控制,包括只读/编辑、显示/隐藏。
6) 流程定义:流程key作为唯一性约束,包含了流程名称、流程分类、全局事件、节点事件、前置后置时间、关联表单、发布状态、版本号等属性。
7) 流程实例:当流程正式启动后,生成一条流程实例,直至流程结束。包含关联表单、关联流程、当前节点等属性。
8) 流程任务:每个流程节点对应一个流程任务,当任务流转时创建一个新的流程任务。包含关联流程实例、流程节点、创建人、审批人等属性。
9) 流程审批:每次审批动作完成生成一条审批记录。包含关联流程实例、关联任务、审批人、审批意见等属性。
10) 流程授权:对发起/审批流程权限进行角色控制。包含关联流程、角色、机构、授权类型等属性。
5. 系统功能设计
系统采用模块化设计,分为设计中心、流程管理、组织架构、系统管理四个模块(见图5)。
. system function module diagram
图5. 系统功能模块图
1) 设计中心
表单设计功能整合了activiti官方kickstart的表单设计工具,使用拖拽组件关联属性的方式进行编辑,可添加自定义js脚本,最终保存并发布。
元件管理功能包含流水号管理、弹出对话框管理、数据字典管理及数据源管理。通过基础数据维护,供其他模块功能调用。
门户设计功能包含了栏目管理,用于凯发国际一触即发官网信息披露平台的数据栏目;布局分配,用于定义凯发国际一触即发官网信息披露平台的自定义布局。
模板管理使用freemarker作为模板引擎,管理表单的模板样式。
2) 流程管理
流程设计功能整合了activiti官方kickstart的流程设计工具,通过可视化编辑整个流程节点、配置节点事件/全局事件、定义节点审批人员、设置节点表单/全局表单、节点表单字段授权、设置脚本事件及跳转规则。
实例管理对系统所有运行/结束的实例进行管理,可查看实例任务、实例运行节点图、流程挂起、流程终止等操作。
任务管理可以指定任务待办委托、任务催办、任务终止等操作。
辅助功能包含审批常用于管理、通知消息模板、常用的系统脚本管理。
3) 组织架构
用户管理可以对用户基础信息进行维护,同时预留rest接口供外部系统接入。
组织管理是对用户、机构、岗位、职务的综合管理,包含组织简介、下设岗位、下设职务、组织内人员管理。
角色管理是系统内用户角色定义,并维护角色人员关联关系。
权限管理是定义系统内角色的菜单功能权限,流程权限。
4) 系统管理
菜单管理定义了菜单的树形结构,可维护菜单的地址、图表、排序等属性。
分类管理包含表单分类、流程分类、数据字典分类、业务分类。
属性管理定义了系统初始化的属性变量,配置项存放与redis缓存中。
国际化定义了简体中文、繁体中文及英语三种资源项。
6. 功能实现
1) 建模管理实现
业务对象是表单的基础,首先新建业务对象并创建主实体与子实体,主实体只能有一个,子实体可以为多个。为实体创建属性,发布建模对象生成数据库实体表。(见图6)
. modeling management function class diagram
图6. 建模管理功能类图
2) 表单管理实现
表单是业务流程运行中与用户交互的界面,根据模板对表单进行编辑保存生成html数据、保存自定义的js脚本,发布新版本后表单生效。(见图7)
. form management class diagram
图7. 表单管理类图
3) 流程管理实现
流程管理涉及保存、启动、办理流程、获取流程任务、获取流程变量、待办、已办、撤回流程、审批记录等一系列操作,是整个系统的核心组成部分。(见图8)
. process management class diagram
图8. 流程管理类图
4) 模板管理实现
使用模板管理建立模板类型,在模板类型下创建对应的模板,模板为树形结构,可以指定角色权限。(见图9)
. template management class diagram
图9. 模板管理类图
7. 结论
在对研究工作流技术和信息披露系统建设需求分析的基础上,设计了基于工作流的信息披露管理系统。设计了基于activiti工作流引擎的微服务架构,文中对表单管理、流程管理、系统管理的实现进行了详细描述。该系统已经上线运行并得到了业务工作人员的肯定,很大程度提高了各工作人员的工作效率,从而也印证了系统的设计的合理性。本系统以信息披露为业务原型,实际上也适用于其他流程类的业务场景,同时表单服务也可替换为自定义的表单服务,进一步拓展系统的功能。