# bbflow **Repository Path**: bigbeard/bbflow ## Basic Information - **Project Name**: bbflow - **Description**: 组态执行工具 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-11-30 - **Last Updated**: 2026-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BB-Flow 流程引擎 BB-Flow 是一个轻量级的 Java 流程引擎,支持通过 JSON 配置定义流程模板,提供灵活的节点执行机制和强大的流程控制能力。 ## 特性 - **多节点类型支持**:函数节点、判断节点、容器节点、子流程节点 - **JSON 流程配置**:通过 JSON 格式定义流程模板,易于理解和维护 - **灵活的执行机制**:支持同步/异步执行、条件分支、并行处理 - **丰富的回调机制**:流程开始、结束、节点执行状态回调 - **子流程支持**:支持嵌套子流程执行 - **条件计算**:支持表达式解析和条件判断 - **可扩展性强**:提供二次开发接口,便于自定义节点和条件计算 ## 模块结构 ``` bb-flow-engine/ ├── src/main/java/com/bb/flow/ │ ├── api/ # 接口定义 │ │ ├── entries/ # 数据传递实体 │ │ ├── exception/ # 异常类 │ │ └── type/ # 枚举类型 │ ├── config/ # 配置类 │ │ ├── enumtype/ # 配置枚举 │ │ └── node/ # 节点配置 │ ├── parser/ # JSON 解析器 │ │ └── impl/ # 实现 │ ├── service/ # 核心服务 │ │ ├── api/ # 执行接口 │ │ ├── exception/ # 服务异常 │ │ └── imp/ # 实现 │ └── util/ # 工具类 └── src/test/ # 测试代码 ``` ## 核心概念 ### 节点类型 (NodeType) | 类型 | 说明 | |------|------| | Function | 函数节点,执行具体的业务逻辑 | | Judge | 判断节点,根据条件决定下一步走向 | | Container | 容器节点,包含多个内部节点 | | SubFlow | 子流程节点,调用其他流程模板 | ### 执行状态 (ExecuteState) - **NotStart**: 未开始 - **Running**: 运行中 - **Success**: 执行成功 - **Fail**: 执行失败 - **Skip**: 跳过 - **Wait**: 等待 ### 等待方式 (WaitType) - **NoWait**: 不等待,立即执行 - **WaitThread**: 等待线程执行完成 - **WaitTime**: 等待指定时间 ## 快速开始 ### 1. 添加依赖 ```xml com.bb.flow bb-flow-engine 1.0.0 ``` ### 2. 创建流程模板 (JSON) ```json { "flowTemplateName": "userLoginFlow", "flowTextInfo": "用户登录流程", "flowNodes": { "startNode": { "nodeKey": "start", "nodeType": "Function", "startNode": true, "classInfo": { "className": "com.example.UserLogin" }, "nextNodeKey": "judgeNode" }, "judgeNode": { "nodeKey": "judgeNode", "nodeType": "Judge", "condition": { "classInfo": { "className": "com.example.JudgeValidateCode" } }, "toNodes": [ { "nodeKey": "validateSuccess", "expression": "true" }, { "nodeKey": "validateFail", "expression": "false" } ] } } } ``` ### 3. 使用流程引擎 ```java // 创建流程驱动实例 FlowDriver flowDriver = new FlowDriverExecutor(); // 注册流程模板 String flowJson = "{\"flowTemplateName\":\"testFlow\",...}"; flowDriver.addFlowTemplate(flowJson); // 启动流程 String context = "any context object"; flowDriver.startFlow("testFlow", "instance_001", context); // 注册回调 flowDriver.registerFlowStartCallback(flowStartInfo -> { System.out.println("流程开始: " + flowStartInfo.getFlowTemplateName()); }); flowDriver.registerFlowEndCallback(flowEndInfo -> { System.out.println("流程结束: " + flowEndInfo.getFlowEndType()); }); ``` ## 开发自定义节点 ### 实现函数节点 ```java public class MyFunctionNode extends FlowNodeBase { @Override public void execute() { // 获取流程上下文数据 FlowContext context = getFlowNodeData(); Object data = context.getFlowContext(); // 业务逻辑处理 System.out.println("执行自定义节点..."); // 通知引擎执行结果 notifyDriver(ExecuteState.Success); } } ``` ### 实现判断节点 ```java public class MyJudgeNode implements ConditionValueCalc, ExpressionCalc { @Override public ConditionResult calcExpress(FlowContext flowNodeData) { // 计算条件表达式的值 ConditionResult result = new ConditionResult(); result.setResult(true); return result; } @Override public boolean calc(String expression, FlowContext flowNodeData, ConditionResult conditionNodeValueInfos) { // 根据表达式和计算结果判断走向 return (boolean) conditionNodeValueInfos.getResult(); } } ``` ## 配置说明 ### 节点通用属性 | 属性 | 说明 | |------|------| | nodeKey | 节点唯一标识 | | nodeType | 节点类型 | | startNode | 是否为起始节点 | | waitType | 等待方式 | | waitTime | 等待时间(毫秒) | | nextNodeKey | 下一节点Key | ### 类信息 (ClassInfo) ```json { "className": "com.example.MyNode", "properties": { "propertyName": "propertyValue" } } ``` ## 流程图示例 ``` [startNode] --> [JudgeNode] --> {true} --> [SuccessNode] | | {false} --> [FailNode] ``` ## 许可证 MIT License