fix:流程设计

This commit is contained in:
2026-03-30 11:54:17 +08:00
parent c3db0d2fdc
commit b349f4032c

View File

@@ -0,0 +1,99 @@
## 一、 产品功能矩阵
| 维度 | 功能点 | 业务描述 |
| :--- | :--- | :--- |
| **流程建模** | **拓扑解析与保存** | 解析执行节点、串/并行网关及连线拓扑;支持流程模板版本管理。 |
| | **节点配置映射** | 支持节点级参数配置,包括执行模式(自动/手动)与调用模式(同步/异步)。 |
| **数据管理** | **参数快照** | 保存算例启动时的输入参数与仿真参数,支持运行中动态更新。 |
| | **文件 I/O 管控** | 自动初始化本地磁盘执行空间;支持基于规则的前序输出文件自动筛选。 |
| **执行控制** | **多样化启动** | 支持“一键全量启动”与“指定任意节点启动”。 |
| | **精细化状态机** | 流程与节点两级状态管控(待执行/执行中/暂停/完成/异常/取消)。 |
| **异常恢复** | **双重重试机制** | 支持“当前节点原位重试”与“前置节点回退重试”。 |
| | **人工干预** | 支持“强制放行/跳过”失败节点。 |
---
## 二、 核心数据库设计 (Database Schema)
### 1. 流程模板表 `simulation_flow_template`
* **uuid**: 模板唯一标识(替代原 `processDefinitionId`)。
* **viewContent**: 静态拓扑 JSON节点、连线、网关
* **approveFlowId**: 关联的审批流 ID。
### 2. 流程实例表 (算例表) `simulation_run`
* **uuid**: 算例唯一标识(替代原 `processInstanceId`)。
* **status**: 总状态INIT, RUNNING, SUSPENDED, SUCCESS, ERROR, CANCELLED
* **viewContent**: **实例运行快照**(启动时从模板拷贝,保证运行中不受模板修改影响)。
* **progress**: `totalStep` / `currentStep` / `currentStepName`
* **paramJson**: 流程全局启动参数。
### 3. 流程节点实例表 `simulation_flow_node`
* **runId / nodeId**: 联合主键。
* **pre_node_ids / next_node_ids**: 存储入度与出度 ID 列表。
* **status**: 节点状态(含 `WAITING_CALLBACK`, `WAITING_USER` 等中间态)。
* **inputDirId / outPutDirId**: 物理 I/O 目录关联。
* **paramJson**: 节点局部配置参数(含 `isAsync`, `executeMode`)。
* **requestJson / resultJson**: 记录执行器入参及回调/执行结果。
---
## 三、 系统核心组件 (Core Components)
### 1. 解析与构建器 (Parser)
* **职责**:解析 `viewContent` JSON。
* **逻辑**:在算例实例化时,一次性计算每个节点的入度(依赖项)与出度(触发项),打平存储至 `simulation_flow_node`,后续流转不再解析 JSON。
### 2. 调度推进器 (Dispatcher)
* **核心动作**
* **寻找下游**:节点 `SUCCESS` 后,获取其 `next_node_ids`
* **并行汇聚 (AND-Join)**:检查下游节点的所有 `pre_node_ids` 是否全部为 `SUCCESS`
* **并发控制**:采用 **Redisson 分布式锁 (锁粒度: runId + targetNodeId)** + **状态机 CAS (INIT -> RUNNING)**,防止并行分支冲突导致节点重复执行。
### 3. 执行器工厂 (Executor Factory)
* **IProcessExecutor 接口**:定义 `execute`(执行)与 `cancel`(强杀)。
* **算子实现**
* `HpcExecutor`:提交 HPC 任务,更新状态为 `WAITING_CALLBACK`
* `LocalAppExecutor`:拉起本地应用,支持同步或异步模式。
### 4. 异步回调中心 (Callback Center)
* **职责**接收外部系统HPC/本地应用)的结果回传。
* **逻辑**:更新节点状态与 `resultJson` -> 判定 `SUCCESS` -> 唤醒 `Dispatcher.dispatchNext()`
---
## 四、 关键业务逻辑流转
### 1. 执行模式管控 (Auto vs Manual)
* **触发点**`Dispatcher` 准备唤醒节点前。
* **逻辑**:检查 `executeMode`,若为 `MANUAL` 则将状态设为 `WAITING_USER` 并停机;待用户调用 `/continueServiceTask` 后,再由 `ExecutorFactory` 真正拉起。
### 2. 调用模式管控 (Async vs Sync)
* **触发点**`Executor.execute()` 内部。
* **逻辑**
* `isAsync: true` -> 记录异步任务,节点设为 `WAITING_CALLBACK`,释放线程。
* `isAsync: false` -> 执行完逻辑后立即将状态设为 `SUCCESS`,手动触发 `Dispatcher`
### 3. 异常管控与干预
* **强制放行**:手动将 `ERROR` 节点改为 `SUCCESS`,由管理员触发 `Dispatcher` 继续向下。
* **重试节点**:将 `ERROR` 改回 `INIT`,清理旧数据,由 `ExecutorFactory` 重新拉起。
* **暂停/恢复**:修改 `simulation_run.status``Dispatcher` 每次调度前校验此状态。
---
## 五、 待完成与深度设计 (To-be-discussed)
### 1. 物理取消与防回调重新激活
* **取消逻辑**:取消算例时,需递归调用所有运行中节点的 `Executor.cancel()`(如 HPC 作业)。
* **防御机制**:回调中心增加状态校验,若节点状态已为 `CANCELLED`,则丢弃后续回传的 `SUCCESS` 信号。
### 2. 精细化状态机
* 定义严格的状态跳转矩阵(例如:`SUCCESS` 节点禁止跳转回 `RUNNING`,除非经过重置)。
### 3. 级联回退重试 (Rewind/Retry)
* **算法**:从选定节点开始,通过 `next_node_ids` **BFS广度优先搜索** 找到所有子图节点。
* **清理**:物理强杀运行中节点 -> 逻辑重置所有子图节点为 `INIT` -> 清理磁盘目录 -> 重新启动。
---