# activiti **Repository Path**: nikolz/activiti ## Basic Information - **Project Name**: activiti - **Description**: activiti - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2018-06-08 - **Last Updated**: 2022-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # activiti学习 #### 项目介绍 activiti 工作流学习 (当前版本6.0) #### 软件架构 springboot + mybatis + mysql + redis + thymeleaf + spring-security + activiti #### 源码下载 git clone https://gitee.com/nikolz/activiti.git #### 学习资料 1. 官方网站 https://www.activiti.org/ 2. 快速开始 https://www.activiti.org/quick-start 3. 用户指南 https://www.activiti.org/userguide/ 4. 疯狂工作流讲义系列 https://my.oschina.net/JavaLaw?tab=popular #### 开发指南 > 本文描述springboot + activiti6整合方案,其他部分请查阅相关文档。 **前言概要** * **7** 大接口 - RepositoryService:提供一系列管理流程部署和流程定义的API。 - RuntimeService:在流程运行时对流程实例进行管理与控制。 - TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。 - IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。 - ManagementService:提供对流程引擎进行管理和维护的服务。 - HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。 - FormService:表单服务。 * **28** 张表 - act_ge_ 通用数据表,ge是general的缩写 - act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口 - act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口 - act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据 - act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据 参考文档:[Activiti工作流引擎主要表结构详解](https://my.oschina.net/fuyung/blog/472842) 1. pom.xml文件中添加依赖 ```java org.activiti activiti-spring-boot-starter-basic 6.0.0 ``` 2. 数据源和activiti配置(application.yml) ```java # activiti default configuration spring: activiti: #自动部署验证设置:true-开启(默认)、false-关闭 check-process-definitions: false database-schema-update: true #默认值 # process-definition-location-prefix: classpath:/processes/ # process-definition-location-suffixes: # - **.bpmn # - **.bpmn20.xml history-level: full ``` 3. 绘制流程图 1). Eclipse插件 > 安装 **Activiti-Designer** 插件 ,安装方法请自行查阅 2). idea插件 > 安装 **actiBPM** 插件 ,安装方法请自行查阅 3). activiti-app > 浏览器访问http://localhost:8080/activiti-app 登录账户:admin : test > > 参考文档:[下载和运行Activiti](https://my.oschina.net/JavaLaw/blog/1542771) 4. 部署流程 两种方式部署 1). springboot自动部署 > 配置 spring.activiti.check-process-definitions: true 2). 手动部署 ```java //根据bpmn文件部署流程 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/" + bpmn).deploy(); ``` 5. 执行任务 ```java //设置执行人 identityService.setAuthenticatedUserId(userName); //开始流程 ProcessInstance vacationInstance = runtimeService.startProcessInstanceByKey(Constant.PROCESS_DEFINE_KEY);//流程名称 eg: testProcess // 查询当前任务 Task currentTask = taskService.createTaskQuery().processInstanceId(vacationInstance.getId()).singleResult(); // 申明任务 taskService.claim(currentTask.getId(), userName); //任务参数 Map vars = new HashMap<>(4); vars.put("applyUser", userName); vars.put("days", vac.getDays()); vars.put("reason", vac.getReason()); //执行任务 taskService.complete(currentTask.getId(), vars); ``` 6. 查询任务 > 查询可参考文档: > > [Activiti数据查询(一)](https://my.oschina.net/JavaLaw/blog/1548089) > > [Activiti数据查询(二)](https://my.oschina.net/JavaLaw/blog/1549900) ​ 1). 查询当前任务 ```java List instanceList = runtimeService.createProcessInstanceQuery().startedBy(userName).list(); ``` ​ 2). 查询历史任务 7. ```java List hisProInstance = historyService.createHistoricProcessInstanceQuery() .processDefinitionKey(Constant.PROCESS_DEFINE_KEY).startedBy(userName).finished() .orderByProcessInstanceEndTime().desc().list(); ``` #### 遇到的的问题 1. 如果项目里引入了mapper,则需要再mapper依赖中排除persistence-api,否则会以下的错误: `Consider defining a bean of type 'javax.persistence.EntityManagerFactory' in your configuration.` 2. 在配置文件中,设置: > spring.activiti.check-process-definitions: false 如果不设置,则会报错: `java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist` 如果设置为true,则需要在resources目录下添加processes文件夹 3. 在启动类上排除SecurityAutoConfiguration类 > @SpringBootApplication(exclude = SecurityAutoConfiguration.class) 如果不加,则报错: `java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy`