{"id":13630826,"url":"https://github.com/didi/turbo","last_synced_at":"2025-06-15T17:11:00.567Z","repository":{"id":37328172,"uuid":"325218878","full_name":"didi/turbo","owner":"didi","description":"Turbo is a light-weight flow engine framework, support BPMN2.0. 一款轻量级流程引擎服务框架，可作为底层服务支持各类流程设计、低代码设计、工作流、审批流、服务编排等场景","archived":false,"fork":false,"pushed_at":"2025-01-19T13:20:54.000Z","size":2305,"stargazers_count":1057,"open_issues_count":33,"forks_count":205,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-04-13T10:37:01.249Z","etag":null,"topics":["bpmn","flow-engine","java","low-code","lowcode","workflow"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-12-29T07:35:21.000Z","updated_at":"2025-04-09T02:09:48.000Z","dependencies_parsed_at":"2024-01-14T06:51:28.798Z","dependency_job_id":"6683ceda-0dfc-4f08-8fd8-0e5ee4b67502","html_url":"https://github.com/didi/turbo","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/didi/turbo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2Fturbo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2Fturbo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2Fturbo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2Fturbo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didi","download_url":"https://codeload.github.com/didi/turbo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didi%2Fturbo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260016055,"owners_count":22946321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bpmn","flow-engine","java","low-code","lowcode","workflow"],"created_at":"2024-08-01T22:02:00.367Z","updated_at":"2025-06-15T17:11:00.539Z","avatar_url":"https://github.com/didi.png","language":"Java","readme":"# Turbo 简介\n\nTurbo是一款Java实现的轻量级流程引擎，是公司内多个低代码平台的核心后端服务。\n\n# 特性\n\n1. 提供“定义流程，并根据流程定义，执行流程”的核心能力\n\n2. 轻量级的库表操作\n\n3. 支持流程回滚操作 \n\n# 核心能力\n\n我们提供了以下核心能力:\n\n1. 流程定义：保存流程基本信息和流程图模型\n\n2. 流程部署：校验和部署流程模型，记录流程模型快照。部署后流程可以执行\n\n3. 流程执行：从开始节点开始执行，到用户节点挂起或结束节点结束\n\n4. 流程提交：提交指定的用户任务，到下一个用户节点挂起或者结束节点结束\n\n5. 流程回滚：从当前用户节点开始回滚，回滚至上一个用户节点或者开始节点\n\n6. 执行轨迹追溯：查看流程实例的执行轨迹，可用于快照  \n\n# 为什么选择Turbo\n\n### 1. 什么时候使用Turbo\n\n业务支持**模块化**拆分、**有序**执行，并且有**多变**的编排诉求时，可以考虑采用Turbo作为底层引擎，同时可以配合使用 [logicflow](https://github.com/didi/LogicFlow) 进行可视化配置。\n\n\u003ca name=\"demo1\"\u003e**案例1：某团购售后流程**\u003c/a\u003e\n\n用户A在订单列表中选择订单，判断订单状态，如果状态为未发货，则直接跳转至退款申请页，如果状态为待收货则提示不支持售后，跳转至物流信息页，如果状态为已收货，则跳转至售后页填写售后信息并提交。\n\n![](http://img-ys011.didistatic.com/static/didi_opensource/do1_QgkUdghWFBdTaSVLWvnV)\n\n\u003ca name=\"demo2\"\u003e**案例2：请假审批流程**\u003c/a\u003e\n\n员工A输入请假天数，判断请假天数是否大于等于3天，是的话由间接领导审批，否的话则由直属领导批准。\n\n![](http://img-ys011.didistatic.com/static/didi_opensource/do1_fr7DzABANKQ3CLFtVtCB)\n\n### 2. Turbo有什么不同\n\n谈到流程引擎，当前市面上大部分是**Activiti**、**Flowable**、**Camunda**等面向OA场景，功能强大且有比较完整的生态的工作流引擎（平台），同时因为OA复杂的场景，库表关联操作非常多，但是对于其它业务场景，引擎运维以及学习成本较高，性能不可避免有一定损失，不适用于C端场景。  \n\n同时还有部分专注于纯内存执行、无状态的流程引擎，比如阿里的**Compileflow**，这类引擎中断后不可重入，不适用于人机交互场景，适用于执行业务规则。举例：N个人去ktv唱歌，每人唱首歌，ktv消费原价为30元/人，如果总价超过300打九折，小于300按原价付款。\n\nTurbo的定位是兼容BPMN2.0的轻量级流程引擎（而非平台），支持可重入交互，主要负责提供稳定而高效的核心能力：**流程定义**、**流程驱动**，而节点的具体执行由接入方实现，可以快速搭建面向各种场景的流程编排类系统或产品，接入简单，支持灵活扩展，引擎扩展能力通过插件或组件的形式进行补充，支持按需使用，大大降低了用户的运维以及学习成本。\n\n### 3. 开源流程引擎对比\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eActiviti\u003c/td\u003e\n        \u003ctd\u003eCamunda\u003c/td\u003e\n        \u003ctd\u003eCompileflow\u003c/td\u003e\n        \u003ctd\u003eturbo\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003e核心表量\u003c/td\u003e\n        \u003ctd\u003e28\u003c/td\u003e\n        \u003ctd\u003e22\u003c/td\u003e\n        \u003ctd\u003e0\u003c/td\u003e\n        \u003ctd\u003e5\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd  rowspan = \"3\"\u003e 特性 \u003c/td\u003e\n        \u003ctd\u003e中断可重入\u003c/td\u003e\n        \u003ctd\u003e√\u003c/td\u003e\n        \u003ctd\u003e√\u003c/td\u003e\n        \u003ctd\u003e×\u003c/td\u003e\n        \u003ctd\u003e√\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e支持回滚\u003c/td\u003e\n        \u003ctd\u003e×\u003c/td\u003e\n        \u003ctd\u003e√\u003c/td\u003e\n        \u003ctd\u003e×\u003c/td\u003e\n        \u003ctd\u003e√\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e运行模式\u003c/td\u003e\n        \u003ctd\u003e独立运行和内嵌\u003c/td\u003e    \n        \u003ctd\u003e独立运行和内嵌\u003c/td\u003e\n        \u003ctd\u003e内嵌\u003c/td\u003e\n        \u003ctd\u003e内嵌\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd rowspan = \"3\"\u003e兼容性\u003c/td\u003e\n        \u003ctd\u003e流程格式\u003c/td\u003e\n        \u003ctd\u003eBPMN2.0、XPDL、PDL\u003c/td\u003e\n        \u003ctd\u003eBPMN2.0、XPDL、PDL\u003c/td\u003e\n        \u003ctd\u003eBPMN2.0\u003c/td\u003e\n        \u003ctd\u003eBPMN2.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e支持脚本\u003c/td\u003e\n        \u003ctd\u003eJUEL、groovy\u003c/td\u003e    \n        \u003ctd\u003epython、ruby、groovy、JUEL\u003c/td\u003e\n        \u003ctd\u003eQlExpress\u003c/td\u003e\n        \u003ctd\u003egroovy\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e支持数据库\u003c/td\u003e\n        \u003ctd\u003eOracle、SQL Server、MySQL\u003c/td\u003e    \n        \u003ctd\u003eOracle、SQL Server、MySQL、postgre\u003c/td\u003e\n        \u003ctd\u003e无\u003c/td\u003e\n        \u003ctd\u003eMySQL\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n# 关键模型\n\n### 1 流程 (Flow)\n\n定义了起点、终点以及起点到终点需要执行的活动、执行路径、执行策略。\n\n### 2 流程实例 (FlowInstance)\n\n一个流程可能会被多次执行，比如同一个场景的审批流是一个流程，每次有人提交审批这个流程都会被执行一次。流程每执行一次，对应一个流程实例。\n\n### 3 流程元素 (FlowElement)\n\n*考虑兼容性问题，流程元素设计参考了BPMN规范。\n\n构成流程中的各种元素通称为流程元素 (FlowElement)，包括节点 (FlowNode)和顺序流 (SequenceFlow)。\n\n#### 3.1 节点 (FlowNode)\n\n##### 3.1.1 事件节点 (EventNode)\n\n例如：\n\n* 开始节点 (StartEvent)：标识流程的开始；\n* 结束节点 (EndEvent)：标识流程的结束；\n\n##### 3.1.2 活动节点 (ActivityNode)\n\n例如：\n\n* 任务 (Task)：需要处理的节点，例如：\n  * 用户任务节点 (UserTask)：使用方执行任务的节点，比如需要用户提交信息；\n  * 系统任务节点 (ServiceTask)：系统内部自行执行任务的节点；\n* 内嵌子流程 (SubProcess)：将流程作为另一个流程的节点来处理；\n* 调用子流程 (CallActivity)：与内嵌子流程不同的是，调用子流程拥有独立的模型存储，会产生新的流程实例\n\n##### 3.1.3 网关节点 (Gateway)\n\n与SequenceFlow配合使用，用于描述SequenceFlow的执行策略。\n\n例如：\n\n* 排他网关 (ExclusiveGateway)：同一时刻的同一个实例中，根据指定输入，有且只有一条路径(SequenceFlow)被命中；\n\n#### 3.2 顺序流 (SequenceFlow)\n\n记录节点之间的执行顺序，可以配置执行的条件conditions（比如用户点击了“同意”作为输入），conditions只有在与网关节点Gateway配合使用时生效，由Gateway决定conditions的执行策略。 \n\n# 快速开始\n\n## 1.运行环境\n\n1. JDK1.8\n2. mysql\n\n## 2.开发环境\n\n1. JDK1.8\n2. mysql\n3. maven 3.1+\n4. IntelliJ IDEA\n\n## maven\n\n流程引擎核心功能集合\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.didiglobal.turbo\u003c/groupId\u003e\n  \u003cartifactId\u003eengine\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n开发demo，非必须依赖\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.didiglobal.turbo\u003c/groupId\u003e\n  \u003cartifactId\u003edemo\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 3. 配置必要信息\n\n执行[建表语句](engine/src/main/resources/turbo.db.create/turbo.mysql.sql)，在属性文件中配置属性信息\n\n```\n# 必要属性\nspring.datasource.dynamic.primary=engine\nspring.datasource.dynamic.datasource.engine.type=com.alibaba.druid.pool.DruidDataSource\nspring.datasource.dynamic.datasource.engine.username=username\nspring.datasource.dynamic.datasource.engine.password=password\nspring.datasource.dynamic.datasource.engine.driver-class-name=com.mysql.jdbc.Driver\nspring.datasource.dynamic.datasource.engine.url=jdbc:mysql://127.0.0.1:3306/db_engine\n\n```\n\n## 4. 根据demo开始你的Turbo之旅吧\n\n根据上文提到的turbo支持的特性，给出了两个例子，其中整体的流程如下图所示：\n\n![](http://img-ys011.didistatic.com/static/didi_opensource/do1_nR4XrLhyuruDqj9pQtlJ)\n\n其中与业务相关的是流程的定义和流程的执行，跟着下面的两个例子来看流程引擎的使用：\n\nDemo1：\u003ca href=\"#demo1\"\u003e团购售后\u003c/a\u003e\n\n代码：[AfterSaleServiceImpl](demo/src/main/java/com/didiglobal/turbo/demo/service/AfterSaleServiceImpl.java)\n\nDemo2：\u003ca href=\"#demo2\"\u003e请假流程\u003c/a\u003e\n\n代码：[LeaveServiceImpl](demo/src/main/java/com/didiglobal/turbo/demo/service/LeaveServiceImpl.java)\n\n注：例子使用两个service是为了封装sop，在实际开发中sop是有前端页面传递进入，并非是必须再次开发。\n\n## 5. Turbo与LogicFlow交互demo\n\nLogicFlow 是一款流程图编辑框架，提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。使用LogicFlow与Turbo接口交互可实现流程图创建，编辑，保存，发布功能，发布完成流程图即可参考第四部分文档，执行流程。\n\n\n后端代码：[FlowController](demo/src/main/java/com/didiglobal/turbo/demo/controller/FlowController.java)\n[FlowControllerTest](demo/src/main/test/java/com/didiglobal/turbo/demo/FlowControllerTest.java)\n\n前端代码：https://github.com/Logic-Flow/turbo-client\n\n使用文档：[LogicFlowGuide](docs/LogicFlowGuide.md)\n\n代码提供基本用法示例，使用方可以根据自己的业务场景参考使用\n\n## 6. 上菜啦～本期新菜品：新增Turbo插件扩展能力\n\n为了提高Turbo的易扩展性，我们提供了插件机制，通过插件机制，可以扩展节点类型、表达式计算规则以及id生成规则。\n\n为更好地回应社区伙伴的需求，我们推出了并行网关插件，不仅为流程引擎赋予并行执行能力，还可作为插件开发的参考样例，供大家借鉴。\n* 更新日志：[更新日志](./CHANGELOG.md)\n* 插件开发文档：[插件开发文档](./docs/PluginDevelopGuide.md)\n* 并行网关插件文档：[并行网关插件文档](./docs/Parallel\u0026InclusiveGateway.md)\n\n## 7. 联系我们\n### 加入微信群\n添加微信号：logic-flow 加入turbo用户群\n","funding_links":[],"categories":["Java"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidi%2Fturbo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidi%2Fturbo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidi%2Fturbo/lists"}