# flowable6-demo **Repository Path**: Mr.Lin/flowable6-demo ## Basic Information - **Project Name**: flowable6-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-26 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Flowable请假流程示例 本项目是一个基于Flowable 6.8.1的请假流程示例,演示了完整的请假流程:提交→经理审批(可通过/拒绝/驳回,1天后自动通过)→完成。 ## 一、Flowable核心概念 ### 1. 流程引擎(ProcessEngine) - **概念**:Flowable的核心组件,负责管理所有流程相关的操作 - **作用**:初始化和管理流程定义、执行实例、任务等 - **特点**:线程安全,通常在应用启动时创建,应用关闭时销毁 ### 2. 流程定义(ProcessDefinition) - **概念**:使用BPMN 2.0规范定义的流程模板 - **作用**:描述流程的结构、任务、网关等元素 - **存储**:存储在`ACT_RE_PROCDEF`表中 ### 3. 流程实例(ProcessInstance) - **概念**:流程定义的具体执行实例 - **作用**:表示一个正在执行或已完成的流程 - **存储**:运行时存储在`ACT_RU_EXECUTION`表,历史存储在`ACT_HI_PROCINST`表 ### 4. 任务(Task) - **概念**:流程中需要人工或系统处理的步骤 - **类型**:用户任务、服务任务、脚本任务等 - **存储**:运行时存储在`ACT_RU_TASK`表,历史存储在`ACT_HI_TASKINST`表 ### 5. 执行实例(Execution) - **概念**:流程实例的执行路径 - **作用**:跟踪流程的执行状态和位置 - **存储**:存储在`ACT_RU_EXECUTION`表 ### 6. 流程变量(Variable) - **概念**:流程执行过程中的数据 - **作用**:在流程的不同环节之间传递数据 - **存储**:运行时存储在`ACT_RU_VARIABLE`表,历史存储在`ACT_HI_VARINST`表 ### 7. 部署(Deployment) - **概念**:将流程定义部署到流程引擎的过程 - **作用**:使流程定义可用于创建流程实例 - **存储**:存储在`ACT_RE_DEPLOYMENT`表 ### 8. 身份链接(IdentityLink) - **概念**:流程参与者与流程元素之间的关联 - **作用**:定义谁可以执行特定任务 - **存储**:运行时存储在`ACT_RU_IDENTITYLINK`表,历史存储在`ACT_HI_IDENTITYLINK`表 ## 二、本例子使用的模块和概念对象 ### 1. 核心模块 - **ProcessEngineConfig**:流程引擎配置模块 - 负责创建和配置流程引擎 - 配置MySQL数据库连接 - 设置数据库 schema 更新策略 - **LeaveProcessService**:流程服务模块 - 提供流程部署、启动、任务处理等功能 - 封装了Flowable的核心服务操作 - **LeaveProcessTest**:流程测试模块 - 验证完整的请假流程 - 测试每个环节的状态转换 ### 2. 使用的Flowable服务 - **RepositoryService**:仓库服务 - 用于部署流程定义 - 操作`ACT_RE_*`表 - **RuntimeService**:运行时服务 - 用于启动流程实例 - 查询流程实例状态 - 操作`ACT_RU_*`表 - **TaskService**:任务服务 - 用于查询和完成任务 - 操作`ACT_RU_TASK`表 ### 3. 流程元素 - **StartEvent**:开始事件 - 流程的起点 - **UserTask**:用户任务 - 提交请假任务 - 经理审批任务 - **EndEvent**:结束事件 - 正常结束事件 - 拒绝结束事件 - **SequenceFlow**:顺序流 - 连接各个流程元素 - 定义流程的执行路径 - **BoundaryEvent**:边界事件 - 附加到经理审批任务的定时器事件 - 24小时后自动触发 - **ExclusiveGateway**:排他网关 - 经理审批决策网关:根据审批结果选择路径 - 定时器决策网关:处理自动通过逻辑 ## 三、流程使用步骤 ### 1. 环境准备 - **Java 8**:Flowable 6.8.1要求Java 8或更高版本 - **Maven**:用于依赖管理和构建 - **MySQL**:创建`flowable6`数据库 - 连接URL:`jdbc:mysql://127.0.0.1:3306/flowable6` - 用户名:`root` - 密码:`123456` ### 2. 项目结构 ``` leave-process-demo/ ├── pom.xml # Maven配置文件 ├── README.md # 项目说明文档 ├── src/ │ ├── main/ │ │ ├── java/com/example/flowable/ │ │ │ ├── config/ProcessEngineConfig.java # 流程引擎配置 │ │ │ └── service/LeaveProcessService.java # 流程服务 │ │ └── resources/leave-process.bpmn20.xml # BPMN流程模型 │ └── test/ │ └── java/com/example/flowable/test/LeaveProcessTest.java # 测试用例 ``` ### 3. 流程定义 1. **创建BPMN文件**:`leave-process.bpmn20.xml` 2. **定义流程元素**: - 开始事件 → 提交请假任务 → 经理审批任务(带24小时定时器) → 经理审批决策网关 → 结束事件 3. **设置任务分配**:使用表达式 `${applicant}`、`${manager}` 4. **设置审批结果**:使用流程变量 `${approvalResult}`,取值为 `approve`(通过)、`reject`(拒绝)、`rebut`(驳回) ### 4. 流程部署 ```java // 部署流程定义 deployment = repositoryService.createDeployment() .addClasspathResource("leave-process.bpmn20.xml") .name("请假流程") .deploy(); ``` ### 5. 启动流程 ```java // 准备流程变量 Map variables = new HashMap<>(); variables.put("applicant", "zhangsan"); variables.put("teamLeader", "lisi"); variables.put("manager", "wangwu"); // 启动流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables); ``` ### 6. 任务处理 1. **查询任务**: ```java List tasks = taskService.createTaskQuery() .taskAssignee(assignee) .list(); ``` 2. **完成提交任务**: ```java taskService.complete(taskId); ``` 3. **处理审批任务**: ```java // 经理审批通过 leaveProcessService.handleApproval(taskId, "approve"); // 经理审批拒绝 leaveProcessService.handleApproval(taskId, "reject"); // 经理审批驳回 leaveProcessService.handleApproval(taskId, "rebut"); ``` ### 7. 流程状态查询 ```java // 查询流程实例 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); // 如果返回null,说明流程已结束 if (processInstance == null) { System.out.println("流程已结束"); } ``` ### 8. 运行测试 ```bash cd leave-process-demo mvn test ``` ## 四、核心表操作说明 ### 1. 部署流程 - **ACT_RE_DEPLOYMENT**:插入部署记录 - **ACT_RE_PROCDEF**:插入流程定义记录 - **ACT_GE_BYTEARRAY**:存储流程模型文件 ### 2. 启动流程 - **ACT_RU_EXECUTION**:插入执行实例记录 - **ACT_RU_TASK**:插入用户任务记录 - **ACT_RU_VARIABLE**:插入流程变量记录 - **ACT_HI_PROCINST**:插入历史流程实例记录 - **ACT_HI_ACTINST**:插入历史活动实例记录 ### 3. 完成任务 - **ACT_RU_TASK**:更新任务状态 - **ACT_RU_EXECUTION**:更新执行实例状态 - **ACT_HI_TASKINST**:插入历史任务实例记录 - **ACT_HI_ACTINST**:更新历史活动实例记录 ### 4. 流程结束 - **ACT_RU_EXECUTION**:删除运行时执行实例 - **ACT_RU_TASK**:删除运行时任务 - **ACT_RU_VARIABLE**:删除运行时变量 - **ACT_HI_PROCINST**:更新历史流程实例状态为已完成 ## 五、学习要点 1. **BPMN 2.0规范**:了解流程定义的基本元素和语法 2. **Flowable核心服务**:掌握各个服务的功能和使用方法 3. **数据库表结构**:理解Flowable的数据存储机制 4. **流程变量**:学会在流程中传递和使用数据 5. **任务分配**:掌握任务分配的不同方式 6. **流程状态管理**:了解如何查询和管理流程状态 ## 六、扩展建议 1. **添加表单**:为任务添加自定义表单 2. **实现审批逻辑**:添加审批通过/拒绝的分支 3. **集成Spring Boot**:使用Spring Boot简化配置 4. **添加历史查询**:实现流程历史数据的查询 5. **添加监听器**:使用任务监听器和执行监听器增强流程功能 通过本示例,您可以快速入门Flowable工作流引擎,了解其核心概念和基本使用方法。