1.工作流
1.1什么是工作流
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。
它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标, 或者促使此目标的实现”。
1.2工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?
就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软 件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。
即使没有工作流业 务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
1.2.1适应行业
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。
1.2.2具体应用
- 关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等
- 行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报 周报等凡是原来手工流转处理的行政表单。
- 人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
- 财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
- 客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
- 特殊服务类:ISO 系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。
1.3 工作流实现方式
在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来 跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。
针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。
如果合格将状 态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。
这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候, 这种方式所编写的代码也要进行调整。
那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以 不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。
1.4工作流实现原理分析
如何可以做到我们在业务流程发生变更后,我们的业务系统代码可以不发生改变?此时我们就来分 析一下原理。
具体分析过程如下图所示:
2.Activiti7
2.1Activiti7简介
Alfresco 软件在 2010 年 5 月17 日宣布Activiti 业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM 的专家 Tom Baeyens 担任,Tom Baeyens 就是原来 jbpm 的架构师,而 jbpm 是一个非常有名的工作流引擎,当然activiti 也是一个工作流引擎。
Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务 流程由activiti 进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。
官方网站:https://www.activiti.org/
2.2BPM
BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如 EMBA、MBA 等均将BPM 包含在内。
企业流程管理主要是对企业内部改革,改变企业职能管理机构重叠、中间层次多、流程不闭环 等,做到机构不重叠、业务不重复,达到缩短流程周期、节约运作资本、提高企业效益的作用。
2.3Activiti7操作流程
1.部署Activiti,一般将Activiti和业务部署到一起
2.定义流程图
3.通过Activiti提供API生成流程定义的内容
4.用户查看代办流程
5.用户处理
6.流程结束
2.4安装Activiti Designer 流程设计器:
idea插件官网:https://plugins.jetbrains.com/
打开IDEA工具,选择file---->settings---->plugins
方案一:搜索actiBPM插件,如果能搜索到的情况下右侧有下载链接
方案二:进入IDEA插件官网,搜索actiBPM,点击Get获取,选择最新版本进行下载,下载完成是一个jar包
重复上面的动作打开IDEA工具,选择file---->settings---->plugins,点击小齿轮设置,选择第三项Install Plugin from disk
选择对应Jar包,然后就可以看到对应的actiBMP,点击Restart重启IDEA
2.5编写流程图:
创建一个bpmn文件,通过每一个流程控制内容书写流程
使用alt加鼠标移动图标
3.搭建Activiti开发环境
3.1创建数据库
CREATE DATABASE activiti DEFAULT CHARACTER SET utf8;
3.1导入依赖
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.wish</groupId> 8 <artifactId>activiti7_project</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <name>activiti7_project</name> 12 <!-- FIXME change it to the project's website --> 13 <url>http://www.example.com</url> 14 15 <properties> 16 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 17 <maven.compiler.source>1.7</maven.compiler.source> 18 <maven.compiler.target>1.7</maven.compiler.target> 19 <slf4j.version>1.6.6</slf4j.version> 20 <log4j.version>1.2.12</log4j.version> 21 </properties> 22 <dependencies> 23 <dependency> 24 <groupId>org.activiti</groupId> 25 <artifactId>activiti-engine</artifactId> 26 <version>7.0.0.Beta1</version> 27 </dependency> 28 29 <dependency> 30 <groupId>org.activiti</groupId> 31 <artifactId>activiti-spring</artifactId> 32 <version>7.0.0.Beta1</version> 33 </dependency> 34 35 <dependency> 36 <groupId>org.activiti</groupId> 37 <artifactId>activiti-bpmn-model</artifactId> 38 <version>7.0.0.Beta1</version> 39 </dependency> 40 41 <dependency> 42 <groupId>org.activiti</groupId> 43 <artifactId>activiti-bpmn-converter</artifactId> 44 <version>7.0.0.Beta1</version> 45 </dependency> 46 47 <dependency> 48 <groupId>org.activiti</groupId> 49 <artifactId>activiti-json-converter</artifactId> 50 <version>7.0.0.Beta1</version> 51 </dependency> 52 53 <dependency> 54 <groupId>org.activiti</groupId> 55 <artifactId>activiti-bpmn-layout</artifactId> 56 <version>7.0.0.Beta1</version> 57 </dependency> 58 59 <dependency> 60 <groupId>org.activiti.cloud</groupId> 61 <artifactId>activiti-cloud-services-api</artifactId> 62 <version>7.0.0.Beta1</version> 63 </dependency> 64 65 <dependency> 66 <groupId>mysql</groupId> 67 <artifactId>mysql-connector-java</artifactId> 68 <version>5.1.40</version> 69 </dependency> 70 71 <dependency> 72 <groupId>junit</groupId> 73 <artifactId>junit</artifactId> 74 <version>4.12</version> 75 </dependency> 76 77 <!-- log start --> 78 <dependency> 79 <groupId>log4j</groupId> 80 <artifactId>log4j</artifactId> 81 <version>${log4j.version}</version> 82 </dependency> 83 <dependency> 84 <groupId>org.slf4j</groupId> 85 <artifactId>slf4j-api</artifactId> 86 <version>${slf4j.version}</version> 87 </dependency> 88 <dependency> 89 <groupId>org.slf4j</groupId> 90 <artifactId>slf4j-log4j12</artifactId> 91 <version>${slf4j.version}</version> 92 </dependency> 93 <!-- log end --> 94 95 <dependency> 96 <groupId>org.mybatis</groupId> 97 <artifactId>mybatis</artifactId> 98 <version>3.4.5</version> 99 </dependency> 100 101 <dependency> 102 <groupId>commons-dbcp</groupId> 103 <artifactId>commons-dbcp</artifactId> 104 <version>1.4</version> 105 </dependency> 106 </dependencies> 107 108 <build> 109 <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> 110 <plugins> 111 <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> 112 <plugin> 113 <artifactId>maven-clean-plugin</artifactId> 114 <version>3.1.0</version> 115 </plugin> 116 <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> 117 <plugin> 118 <artifactId>maven-resources-plugin</artifactId> 119 <version>3.0.2</version> 120 </plugin> 121 <plugin> 122 <artifactId>maven-compiler-plugin</artifactId> 123 <version>3.8.0</version> 124 </plugin> 125 <plugin> 126 <artifactId>maven-surefire-plugin</artifactId> 127 <version>2.22.1</version> 128 </plugin> 129 <plugin> 130 <artifactId>maven-jar-plugin</artifactId> 131 <version>3.0.2</version> 132 </plugin> 133 <plugin> 134 <artifactId>maven-install-plugin</artifactId> 135 <version>2.5.2</version> 136 </plugin> 137 <plugin> 138 <artifactId>maven-deploy-plugin</artifactId> 139 <version>2.8.2</version> 140 </plugin> 141 <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> 142 <plugin> 143 <artifactId>maven-site-plugin</artifactId> 144 <version>3.7.1</version> 145 </plugin> 146 <plugin> 147 <artifactId>maven-project-info-reports-plugin</artifactId> 148 <version>3.0.0</version> 149 </plugin> 150 </plugins> 151 </pluginManagement> 152 </build> 153 </project>
3.2创建Activiti配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/contex 8 http://www.springframework.org/schema/context/spring-context.xsd 9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 10 <!--数据源--> 11 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 12 <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 13 <property name="url" value="jdbc:mysql://localhost:3306/activiti"/> 14 <property name="username" value="root"/> 15 <property name="password" value="123456"/> 16 </bean> 17 18 <!--配置Activiti使用的processEngine对象 默认命名为processEngineConfiguration--> 19 <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> 20 <!--注入数据源--> 21 <property name="dataSource" ref="dataSource"/> 22 <!--配置数据源方式二:--> 23 <!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>--> 24 25 <!--指定数据库生成策略--> 26 <property name="databaseSchemaUpdate" value="true"/> 27 </bean> 28 </beans>
3.3创建一个测试类,加载对应配置文件即可
1 package com.wish; 2 3 import org.activiti.engine.ProcessEngine; 4 import org.activiti.engine.ProcessEngineConfiguration; 5 6 public class TestRun { 7 public static void main(String[] args) { 8 //加载配置 9 ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); 10 //获取ProcessEngine对象 11 ProcessEngine processEngine = configuration.buildProcessEngine(); 12 } 13 14 }
3.4运行结果
3.5数据库数据