1 应用场景
1.1 业务流程
采购系统完成了企业的日常采购管理,包括采购单管理、采购单审核、入库、结算等模块。
用户角色包括:员工、部门经理、总经理、财务。
基本业务流程如下:
1.2 业务的概念
什么是业务?
用户的需求就是业务。
什么是业务功能?
通过计算机技术实现用户需求,通过计算机研发软件功能,所开发的软件功能就是业务功能。
什么是业务系统?
实现用户需求,所开发的软件系统,叫业务系统。
什么是业务系统核心(灵魂)?
技术不是业务系统核心,业务流程是业务系统的核心。
什么是业务流程?
很多的功能组成一个流程,完成用户需求为目标,叫业务流程。
1.3 数据库设计
采购单表:pur_bus_order
采购单审核表:pur_bus_order_audit
用户表:pur_sys_user
角色表:pur_sys_role
用户角色关系表:pur_sys_user_role
1.4 功能设计
1.4.1 流程简化为:
1.4.2 员工创建采购单
1.4.2.1 操作流程:
员工登录系统
进入创建采购单
填写采购单信息,点击保存
进入采购单待提交页面
选择需要提交的采购单点击提交
1.4.2.2 操作:
l 保存采购单
提交后向pur_bus_order表写一条记录:
Status:写入1(未提交)
l 查询待提交采购单
查询pur_bus_order表的记录,只查询status值等于1(未提交)的记录
l 提交采购单
根据主键更新pur_bus_order表中的status字段,更新为2(部门经理审核中)
1.4.3 部门经理审核采购单
1.4.3.1 操作流程:
进入采购单审核页面查询待审核信息
点击审核,进入审核页面
输入审核信息
点击提交
1.4.3.2 操作
查询pur_bus_order表的记录,只查询status值等于2 (部门经理审核中)的记录
l 提交审核信息
向pur_bus_order_audit表插入一条记录(审核信息)
根据主键更新pur_bus_order表的记录
当采购单审核不通过时:status值更新为3(部门经理审核不通过)
当采购单审核通过时,status值更新为4(总经理审核中)
1.4.4 总经理审核采购单
1.4.4.1 操作流程
总经理登录系统
进入采购单审核页面查询待审核信息
点击审核,进入审核页面
输入审核信息
点击提交
1.4.4.2 操作
l 采购单待审核信息
查询pur_bus_order表的记录,只查询status值等于4 (总经理审核中)的记录
l 提交审核信息
向pur_bus_order_audit表插入一条记录(审核信息)
根据主键更新pur_bus_order表的记录
当采购单审核不通过时:status值更新为5(总经理审核不通过)
当采购单审核通过时,status值更新为6(财务审核中)
1.4.5 财务审核采购单
参考部门经理审核实现
1.5 需求变更
1.5.1 流程变更1
针对上边的流程变更如下:
需要修改部门经理审核采购单功能,判断采购金额:
如果大于1万元则更新pur_bus_order表中的status字段为4总经理审核中
如果小于等于1万元则更新pur_bus_order表中的status字段为6财务审核中
1.5.2 流程变更2
将上边的流程中总经理审核和财务审核位置颠倒,变为:
针对上边的流程变更需要将财务审核采购单和总经理审核采购单功能全部修改。
比如财务审核采购单修改:
审核通过更新pur_bus_order表中的status状态为4(总经理审核中)
1.6 结论
业务系统是通过在采购单表中添加状态字段对业务流程进行管理,在采购单创建提交、部门经理审核、总经理审核、财务审核等操作时在程序代码中对状态值进行硬编码,如果业务流程变更需要修改代码,不利于系统维护。
如果我们采用工作流可以解决上边的问题。
建议:
对于简单的业务流程,流程节点少,流程变化不大,建议业务系统自己管理流程,因为采用工作流将增加工作量和开发成本。
对于复杂的业务流程,流程节点多,流程变化较大,建议使用工作流,虽然增加了工作量和开发成本,但是将有利于系统扩展维护,降低系统维护成本,因为系统上线后主要的工作量是维护。
2 什么是工作流
2.1 工作流介绍
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
2.2 工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
2.2.1 适用行业:
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。
2.2.2 具体应用
1. 关键业务流程:订单、报价处理、采购处理、合同审核、客户电话处理、供应链管理等
2. 行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
3. 人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
4. 财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
5. 客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
6. 特殊服务类:ISO系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。
3 什么是Activiti
3.1 Activiti介绍
Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。
Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。
3.1.1 BPM
BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如EMBA、MBA等均将BPM包含在内。
企业流程管理主要是对企业内部改革,改变企业职能管理机构重叠、中间层次多、流程不闭环等,做到机构不重叠、业务不重复,达到缩短流程周期、节约运作资本、提高企业效益的作用。
比如下边的两个采购流程哪个效率更高?
上边两个流程的区别在于第二个流程在执行时,如果采购金额在一万元以内不再由总经理审批将比第一个流程缩短流程周期,从而提交效率。
再比如下边的例子,哪个效率更高?
上边两个流程的区别在于第二个流程将交费和取药放在一起进行,这样导致的结果是此窗口的工作人员必须具备财务、药学专业知识,岗位强度加大,人员培训难度加大从而导致人员不易扩展,工作效率低下。
3.1.2 Bpm软件
Bpm软件就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具。 通常以Internet方式实现信息传递、数据同步、业务监控和企业业务流程的持续升级优化,从而实现跨应用、跨部门、跨合作伙伴与客户的企业运作。通过BPM软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅提升。
Bpm软件在企业中应用领域广泛,凡是有业务流程的地方都可以bpm软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。
3.1.3 BPMN
BPMN(Business Process Model And Notation)- 业务流程模型和符号 是由BPMI(Business Process Management Initiative)开发的一套标准的业务流程建模符号,使用BPMN提供的符号可以创建业务流程。 2004年5月发布了BPMN1.0规范.BPMI于2005年9月并入OMG(The Object Management Group对象管理组织)组织。OMG于2011年1月发布BPMN2.0的最终版本。
具体发展历史如下:
BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti 就是使用 BPMN 2.0 进行流程建模、流程执行管理,它包括很多的建模符号,比如:
Event 用一个圆圈表示,它是流程中运行过程中发生的事情。
活动用圆角矩形表示,一个流程由一个活动或多个活动组成
一个bpmn图形的例子:
Bpmn图形其实是通过xml表示业务流程,上边的.bpmn文件使用文本编辑器打开:
3.2 Activit如何使用
1) 部署activiti
Activiti是一个工作流引擎(其实就是一堆jar包API),业务系统使用activiti来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)activiti的接口或功能,通常将activiti环境与业务系统的环境集成在一起。
使用activiti流程建模工具(activity-designer)定义业务流程(.bpmn文件) 。
.bpmn文件就是业务流程定义文件,通过xml定义业务流程。
如果使用其它公司开发的工作作引擎一般都提供了可视化的建模工具(Process Designer)用于生成流程定义文件,建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过程图形元素、过程元素拷贝、粘贴、删除等功能。
向activiti部署业务流程定义(.bpmn文件)。
使用activiti提供的api向activiti中部署.bpmn文件(一般情况还需要一块儿部署业务流程的图片.png)
4) 启动一个流程实例(ProcessInstance)
启动一个流程实例表示开始一次业务流程的运行,比如员工请假流程部署完成,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影响,就好比定义一个java类,实例化两个对象一样,部署的流程就好比java类,启动一个流程实例就好比new一个java对象。
5) 用户查询待办任务(Task)
因为现在系统的业务流程已经交给activiti管理,通过activiti就可以查询当前流程执行到哪了,当前用户需要办理什么任务了,这些activiti帮我们管理了,而不像上边需要我们在sql语句中的where条件中指定当前查询的状态值是多少。
用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采购单创建后由部门经理审核,这个过程也是由activiti帮我们完成了,不需要我们在代码中硬编码指定下一个任务办理人了。
7) 流程结束
当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。