# 部署记录状态枚举分析 ## 状态使用情况统计 ### ✅ 需要保留的状态 | 状态 | 使用场景 | 来源 | 是否终态 | 备注 | |------|---------|------|---------|------| | **CREATED** | 1. 创建记录时初始状态
2. 工作流状态转换
3. 统计查询(30分钟内视为运行中)
4. isDeploying 判断 | 工作流状态 CREATED | ❌ | 初始状态,30分钟内视为正在部署 | | **PENDING_APPROVAL** | 1. 审批任务创建时设置 | 审批事件 | ❌ | 审批阶段专用状态 | | **RUNNING** | 1. 审批通过时设置
2. 工作流状态转换
3. 统计查询
4. isDeploying 判断 | 工作流状态 RUNNING
审批通过事件 | ❌ | 运行中状态 | | **SUCCESS** | 1. 工作流状态转换(COMPLETED)
2. 统计查询(成功计数) | 工作流状态 COMPLETED | ✅ | 部署成功 | | **FAILED** | 1. 工作流状态转换
2. 统计查询(失败计数) | 工作流状态 FAILED | ✅ | 部署失败 | | **PARTIAL_SUCCESS** | 1. 工作流状态转换(COMPLETED_WITH_ERRORS)
2. 统计查询(失败计数) | 工作流状态 COMPLETED_WITH_ERRORS | ✅ | 部分成功(存在失败节点) | | **CANCELLED** | 1. 审批被拒绝时设置
2. 统计查询(失败计数) | 审批拒绝事件 | ✅ | 已取消(审批被拒) | | **TERMINATED** | 1. 工作流状态转换
2. 统计查询(失败计数) | 工作流状态 TERMINATED | ✅ | 已终止(手动终止) | ### ❓ 可能不需要的状态 | 状态 | 使用场景 | 来源 | 是否终态 | 问题分析 | |------|---------|------|---------|---------| | **SUSPENDED** | 1. 工作流状态转换(但实际未使用) | 工作流状态 SUSPENDED | ❌ | **问题**:
1. ❌ 未在 `isFinalState()` 中(不是终态)
2. ❌ 未在统计查询中使用
3. ❌ 未在 `isDeploying` 判断中使用
4. ❌ 部署场景中可能不需要暂停功能
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. 简化状态模型,减少维护成本 如果未来需要暂停功能,可以再添加回来。