Skip to content

Commit 9de7197

Browse files
committed
fix md
1 parent c743948 commit 9de7197

6 files changed

Lines changed: 151 additions & 108 deletions

File tree

CLAUDE.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,16 @@ Note: `app-mobile`, `flow-pc`, and `flow-mobile` are planned but not yet impleme
6464
The workflow engine is organized into 8 layers:
6565

6666
1. **Workflow Layer** (`com.codingapi.flow.workflow`)
67-
- `Workflow` - Top-level container with nodes, edges, form definition
67+
- `Workflow` - Top-level container with nodes, form definition
6868
- `WorkflowBuilder` - Builder pattern for workflow construction
6969

7070
2. **Node Layer** (`com.codingapi.flow.node`)
71-
- `IFlowNode` - Interface defining node lifecycle methods
72-
- `BaseFlowNode` - Abstract base for all nodes, manages actions and strategies
71+
- `IFlowNode` - Interface defining node lifecycle methods, includes `blocks()` method for child nodes
72+
- `BaseFlowNode` - Abstract base for all nodes, manages actions, strategies, and blocks
7373
- `BaseAuditNode` - Abstract base for audit nodes (ApprovalNode, HandleNode)
74-
- 12 node types: StartNode, EndNode, ApprovalNode, HandleNode, NotifyNode, ConditionBranchNode, ParallelBranchNode, RouterNode, InclusiveBranchNode, SubProcessNode, DelayNode, TriggerNode
74+
- 15 node types: StartNode, EndNode, ApprovalNode, HandleNode, NotifyNode, ConditionBranchNode, ParallelBranchNode, RouterNode, InclusiveBranchNode, SubProcessNode, DelayNode, TriggerNode, ConditionNode, ParallelNode, InclusiveNode
75+
- **Block nodes** (containers with child blocks): ConditionNode, ParallelNode, InclusiveNode
76+
- **Branch nodes** (child nodes in blocks): ConditionBranchNode, ParallelBranchNode, InclusiveBranchNode
7577

7678
3. **Action Layer** (`com.codingapi.flow.action`, `com.codingapi.flow.action.actions`)
7779
- `IFlowAction` - Interface for node actions with `copy()` method
@@ -109,7 +111,7 @@ The workflow engine is organized into 8 layers:
109111
- **Repository Pattern** (`com.codingapi.flow.repository`) - Abstraction for data persistence, isolates framework from implementation. Implementations are in `flow-engine-starter-infra`. Access via `RepositoryHolderContext` singleton.
110112
- **Gateway Pattern** (`com.codingapi.flow.gateway`) - Anti-corruption layer for external system integration (operators, users). Access via `GatewayContext` singleton.
111113
- **Domain Objects** (`com.codingapi.flow.domain`) - DelayTask, DelayTaskManager, UrgeInterval
112-
- **Edge System** (`com.codingapi.flow.edge`) - FlowEdge for node connections
114+
- **Node State System** (`com.codingapi.flow.manager`) - FlowNodeState for node classification (block nodes vs branch nodes), FlowNodeEdgeManager for traversing node relationships via blocks
113115
- **Event System** (`com.codingapi.flow.event`) - 5 event types: FlowRecordStartEvent, FlowRecordTodoEvent, FlowRecordDoneEvent, FlowRecordFinishEvent, FlowRecordUrgeEvent
114116
- **Backup System** (`com.codingapi.flow.backup`) - WorkflowBackup for workflow versioning
115117

Design.md

Lines changed: 94 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,22 @@
1313
- `title`: 流程名称
1414
- `form`: 流程表单定义 (`FormMeta`)
1515
- `nodes`: 节点列表 (`List<IFlowNode>`)
16-
- `edges`: 节点连接关系 (`List<FlowEdge>`)
1716
- `operatorCreateScript`: 创建者匹配脚本
18-
- `isInterfere`: 是否开启干预
19-
- `isRevoke`: 是否开启撤销
17+
- `strategies`: 流程策略列表 (`List<IWorkflowStrategy>`)
2018
- `createdOperator`: 创建者ID
2119
- `createdTime`: 创建时间
20+
- `updatedTime`: 更新时间
2221
- `schema`: 流程版本标识
2322
- **核心方法**:
2423
- `verify()`: 验证流程定义的合法性
25-
- `nextNodes(IFlowNode)`: 获取指定节点的后续节点
24+
- `nextNodes(IFlowNode)`: 获取指定节点的后续节点(通过FlowNodeEdgeManager遍历blocks)
2625
- `getStartNode()`: 获取开始节点
2726
- `getEndNode()`: 获取结束节点
2827
- `toJson()`: 序列化为JSON
2928
- `formJson(String)`: 从JSON反序列化(静态方法)
29+
- **数据结构说明**:
30+
- 节点关系通过`blocks`属性实现层次化结构,不再使用单独的`edges`边关系
31+
- 流程策略(InterfereStrategy、UrgeStrategy)在流程级别配置
3032

3133
#### WorkflowBuilder
3234
- **位置**: `com.codingapi.flow.workflow.WorkflowBuilder`
@@ -47,19 +49,23 @@
4749
3. `generateCurrentRecords(FlowSession)`: 生成当前节点的流程记录
4850
4. `isDone(FlowSession)`: 判断节点是否完成
4951
5. `fillNewRecord(FlowSession, FlowRecord)`: 填充新记录数据
50-
6. `filterBranches()`: 过滤条件分支
51-
7. `actionManager()`: 获取动作管理器
52-
8. `nodeStrategyManager()`: 获取策略管理器
52+
6. `blocks()`: 获取当前节点的子节点列表(块节点有子节点,其他节点返回null或空)
53+
7. `filterBranches()`: 过滤条件分支(块节点用于筛选执行的分支)
54+
8. `actionManager()`: 获取动作管理器
55+
9. `nodeStrategyManager()`: 获取策略管理器
5356

5457
#### BaseFlowNode
5558
- **位置**: `com.codingapi.flow.node.BaseFlowNode`
5659
- **职责**: 所有节点的抽象基类,实现IFlowNode的默认行为
57-
- **核心属性**: `id`, `name`, `order`, `actions`, `strategies`
60+
- **核心属性**: `id`, `name`, `order`, `actions`, `strategies`, `blocks`(子节点列表)
5861
- **核心方法**:
5962
- `isWaitParallelRecord()`: 判断是否等待并行节点汇聚
6063
- `verifySession()`: 委托给ActionManager和StrategyManager验证
6164
- `setActions()`: 支持动作的复制更新(CustomAction除外)
6265
- `setStrategies()`: 支持策略的复制更新
66+
- `blocks()`: 返回子节点列表
67+
- `toMap()`: 序列化为Map(包含blocks字段)
68+
- `fromMap()`: 从Map反序列化(从blocks字段加载子节点)
6369

6470
#### BaseAuditNode
6571
- **位置**: `com.codingapi.flow.node.BaseAuditNode`
@@ -73,22 +79,89 @@
7379
- `isDone()`: 通过StrategyManager判断多人审批完成状态
7480
- `generateCurrentRecords()`: 通过StrategyManager加载操作者并生成记录
7581

76-
#### 节点类型一览 (12种)
82+
#### 块节点系统 (Block Nodes System)
83+
84+
**数据结构变更说明**:
85+
- 旧设计: 使用独立的`FlowEdge`对象和`edges`列表表示节点连接关系
86+
- 新设计: 使用层次化的`blocks`属性,节点包含子节点形成树形结构
87+
88+
**FlowNodeState** - 节点状态分类
89+
- **位置**: `com.codingapi.flow.manager.FlowNodeState`
90+
- **职责**: 对节点进行分类,判断节点类型
91+
- **节点分类**:
92+
- **块节点 (Block Nodes)**: `CONDITION`, `INCLUSIVE`, `PARALLEL` - 包含子节点的容器节点
93+
- **分支节点 (Branch Nodes)**: `CONDITION_BRANCH`, `INCLUSIVE_BRANCH`, `PARALLEL_BRANCH` - 作为块节点的子节点
94+
- **核心方法**:
95+
- `isBlockNode()`: 判断是否为块节点(有blocks属性)
96+
- `isBranchNode()`: 判断是否为分支节点
97+
- `getBlocks()`: 获取节点的子节点列表
98+
- `getFirstBlocks()`: 获取第一个子节点(用于分支节点)
99+
100+
**FlowNodeEdgeManager** - 节点关系管理器
101+
- **位置**: `com.codingapi.flow.manager.FlowNodeEdgeManager`
102+
- **职责**: 管理节点之间的连接关系,通过遍历blocks实现
103+
- **核心方法**:
104+
- `getNextNodes(IFlowNode)`: 获取指定节点的后续节点
105+
- `loadNextNodes()`: 递归加载下一节点(遍历blocks)
106+
- **遍历逻辑**:
107+
1. 如果当前节点是块节点,返回其blocks
108+
2. 如果当前节点是分支节点,返回其第一个block
109+
3. 否则返回节点列表中的下一个节点
110+
4. 递归处理嵌套的blocks
111+
112+
**NodeMapBuilder** - 节点映射构建器
113+
- **位置**: `com.codingapi.flow.builder.NodeMapBuilder`
114+
- **职责**: 从Map数据构建节点对象
115+
- **核心方法**:
116+
- `loadNodes(Map)`: 从Map的"blocks"键加载子节点列表
117+
- `loadActions(Map)`: 加载节点动作
118+
- `loadNodeStrategies(Map)`: 加载节点策略
119+
120+
**节点关系示例**:
121+
```
122+
Workflow
123+
├── StartNode
124+
├── ApprovalNode
125+
├── ConditionNode (块节点)
126+
│ ├── blocks:
127+
│ │ ├── ConditionBranchNode (order=1)
128+
│ │ │ └── blocks: [NotifyNode, EndNode]
129+
│ │ └── ConditionBranchNode (order=2)
130+
│ │ └── blocks: [HandleNode, EndNode]
131+
└── EndNode
132+
```
133+
134+
#### 节点类型一览 (15种)
135+
136+
**基础节点 (9种)**:
137+
138+
| 节点类型 | 类名 | NODE_TYPE | 说明 |
139+
|---------|------|-----------|------|
140+
| 开始节点 | StartNode | `START` | 流程起点 |
141+
| 结束节点 | EndNode | `END` | 流程终点 |
142+
| 审批节点 | ApprovalNode | `APPROVAL` | 需要审批的任务节点 |
143+
| 办理节点 | HandleNode | `HANDLE` | 需要办理的任务节点 |
144+
| 路由分支 | RouterNode | `ROUTER` | 普通路由节点 |
145+
| 通知节点 | NotifyNode | `NOTIFY` | 发送通知 |
146+
| 延迟节点 | DelayNode | `DELAY` | 延迟执行 |
147+
| 触发节点 | TriggerNode | `TRIGGER` | 事件触发 |
148+
| 子流程节点 | SubProcessNode | `SUB_PROCESS` | 嵌套子流程 |
149+
150+
**块节点/容器节点 (3种)** - 包含子节点(blocks):
151+
152+
| 节点类型 | 类名 | NODE_TYPE | 说明 |
153+
|---------|------|-----------|------|
154+
| 条件控制 | ConditionNode | `CONDITION` | 条件分支容器,包含多个ConditionBranchNode |
155+
| 并行控制 | ParallelNode | `PARALLEL` | 并行分支容器,包含多个ParallelBranchNode |
156+
| 包容控制 | InclusiveNode | `INCLUSIVE` | 包容分支容器,包含多个InclusiveBranchNode |
157+
158+
**分支节点 (3种)** - 作为块节点的子节点:
77159

78160
| 节点类型 | 类名 | NODE_TYPE | 说明 |
79161
|---------|------|-----------|------|
80-
| 开始节点 | StartNode | `start` | 流程起点 |
81-
| 结束节点 | EndNode | `end` | 流程终点 |
82-
| 审批节点 | ApprovalNode | `approval` | 需要审批的任务节点 |
83-
| 办理节点 | HandleNode | `handle` | 需要办理的任务节点 |
84-
| 条件分支 | ConditionBranchNode | `condition_branch` | 按条件路由 |
85-
| 并行分支 | ParallelBranchNode | `parallel_branch` | 并行执行多个分支 |
86-
| 路由分支 | RouterNode | `router` | 普通路由节点 |
87-
| 包容分支 | InclusiveBranchNode | `inclusive_branch` | 包容性分支 |
88-
| 通知节点 | NotifyNode | `notify` | 发送通知 |
89-
| 延迟节点 | DelayNode | `delay` | 延迟执行 |
90-
| 触发节点 | TriggerNode | `trigger` | 事件触发 |
91-
| 子流程节点 | SubProcessNode | `sub_process` | 嵌套子流程 |
162+
| 条件分支 | ConditionBranchNode | `CONDITION_BRANCH` | 条件控制下的分支,包含条件脚本 |
163+
| 并行分支 | ParallelBranchNode | `PARALLEL_BRANCH` | 并行控制下的分支 |
164+
| 包容分支 | InclusiveBranchNode | `INCLUSIVE_BRANCH` | 包容控制下的分支 |
92165

93166
---
94167

PRD.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ Flow Engine 是一个企业级流程引擎,支持可视化流程设计、动
5151

5252
基于画布的可视化流程设计,默认初始化开始节点、审批节点、结束节点。
5353

54-
**支持 12 种节点类型**:
54+
**支持 15 种节点类型**:
55+
56+
**基础节点 (9种)**:
5557

5658
| 节点类型 | 说明 | 配置项 |
5759
|---------|------|--------|
@@ -60,14 +62,27 @@ Flow Engine 是一个企业级流程引擎,支持可视化流程设计、动
6062
| 审批节点 | 需要审批的任务节点 | 审批人配置、多人审批策略、超时处理、审批意见、签名设置 |
6163
| 办理节点 | 需要办理的任务节点 | 同审批节点 |
6264
| 通知节点 | 发送通知,无需审批 | 通知人配置、通知内容 |
63-
| 条件分支 | 按条件路由到不同分支 | 条件表达式脚本、分支节点配置 |
64-
| 并行分支 | 并行执行多个分支,需汇聚 | 分支节点配置、汇聚节点 |
6565
| 路由分支 | 普通路由节点 | 分支节点配置 |
66-
| 包容分支 | 包容性分支 | 分支节点配置 |
6766
| 子流程节点 | 嵌套子流程 | 子流程配置、子流程发起人 |
6867
| 延迟节点 | 延迟执行 | 延迟时间、延迟单位 |
6968
| 触发节点 | 事件触发 | 触发条件脚本、触发事件 |
7069

70+
**块节点/容器节点 (3种)** - 包含子节点(blocks):
71+
72+
| 节点类型 | 说明 | 配置项 |
73+
|---------|------|--------|
74+
| 条件控制 | 条件分支容器,包含多个条件分支 | 分支节点配置 |
75+
| 并行控制 | 并行分支容器,包含多个并行分支 | 分支节点配置、汇聚节点 |
76+
| 包容控制 | 包容分支容器,包含多个包容分支 | 分支节点配置 |
77+
78+
**分支节点 (3种)** - 作为块节点的子节点:
79+
80+
| 节点类型 | 说明 | 配置项 |
81+
|---------|------|--------|
82+
| 条件分支 | 条件控制下的分支 | 条件表达式脚本 |
83+
| 并行分支 | 并行控制下的分支 | - |
84+
| 包容分支 | 包容控制下的分支 | 条件表达式脚本 |
85+
7186
**节点配置项**:
7287
1. **基础信息**: 节点名称、节点类型
7388
2. **审批人配置**:

README.md

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ Flow Engine 是一个基于 Java 17 和 Spring Boot 3.5.9 构建的企业级工
88

99
### 核心特性
1010

11-
- **12 种节点类型** - 开始、结束、审批、办理、通知、条件分支、并行分支、路由、包容分支、子流程、延迟、触发节点
11+
- **15 种节点类型** - 开始、结束、审批、办理、通知、条件控制、条件分支、并行控制、并行分支、路由、包容控制、包容分支、子流程、延迟、触发节点
1212
- **8 种动作类型** - 通过、拒绝、保存、加签、委派、退回、转办、自定义
1313
- **策略驱动配置** - 所有关键配置通过策略实现,支持动态扩展
1414
- **Groovy 脚本扩展** - 支持发起人动态匹配、审批人加载、条件判断、自定义操作等
1515
- **多人审批模式** - 顺序审批、会签审批(可配置比例)、或签审批、随机审批
16+
- **层次化节点结构** - 通过blocks属性实现节点间的层次关系,不再使用独立的边关系
1617
- **线程安全** - 脚本运行时使用细粒度同步锁,支持不同脚本并发执行
1718
- **自动资源清理** - 双重清理机制(阈值触发 + 定时清理)避免内存泄漏
1819
- **完善的异常体系** - 基于 RuntimeException 的框架异常层次结构
@@ -57,8 +58,6 @@ flow-engine
5758
│ │ ├── DelayTask # 延迟任务
5859
│ │ ├── DelayTaskManager # 延迟任务管理器
5960
│ │ └── UrgeInterval # 催办间隔
60-
│ ├── edge # 节点连接
61-
│ │ └── FlowEdge # 流程边
6261
│ ├── error # 错误处理
6362
│ │ └── ErrorThrow # 错误抛出器
6463
│ ├── event # 事件系统(5种)
@@ -92,15 +91,18 @@ flow-engine
9291
│ │ ├── OperatorManager # 操作者管理器
9392
│ │ └── WorkflowStrategyManager # 工作流策略管理器
9493
│ ├── node # 节点层
95-
│ │ ├── nodes # 节点实现(12种
94+
│ │ ├── nodes # 节点实现(15种
9695
│ │ │ ├── StartNode # 开始节点
9796
│ │ │ ├── EndNode # 结束节点
9897
│ │ │ ├── ApprovalNode # 审批节点
9998
│ │ │ ├── HandleNode # 办理节点
10099
│ │ │ ├── NotifyNode # 通知节点
100+
│ │ │ ├── ConditionNode # 条件控制节点(块节点)
101101
│ │ │ ├── ConditionBranchNode # 条件分支节点
102+
│ │ │ ├── ParallelNode # 并行控制节点(块节点)
102103
│ │ │ ├── ParallelBranchNode # 并行分支节点
103104
│ │ │ ├── RouterNode # 路由节点
105+
│ │ │ ├── InclusiveNode # 包容控制节点(块节点)
104106
│ │ │ ├── InclusiveBranchNode # 包容分支节点
105107
│ │ │ ├── SubProcessNode # 子流程节点
106108
│ │ │ ├── DelayNode # 延迟节点
@@ -276,21 +278,36 @@ pnpm run dev:app-pc
276278

277279
## 节点类型
278280

281+
### 基础节点 (9种)
282+
279283
| 节点类型 | 描述 | NODE_TYPE |
280284
|---------|------|-----------|
281285
| StartNode | 开始节点 | `START` |
282286
| EndNode | 结束节点 | `END` |
283287
| ApprovalNode | 审批节点 | `APPROVAL` |
284288
| HandleNode | 办理节点 | `HANDLE` |
285289
| NotifyNode | 通知节点 | `NOTIFY` |
286-
| ConditionBranchNode | 条件分支 | `CONDITION_BRANCH` |
287-
| ParallelBranchNode | 并行分支 | `PARALLEL_BRANCH` |
288290
| RouterNode | 路由分支 | `ROUTER` |
289-
| InclusiveBranchNode | 包容分支 | `INCLUSIVE_BRANCH` |
290291
| SubProcessNode | 子流程节点 | `SUB_PROCESS` |
291292
| DelayNode | 延迟节点 | `DELAY` |
292293
| TriggerNode | 触发节点 | `TRIGGER` |
293294

295+
### 块节点/容器节点 (3种) - 包含子节点(blocks)
296+
297+
| 节点类型 | 描述 | NODE_TYPE |
298+
|---------|------|-----------|
299+
| ConditionNode | 条件控制节点 | `CONDITION` |
300+
| ParallelNode | 并行控制节点 | `PARALLEL` |
301+
| InclusiveNode | 包容控制节点 | `INCLUSIVE` |
302+
303+
### 分支节点 (3种) - 作为块节点的子节点
304+
305+
| 节点类型 | 描述 | NODE_TYPE |
306+
|---------|------|-----------|
307+
| ConditionBranchNode | 条件分支节点 | `CONDITION_BRANCH` |
308+
| ParallelBranchNode | 并行分支节点 | `PARALLEL_BRANCH` |
309+
| InclusiveBranchNode | 包容分支节点 | `INCLUSIVE_BRANCH` |
310+
294311
## 动作类型
295312

296313
| 动作类型 | 描述 | ActionType |

TODO.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
| 功能 | 状态 | 说明 |
88
|-----|------|------|
9-
| 12 种节点类型 || StartNode, EndNode, ApprovalNode, HandleNode, NotifyNode, ConditionBranchNode, ParallelBranchNode, RouterNode, InclusiveBranchNode, SubProcessNode, DelayNode, TriggerNode |
9+
| 15 种节点类型 || StartNode, EndNode, ApprovalNode, HandleNode, NotifyNode, RouterNode, SubProcessNode, DelayNode, TriggerNode (基础9种); ConditionNode, ParallelNode, InclusiveNode (块节点3种); ConditionBranchNode, ParallelBranchNode, InclusiveBranchNode (分支节点3种) |
10+
| 节点层次化结构 || 通过blocks属性实现节点间的层次关系,不再使用独立的边关系 |
1011
| 节点生命周期管理 || verifySession → continueTrigger → generateCurrentRecords → fillNewRecord → isDone |
1112
| 节点配置面板 || 基础信息、审批人配置、策略配置 |
1213

@@ -293,7 +294,10 @@
293294

294295
### v0.2.0 (当前开发版本)
295296

296-
- ✅ 12 种节点类型实现
297+
- ✅ 15 种节点类型实现(新增ConditionNode、ParallelNode、InclusiveNode块节点)
298+
- ✅ 节点层次化结构(blocks属性替代独立的边关系)
299+
- ✅ FlowNodeState节点分类(块节点vs分支节点)
300+
- ✅ FlowNodeEdgeManager关系管理器(遍历blocks实现)
297301
- ✅ 延迟节点完整实现
298302
- ✅ 触发节点完整实现
299303
- ✅ 路由节点完整实现
@@ -302,10 +306,7 @@
302306
- ✅ 流程催办功能(UrgeStrategy + UrgeInterval + FlowRecordUrgeEvent)
303307
- ✅ 流程干预功能(InterfereStrategy)
304308
- ✅ 节点撤回功能(RevokeStrategy)
305-
- 🚧 条件分支节点增强
306-
- 🚧 子流程节点完善
307-
- 🚧 包容分支节点完善
308-
- 🚧 前端流程设计器基础功能
309+
- 🚧 前端流程设计器基础功能(@flowgram.ai集成)
309310

310311
### v0.3.0 (计划中)
311312

0 commit comments

Comments
 (0)