# flow-rule-engine **Repository Path**: felix-ma/flow-rule-engine ## Basic Information - **Project Name**: flow-rule-engine - **Description**: 数据处理规则引擎,参考thingsboard中的规则引擎 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 116 - **Forks**: 70 - **Created**: 2020-04-10 - **Last Updated**: 2025-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # flow-rule-engine ## 介绍 数据处理规则引擎,参考thingsboard中的规则引擎 ## 技术栈 * SpringBoot * Mybatis-plus * Jackson * Lombok * PostgreSQL 选用mybatis而非jpa的原因: > 国内开发人员对jpa的使用并没有tb团队开发人员那么好。mybatis简单易上手。 > > 如果是考虑jpa的动态表生成,项目里面实现类installService用于数据库表结构创建。 > > 如果是考虑jpa的简单单表查询,mybatis-plus也能实现。 ## 软件架构 ### 组件说明 | module | 说明 | | ----------------- | ----------------- | | actor-core | actor模型核心实现 | | application | 启动类 | | dao | 数据库映射层 | | engine-api | 规则引擎服务 | | engine-components | 规则模块 | | service | 核心业务实现 | | ui | 页面 | | webapi | web接口 | ### 组件关系 ## 使用说明 ### 启动类 `application` 的模块里面的启动类 `RuleEngineInstaller` 的 `main` 方法为安装数据库类 `application` 的模块里面的启动类 `RuleEngineApplication` 的 `main` 方法为启动类 ### 测试用例 `application` 的模块下的 `RuleEngineFlowIntegrationTest` 测试方法 ## 后端设计 * 取消tb中租户 `Tenant` 的概念,改为 `Rule` ,`tenantId -> ruleId` * 取消 `EntityId` 的设计,因为tb里面的所有实体的 `id` 都有一个 `EntityType` 对应。此作用是在 `EntityRelation` 关联表里面标记出 `from` 和 `to `。抽取出单独的规则引擎之后,关联表就没有那么多了,只是一个节点与规则的关系。将所有的 `id` 改为了 `String` 类型 * 初步版本删除了多余的 `Actor` 事件。仅保留了最基础的规则流转,`RuleNode -> RuleChain -> RuleNode`。 * 取消了 `root` 规则引擎的概念,tb中一个 `Tenant` 中只能有一个 `root` 的规则流程入口。现改为项目启动加载所有的规则流程,根据发送消息体中的 `ruleId` 执行不同的规则流程。 ### 功能列表 - [x] 框架搭建,规则节点扩展开发 - [x] 规则引擎数据流转 - [x] 流程持久化 - [x] 组件持久化 - [x] 规则引擎修改动态加载 - [x] 数据流转:节点到节点,节点到规则链 - [x] 数据流转:1对1,1对N - [x] 数据流转日志记录 - [x] js执行引擎 - [ ] 组件动态加载 - [ ] 集群模式 - [ ] 前端页面 ## 前端设计 ### 流程绘制组件技术选型 https://github.com/ghostiam/vue-blocks ![](README.assets/Draggable-Workflow-Diagram-In-Vue-Blocks.png) | 优点 | 缺点 | | ------------------------------------------ | ------------------------------------------------------------ | | 功能较匹配,支持不同类型的节点不同的修改框 | 不支持连接线上携带数据,不支持导入导出json格式,连线无法删除,需要二次开发实现。 | https://github.com/Jeffreyrn/vue-simple-flowchart ![](README.assets/Simple-Flowchart-Editor-For-Vue.js.png) | 优点 | 缺点 | | ------------ | -------------------------------------------- | | 连线可以删除 | 不支持动态节点动态修改弹窗,需要二次开发实现 | https://github.com/guozhaolong/wfd-vue ![](README.assets/1.jpg) | 优点 | 缺点 | | -------------------------- | ------------------------------------------------------------ | | 完成度较高,使用G6框架实现 | 功能优点多余需要删减,按键没有绑定,没有框选,需要二次开发。 | ### 流程功能列表 * 动态节点加载 * 动态节点配置 * 流程图的配置json保存与恢复 * 连线的信息传递