83 lines
3.9 KiB
Markdown
83 lines
3.9 KiB
Markdown
# 部署记录状态枚举分析
|
||
|
||
## 状态使用情况统计
|
||
|
||
### ✅ 需要保留的状态
|
||
|
||
| 状态 | 使用场景 | 来源 | 是否终态 | 备注 |
|
||
|------|---------|------|---------|------|
|
||
| **CREATED** | 1. 创建记录时初始状态<br>2. 工作流状态转换<br>3. 统计查询(30分钟内视为运行中)<br>4. isDeploying 判断 | 工作流状态 CREATED | ❌ | 初始状态,30分钟内视为正在部署 |
|
||
| **PENDING_APPROVAL** | 1. 审批任务创建时设置 | 审批事件 | ❌ | 审批阶段专用状态 |
|
||
| **RUNNING** | 1. 审批通过时设置<br>2. 工作流状态转换<br>3. 统计查询<br>4. isDeploying 判断 | 工作流状态 RUNNING<br>审批通过事件 | ❌ | 运行中状态 |
|
||
| **SUCCESS** | 1. 工作流状态转换(COMPLETED)<br>2. 统计查询(成功计数) | 工作流状态 COMPLETED | ✅ | 部署成功 |
|
||
| **FAILED** | 1. 工作流状态转换<br>2. 统计查询(失败计数) | 工作流状态 FAILED | ✅ | 部署失败 |
|
||
| **PARTIAL_SUCCESS** | 1. 工作流状态转换(COMPLETED_WITH_ERRORS)<br>2. 统计查询(失败计数) | 工作流状态 COMPLETED_WITH_ERRORS | ✅ | 部分成功(存在失败节点) |
|
||
| **CANCELLED** | 1. 审批被拒绝时设置<br>2. 统计查询(失败计数) | 审批拒绝事件 | ✅ | 已取消(审批被拒) |
|
||
| **TERMINATED** | 1. 工作流状态转换<br>2. 统计查询(失败计数) | 工作流状态 TERMINATED | ✅ | 已终止(手动终止) |
|
||
|
||
### ❓ 可能不需要的状态
|
||
|
||
| 状态 | 使用场景 | 来源 | 是否终态 | 问题分析 |
|
||
|------|---------|------|---------|---------|
|
||
| **SUSPENDED** | 1. 工作流状态转换(但实际未使用) | 工作流状态 SUSPENDED | ❌ | **问题**:<br>1. ❌ 未在 `isFinalState()` 中(不是终态)<br>2. ❌ 未在统计查询中使用<br>3. ❌ 未在 `isDeploying` 判断中使用<br>4. ❌ 部署场景中可能不需要暂停功能<br>5. ✅ 工作流层面支持,但部署业务中无用 |
|
||
|
||
## 详细分析
|
||
|
||
### SUSPENDED 状态分析
|
||
|
||
#### 当前实现
|
||
- ✅ 在 `fromWorkflowStatus()` 中支持转换:`SUSPENDED -> SUSPENDED`
|
||
- ✅ 工作流层面支持:`ProcessEventHandler` 会处理 `PROCESS_SUSPENDED` 事件
|
||
|
||
#### 未使用的地方
|
||
1. **未在 `isFinalState()` 中**:说明它不是终态,可以恢复
|
||
2. **未在统计查询中使用**:部署统计不关心暂停状态
|
||
3. **未在 `isDeploying` 判断中使用**:暂停状态不视为正在部署
|
||
4. **实际业务场景**:部署流程一般不需要暂停功能
|
||
|
||
#### 建议
|
||
**可以考虑移除 SUSPENDED 状态**,原因:
|
||
1. 部署是一次性操作,不需要暂停/恢复功能
|
||
2. 如果需要停止部署,应该使用 `TERMINATED` 或 `CANCELLED`
|
||
3. 暂停功能更适合长流程(如审批流程),不适合部署
|
||
|
||
### 保留 SUSPENDED 的理由(如果保留)
|
||
1. 未来可能支持部署暂停功能
|
||
2. 保持与工作流状态枚举的一致性
|
||
3. 如果移除,需要在 `fromWorkflowStatus()` 中处理 `SUSPENDED` 状态(可能转换为 `RUNNING` 或其他状态)
|
||
|
||
## 推荐方案
|
||
|
||
### 方案A:移除 SUSPENDED(推荐)
|
||
|
||
**优点**:
|
||
- 简化状态模型
|
||
- 符合实际业务需求
|
||
- 减少不必要的状态转换
|
||
|
||
**需要修改**:
|
||
1. 从枚举中移除 `SUSPENDED`
|
||
2. 修改 `fromWorkflowStatus()`,将 `SUSPENDED` 转换为其他状态(如 `RUNNING` 或 `FAILED`)
|
||
3. 更新文档
|
||
|
||
### 方案B:保留 SUSPENDED(保守)
|
||
|
||
**优点**:
|
||
- 保持与工作流状态一致
|
||
- 为未来扩展预留空间
|
||
|
||
**需要完善**:
|
||
1. 在 `isFinalState()` 中明确处理(虽然不是终态,但需要明确逻辑)
|
||
2. 在统计查询中明确如何处理(计入哪个分类)
|
||
3. 在 `isDeploying` 判断中明确处理
|
||
|
||
## 结论
|
||
|
||
**推荐移除 `SUSPENDED` 状态**,因为:
|
||
1. 部署业务不需要暂停功能
|
||
2. 当前完全未使用
|
||
3. 简化状态模型,减少维护成本
|
||
|
||
如果未来需要暂停功能,可以再添加回来。
|
||
|