-
- <properties>
- <slf4j.version>1.6.6slf4j.version>
- <log4j.versoin>1.2.12log4j.versoin>
- <activiti.version>7.0.0.Beta1activiti.version>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-engineartifactId>
- <version>${activiti.version}version>
- dependency>
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-springartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-bpmn-modelartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-bpmn-converterartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-json-converterartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>org.activitigroupId>
- <artifactId>activiti-bpmn-layoutartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>org.activiti.cloudgroupId>
- <artifactId>activiti-cloud-services-apiartifactId>
- <version>${activiti.version}version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.47version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.4.5version>
- dependency>
-
- <dependency>
- <groupId>commons-dbcpgroupId>
- <artifactId>commons-dbcpartifactId>
- <version>1.4version>
- dependency>
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- dependency>
-
- <dependency>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- <version>${log4j.versoin}version>
- dependency>
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-apiartifactId>
- <version>1.6.6version>
- dependency>
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-log4j12artifactId>
- <version>1.6.6version>
- dependency>
- <dependency>
- <groupId>commons-iogroupId>
- <artifactId>commons-ioartifactId>
- <version>2.6version>
- dependency>
- dependencies>
activiti.cfg.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/contex
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd">
-
-
-
-
-
-
-
-
-
-
-
-
- <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
-
- <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" />
- <property name="jdbcUsername" value="root" />
- <property name="jdbcPassword" value="root" />
-
-
-
-
- <property name="databaseSchemaUpdate" value="true"/>
-
- bean>
- beans>
- /**
- * 使用activiti提供的默认方式来创建mysql表
- */
- @Test
- public void testCreateDbtable() {
- //需使用acti提供的工具类
- //getDefaultProcessEngine会默认从resource中读取名为activiti.cfg.xml的文件
- //创建processEngine时,就会创建mysql的表
-
- /**
- * 2种创建方式
- */
- //默认方式
- //ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //工作流引擎创建
- //System.out.println(processEngine);
-
- //使用自定义方式
- //配置文件的名字可以自定义,bean的名字也可以自定义
- ProcessEngineConfiguration processEngineConfigurationFromResource =
- ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml", "processEngineConfiguration");
- //获取流程引擎
- ProcessEngine processEngine = processEngineConfigurationFromResource.buildProcessEngine();
- System.out.println(processEngine);
-
- /**
- * 通过processEngine创建service
- * repositoryService: acti资源管理类:管理控制流程发布和流程定义
- * RuntimeService: acti流程运行管理类:获取流程执行信息
- * TaskService: acti任务管理类:获取任务信息
- * HistoryService: acti历史管理类:查询历史信息
- * ManagerService: acti引擎管理类:对Acti引擎管理和功能维护
- */
- RepositoryService repositoryService = processEngine.getRepositoryService();
- }
1.定义流程,按照BPMN规范,使用流程定义工具,用流程符号把整个流程描述出来
2.部署流程,把画好的流程定义文件,加载到数据库中,生成表的数据
3.启动流程,使用代码操作数据库表中的内容
5.1流程符号

各网关详解:排他网关(Exclusive Gateway) | AWS BPMN2 Gateway参考指南

5.2流程设计器使用
Activiti-Designr使用:16-入门-使用idea流程设计器设计流程_哔哩哔哩_bilibili
使用designer设计器绘制流程,生成.bpmn和.png
1.将.bpmn文件拷贝桌面保存,并把原bmpn文件改成.xml后缀,点击右键生成图片

2.导出桌面png文件

3.将生成的png放回bpmn包下
4.把xml后缀改回bpmn

5.activiti模块简介
- package com.xuy.test;
-
- import org.activiti.engine.*;
- import org.activiti.engine.history.HistoricActivityInstance;
- import org.activiti.engine.history.HistoricActivityInstanceQuery;
- import org.activiti.engine.repository.Deployment;
- import org.activiti.engine.repository.ProcessDefinition;
- import org.activiti.engine.repository.ProcessDefinitionQuery;
- import org.activiti.engine.runtime.ProcessInstance;
- import org.activiti.engine.task.Task;
- import org.apache.commons.io.IOUtils;
- import org.junit.Test;
-
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
- import java.util.zip.ZipInputStream;
-
- public class ActivitiDemo {
-
- /**
- * 测试流程部署
- */
- @Test
- public void testDeployment() {
- //1.创建ProcessEngine
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //2.获取RepoService
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //3.使用service进行流程部署,定义一个流程名字,把bpmn和png部署到数据库中
- Deployment deploy = repositoryService.createDeployment()
- .name("出差申请流程")
- .addClasspathResource("bpmn/evection.bpmn")
- .addClasspathResource("bpmn/evection.png")
- .deploy();
- //4.输出部署信息
- System.out.println("流程部署id=" + deploy.getId());
- System.out.println("流程部署名字=" + deploy.getName());
- }
-
- /**
- * 启动流程实例
- */
- @Test
- public void testStartProcess() {
- //1.创建ProcessEngine
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //2.获取Runtimeservice
- RuntimeService runtimeService = processEngine.getRuntimeService();
- //3.根据流程定义的id启动流程‘
- ProcessInstance instance = runtimeService.startProcessInstanceByKey("myEvection");
- //4.输出内容
- System.out.println("流程定义id:" + instance.getProcessDefinitionId());
- System.out.println("流程实例id:" + instance.getId());
- System.out.println("当前活动id:" + instance.getActivityId());
- }
-
-
- /**
- * 查询个人待执行任务
- */
- @Test
- public void testFindPersonalTaskList() {
- //1.获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //2.获取taskService
- TaskService taskService = processEngine.getTaskService();
- //3.根据流程key 和 任务的负责人查询任务
- List
taskList = taskService.createTaskQuery() - .processDefinitionKey("myEvection") //流程key
- .taskAssignee("创建") //要查询的负责人
- .list();
- //4.输出
- for (Task task : taskList) {
- System.out.println("流程实例id=" + task.getProcessDefinitionId());
- System.out.println("任务id=" + task.getId());
- System.out.println("任务负责人=" + task.getAssignee());
- System.out.println("任务名称=" + task.getName());
- }
- }
-
- /**
- * 完成个人任务
- */
- @Test
- public void completTask() {
- //1.获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //2.获取taskService
- TaskService taskService = processEngine.getTaskService();
- //3.根据任务id,完成创建人任务
-
- //获取经理 -myEvection对应的任务
- Task task = taskService.createTaskQuery()
- .processDefinitionKey("myEvection")
- .taskAssignee("经理")
- .singleResult(); //只是获取单个任务,要获取所有任务,导出list后完成即可
- taskService.complete(task.getId()); //完成经理的任务
-
- //获取总经理 -myEvection对应的任务
- Task task2 = taskService.createTaskQuery()
- .processDefinitionKey("myEvection")
- .taskAssignee("总经理")
- .singleResult();
- taskService.complete(task2.getId()); //完成总经理的任务
-
- //获取财务 -myEvection对应的任务
- Task task3 = taskService.createTaskQuery()
- .processDefinitionKey("myEvection")
- .taskAssignee("财务")
- .singleResult();
- taskService.complete(task3.getId()); //完成财务的任务
- }
-
- /**
- * 使用zip包进行批量部署
- */
- @Test
- public void deployProcessByZip() {
- //获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //获取RepoService
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //流程部署
- //读取资源包文件,构造成inputStream
- InputStream inputStream = this.getClass()
- .getClassLoader()
- .getResourceAsStream("bpmn/evection.zip");
- //用inputStream构造ZipInputStream
- ZipInputStream zipInputStream = new ZipInputStream(inputStream);
- //使用压缩包的流进行流程的部署
- Deployment deploy = repositoryService.createDeployment()
- .addZipInputStream(zipInputStream)
- .deploy();
- System.out.println("流程部署的id" + deploy.getId());
- System.out.println("流程部署的名称" + deploy.getName());
- }
-
- /**
- * 查询流程定义
- */
- @Test
- public void queryProcessDefinition() {
- //获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //获取RepoService
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //获取ProcessDifintionQuery对象
- ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
- //查询当前所有的流程定义,返回流程定义信息的集合
- List
definitionList = definitionQuery.processDefinitionKey("myEvection") - .orderByProcessDefinitionVersion()
- .desc()
- .list();
- //输出信息
- for (ProcessDefinition processDefinition : definitionList) {
- System.out.println("流程定义id=" + processDefinition.getId());
- System.out.println("流程定义名称=" + processDefinition.getName());
- System.out.println("流程定义key=" + processDefinition.getKey());
- System.out.println("流程定义版本=" + processDefinition.getVersion());
- System.out.println("流程定义部署id=" + processDefinition.getDeploymentId());
- }
- }
-
- /**
- * 流程删除部署信息
- * 当前的流程如果并没有完成,想删除需要使用特殊方式,级联删除
- */
- @Test
- public void deleteDeployment() {
- //流程部署id
- String deploymentId = "1";
- //获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //获取RepoService
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //删除流程定义,如果该流程定义已有流程实例启动则删除时出错
- //设置true级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,
- repositoryService.deleteDeployment(deploymentId);
- //级联删除
- repositoryService.deleteDeployment(deploymentId, true);
- }
-
- /**
- * 下载资源
- * 方案1:使用activiti提供的api,下载资源文件
- * 方案2:自己写代码从数据库下载文件,使用jdbc对blob类型,clob类型的数据读取出来,保存到文件目录
- * 解决IO操作:导入 commons-io.jar
- */
- @Test
- public void download() throws IOException {
- //1.获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //2.获取RepoService
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //3.获取ProcessDefintionQuery对象
- ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
- ProcessDefinition definition = definitionQuery.processDefinitionKey("myEvection").singleResult();
- //4.查询流程定义,获取部署id
- String deploymentId = definition.getDeploymentId();
- //5.通过repoService,传递部署id参数,读取资源信息(png和bpmn)
- //获取png图片流,从流程定义表中,获取png图片的目录和名字,通过部署id和文件名来获取图片的资源
- String pngName = definition.getDiagramResourceName();
- InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, pngName);
- //获取bpmn流
- String bpmnName = definition.getResourceName();
- InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, bpmnName);
- //6.构造outputStream流
- File pngFile = new File("dir:/evectionflow.png");
- File bpmnFile = new File("dir:/evectionflow.bpmn");
- FileOutputStream pngOutputStream = new FileOutputStream(pngFile);
- FileOutputStream bpmnOutputStream = new FileOutputStream(bpmnFile);
- //7.输入流,输出流转换
- IOUtils.copy(pngInput, pngOutputStream);
- IOUtils.copy(bpmnInput, bpmnOutputStream);
- //8.关闭流
- pngOutputStream.close();
- bpmnOutputStream.close();
- pngInput.close();
- bpmnInput.close();
- }
-
- /**
- * 查看历史签核信息
- */
- @Test
- public void findHistoryInfo() {
- //获取流程引擎
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- //获取HisService
- HistoryService historyService = processEngine.getHistoryService();
- //获取actinst表的查询对象
- HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
- //构建查询条件
- instanceQuery.processInstanceId("2501").orderByHistoricActivityInstanceStartTime();
- instanceQuery.processDefinitionId("defintionId");
- //查询所有内容
- List
activityInstanceList = instanceQuery.list(); - //输出
- for (HistoricActivityInstance hi : activityInstanceList) {
- System.out.println(hi.getActivityId());
- System.out.println(hi.getActivityName());
- System.out.println(hi.getProcessDefinitionId());
- System.out.println(hi.getProcessInstanceId());
- }
- }
- }