diff --git a/backend/docs/workflow-development.md b/backend/docs/workflow-development.md
index 65f0a0b8..0823132e 100644
--- a/backend/docs/workflow-development.md
+++ b/backend/docs/workflow-development.md
@@ -1,548 +1,494 @@
-# 工作流引擎功能开发文档
+# 工作流引擎开发文档
-## 已实现功能
+## 一、已完成工作
-### 1. 核心功能
-- [x] 工作流定义管理
- - 工作流定义的CRUD操作
- - 工作流状态管理(草稿、发布、禁用)
- - 工作流版本控制
+### 1. 核心实体设计
+- WorkflowDefinition: 工作流定义
+ - 包含基本信息(编码、名称、描述等)
+ - 包含流程定义内容(JSON格式)
+ - 支持版本控制和状态管理
+
+- WorkflowInstance: 工作流实例
+ - 关联工作流定义
+ - 记录执行状态和进度
+ - 支持暂停、恢复、取消等操作
+
+- NodeInstance: 节点实例
+ - 关联工作流实例
+ - 记录节点执行状态和结果
+ - 支持重试和跳过等操作
-- [x] 工作流实例管理
- - 工作流实例的创建和执行
- - 实例状态管理(运行、暂停、完成、失败、取消)
- - 实例执行历史记录
+### 2. 节点类型体系
+- 基础节点类型:
+ - START: 开始节点
+ - END: 结束节点
+ - CONDITION: 条件节点
+ - PARALLEL: 并行节点
+
+- 功能节点类型:
+ - APPROVAL: 审批节点
+ - JENKINS: Jenkins构建节点
+ - SCRIPT: 脚本执行节点
+ - GIT: Git操作节点
+ - NACOS: 配置中心节点
+ - HTTP: HTTP请求节点
+ - NOTIFY: 通知节点
-- [x] 节点实例管理
- - 节点实例的创建和执行
- - 节点状态管理(等待、运行、完成、失败、取消)
- - 节点执行历史记录
+### 3. 工作流引擎实现
+- 核心接口设计
+ - WorkflowEngine: 工作流引擎接口
+ - NodeExecutor: 节点执行器接口
+
+- 默认实现
+ - DefaultWorkflowEngine: 默认工作流引擎实现
+ - AbstractNodeExecutor: 抽象节点执行器
+ - ShellNodeExecutor等具体执行器
-### 2. 节点类型
-- [x] Shell节点
- - 支持Windows/Unix跨平台
- - 工作目录配置
- - 环境变量支持
- - 超时处理
- - 输出流日志记录
+### 4. 变量与日志管理
+- WorkflowVariable: 工作流变量
+ - 支持全局变量和节点变量
+ - 支持变量引用和替换
+
+- WorkflowLog: 工作流日志
+ - 支持不同日志类型和级别
+ - 支持详细的执行记录
-### 3. 日志管理
-- [x] 日志记录
- - 工作流级别日志
- - 节点级别日志
- - 系统级别日志
- - 变量更新日志
+### 5. 权限管理
+- WorkflowPermission: 工作流权限
+ - 支持角色和用户级别的权限控制
+ - 支持操作级别的权限控制
-- [x] 日志查询
- - 工作流日志查询
- - 节点日志查询
- - 支持分页和条件过滤
+### 6. API接口设计
+- 工作流定义管理
+- 工作流实例操作
+- 节点实例管理
+- 日志查询等功能
-## 待实现功能
+### 7. 错误码和消息
+- 工作流相关错误码(2700-2799)
+- 详细的错误消息定义
-### 1. 节点类型扩展
-#### 1.1 Jenkins节点
+## 二、待完成工作
+
+### 1. 高级功能实现
+
+#### 1.1 节点执行引擎增强
```java
-// 实现思路:
-1. 添加Jenkins客户端依赖
-```xml
-
- com.offbytwo.jenkins
- jenkins-client
- 0.3.8
-
-```
-
-2. 实现Jenkins节点执行器
-```java
-@Component
-public class JenkinsNodeExecutor extends AbstractNodeExecutor {
- @Override
- protected boolean doExecute(NodeInstance nodeInstance, WorkflowContext context, NodeConfig config) {
- JenkinsNodeConfig jenkinsConfig = (JenkinsNodeConfig) config;
- // 1. 连接Jenkins服务器
- // 2. 触发构建任务
- // 3. 等待构建完成
- // 4. 获取构建结果
- // 5. 处理构建产物
- }
-}
-```
-
-3. 添加构建结果处理
-- 支持构建状态判断
-- 支持测试结果解析
-- 支持构建产物下载
-```
-
-#### 1.2 Git节点
-```java
-// 实现思路:
-1. 添加JGit依赖
-```xml
-
- org.eclipse.jgit
- org.eclipse.jgit
- 6.5.0.202303070854-r
-
-```
-
-2. 实现Git节点执行器
-```java
-@Component
-public class GitNodeExecutor extends AbstractNodeExecutor {
- @Override
- protected boolean doExecute(NodeInstance nodeInstance, WorkflowContext context, NodeConfig config) {
- GitNodeConfig gitConfig = (GitNodeConfig) config;
- // 1. 克隆/拉取代码
- // 2. 切换分支/标签
- // 3. 执行Git操作
- // 4. 提交更改
- // 5. 推送远程
- }
-}
-```
-
-3. 添加Git操作支持
-- 分支管理
-- 标签管理
-- 代码合并
-- 冲突处理
-```
-
-### 2. 日志管理增强
-
-#### 2.1 日志导出功能
-```java
-// 实现思路:
-1. 添加Excel导出依赖
-```xml
-
- org.apache.poi
- poi-ooxml
- 5.2.3
-
-```
-
-2. 实现日志导出服务
-```java
-@Service
-public class WorkflowLogExportService {
- public void exportToExcel(Long workflowInstanceId, OutputStream output) {
- // 1. 查询日志数据
- // 2. 创建Excel工作簿
- // 3. 写入日志数据
- // 4. 格式化和样式设置
- // 5. 输出文件
- }
+public interface NodeExecutor {
+ // 新增预执行检查
+ boolean preCheck(NodeInstance node, WorkflowContext context);
- public void exportToCsv(Long workflowInstanceId, Writer writer) {
- // 1. 查询日志数据
- // 2. 写入CSV头
- // 3. 写入日志数据
- // 4. 刷新输出
- }
-}
-```
-
-3. 添加导出接口
-```java
-@RestController
-@RequestMapping("/api/v1/workflow")
-public class WorkflowLogController {
- @GetMapping("/{instanceId}/logs/export")
- public void exportLogs(@PathVariable Long instanceId,
- @RequestParam String format,
- HttpServletResponse response) {
- // 1. 设置响应头
- // 2. 获取输出流
- // 3. 调用导出服务
- // 4. 处理异常
- }
-}
-```
-
-#### 2.2 日志清理功能
-```java
-// 实现思路:
-1. 添加定时任务配置
-```java
-@Configuration
-@EnableScheduling
-public class WorkflowLogCleanupConfig {
- @Scheduled(cron = "${workflow.log.cleanup.cron}")
- public void cleanupLogs() {
- // 1. 获取清理策略
- // 2. 查询过期日志
- // 3. 批量删除日志
- // 4. 记录清理结果
- }
-}
-```
-
-2. 实现日志清理服务
-```java
-@Service
-public class WorkflowLogCleanupService {
- public void cleanupByTime(LocalDateTime before) {
- // 1. 分批查询日志
- // 2. 物理删除日志
- // 3. 记录清理统计
- }
+ // 新增补偿操作
+ void compensate(NodeInstance node, WorkflowContext context);
- public void cleanupByInstance(Long workflowInstanceId) {
- // 1. 查询实例日志
- // 2. 物理删除日志
- // 3. 记录清理结果
- }
+ // 新增超时处理
+ void handleTimeout(NodeInstance node, WorkflowContext context);
+}
+
+// 节点执行状态追踪
+public class NodeExecutionTracker {
+ private Long nodeInstanceId;
+ private Date startTime;
+ private Date endTime;
+ private String status;
+ private Map metrics;
+ private List logs;
}
```
-### 3. 工作流监控
-
-#### 3.1 执行监控
-```java
-// 实现思路:
-1. 添加监控指标收集
-```java
-@Component
-public class WorkflowMetricsCollector {
- private final MeterRegistry registry;
-
- public void recordExecutionTime(String workflowName, long timeMs) {
- // 记录执行时长
- }
-
- public void recordNodeExecutionTime(String nodeName, long timeMs) {
- // 记录节点执行时长
- }
-
- public void incrementExecutionCounter(String workflowName, String status) {
- // 增加执行计数
- }
-}
-```
-
-2. 实现监控数据存储
-```java
-@Entity
-@Table(name = "wf_workflow_metrics")
-public class WorkflowMetrics {
- // 执行时长
- private Long executionTime;
- // 成功率
- private Double successRate;
- // 失败次数
- private Integer failureCount;
- // 平均节点执行时长
- private Long avgNodeExecutionTime;
-}
-```
-
-3. 添加监控接口
-```java
-@RestController
-@RequestMapping("/api/v1/workflow/metrics")
-public class WorkflowMetricsController {
- @GetMapping("/overview")
- public WorkflowMetricsOverview getOverview() {
- // 返回整体监控数据
- }
-
- @GetMapping("/{workflowId}")
- public WorkflowMetricsDetail getDetail(@PathVariable Long workflowId) {
- // 返回具体工作流监控数据
- }
-}
-```
-
-#### 3.2 告警通知
-```java
-// 实现思路:
-1. 定义告警规则
-```java
-@Entity
-@Table(name = "wf_alert_rule")
-public class AlertRule {
- // 告警类型
- private AlertType type;
- // 告警阈值
- private String threshold;
- // 告警级别
- private AlertLevel level;
- // 通知方式
- private List channels;
-}
-```
-
-2. 实现告警服务
-```java
-@Service
-public class WorkflowAlertService {
- public void checkAndAlert(WorkflowInstance instance) {
- // 1. 获取告警规则
- // 2. 检查是否触发
- // 3. 生成告警信息
- // 4. 发送通知
- }
-
- public void sendAlert(Alert alert) {
- // 1. 获取通知渠道
- // 2. 发送通知
- // 3. 记录通知结果
- }
-}
-```
-
-### 4. 工作流调度
-
-#### 4.1 定时调度
-```java
-// 实现思路:
-1. 添加调度配置
-```java
-@Entity
-@Table(name = "wf_workflow_schedule")
-public class WorkflowSchedule {
- // 调度类型
- private ScheduleType type;
- // Cron表达式
- private String cronExpression;
- // 生效时间
- private LocalDateTime effectiveTime;
- // 失效时间
- private LocalDateTime expireTime;
-}
-```
-
-2. 实现调度服务
+#### 1.2 工作流调度管理
```java
@Service
public class WorkflowScheduleService {
- public void schedule(WorkflowSchedule schedule) {
- // 1. 验证调度配置
- // 2. 创建调度任务
- // 3. 注册到调度器
- // 4. 记录调度状态
- }
+ // 创建调度任务
+ public void createSchedule(WorkflowSchedule schedule);
- public void executeScheduledWorkflow(Long scheduleId) {
- // 1. 获取调度配置
- // 2. 创建工作流实例
- // 3. 执行工作流
- // 4. 记录执行结果
- }
-}
-```
-
-#### 4.2 依赖调度
-```java
-// 实现思路:
-1. 添加依赖配置
-```java
-@Entity
-@Table(name = "wf_workflow_dependency")
-public class WorkflowDependency {
- // 上游工作流
- private Long upstreamWorkflowId;
- // 依赖类型
- private DependencyType type;
- // 触发条件
- private String condition;
-}
-```
-
-2. 实现依赖服务
-```java
-@Service
-public class WorkflowDependencyService {
- public void handleWorkflowComplete(Long workflowInstanceId) {
- // 1. 查询依赖配置
- // 2. 检查触发条件
- // 3. 触发下游工作流
- // 4. 记录依赖执行
- }
-}
-```
-
-### 5. 工作流权限管理
-
-#### 5.1 权限模型
-```java
-// 实现思路:
-1. 定义权限模型
-```java
-@Entity
-@Table(name = "wf_permission")
-public class WorkflowPermission {
- // 权限类型
- private PermissionType type;
- // 权限范围
- private PermissionScope scope;
- // 权限值
- private String value;
-}
-```
-
-2. 实现权限服务
-```java
-@Service
-public class WorkflowPermissionService {
- public boolean hasPermission(Long userId, Long workflowId, PermissionType type) {
- // 1. 查询用户权限
- // 2. 检查继承权限
- // 3. 验证权限范围
- // 4. 返回结果
- }
+ // 修改调度配置
+ public void updateSchedule(WorkflowSchedule schedule);
- public void grantPermission(PermissionGrant grant) {
- // 1. 验证授权者权限
- // 2. 创建权限记录
- // 3. 记录授权日志
- }
-}
-```
-
-### 6. 工作流版本管理
-
-#### 6.1 版本控制
-```java
-// 实现思路:
-1. 添加版本模型
-```java
-@Entity
-@Table(name = "wf_workflow_version")
-public class WorkflowVersion {
- // 版本号
- private String version;
- // 变更内容
- private String changelog;
- // 工作流定义
- private String definition;
-}
-```
-
-2. 实现版本服务
-```java
-@Service
-public class WorkflowVersionService {
- public void createVersion(Long workflowId) {
- // 1. 生成版本号
- // 2. 保存当前定义
- // 3. 记录变更日志
- }
+ // 启用/禁用调度
+ public void toggleSchedule(Long scheduleId, boolean enabled);
- public void rollback(Long workflowId, String version) {
- // 1. 验证版本有效性
- // 2. 恢复历史版本
- // 3. 记录回滚操作
- }
+ // 手动触发
+ public void triggerSchedule(Long scheduleId);
}
+
+// 调度配置表
+CREATE TABLE wf_workflow_schedule (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
+ name VARCHAR(100) NOT NULL COMMENT '调度名称',
+ cron VARCHAR(100) NOT NULL COMMENT 'cron表达式',
+ variables JSON COMMENT '工作流变量',
+ enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用',
+ last_fire_time DATETIME COMMENT '上次触发时间',
+ next_fire_time DATETIME COMMENT '下次触发时间',
+ -- 其他基础字段
+);
```
-### 7. 工作流测试
-
-#### 7.1 模拟执行
+#### 1.3 工作流监控告警
```java
-// 实现思路:
-1. 实现测试环境
-```java
-@Component
-public class WorkflowTestEnvironment {
- public WorkflowContext createTestContext() {
- // 1. 创建测试上下文
- // 2. 初始化测试数据
- // 3. 配置测试参数
- }
-}
-```
-
-2. 实现测试服务
-```java
-@Service
-public class WorkflowTestService {
- public TestResult simulateExecution(Long workflowId) {
- // 1. 准备测试环境
- // 2. 执行工作流
- // 3. 收集测试结果
- // 4. 生成测试报告
- }
-}
-```
-
-### 8. 工作流模板
-
-#### 8.1 模板管理
-```java
-// 实现思路:
-1. 添加模板模型
-```java
-@Entity
-@Table(name = "wf_workflow_template")
-public class WorkflowTemplate {
- // 模板名称
- private String name;
- // 模板描述
- private String description;
- // 模板定义
- private String definition;
- // 参数定义
- private List parameters;
-}
-```
-
-2. 实现模板服务
-```java
-@Service
-public class WorkflowTemplateService {
- public Long createFromTemplate(Long templateId, Map parameters) {
- // 1. 加载模板定义
- // 2. 替换模板参数
- // 3. 创建工作流定义
- // 4. 返回工作流ID
- }
+public interface WorkflowMonitor {
+ // 收集性能指标
+ void collectMetrics(WorkflowInstance instance);
- public void saveAsTemplate(Long workflowId) {
- // 1. 提取工作流定义
- // 2. 提取参数定义
- // 3. 保存为模板
+ // 检查健康状态
+ HealthStatus checkHealth();
+
+ // 触发告警
+ void triggerAlert(AlertType type, String message);
+}
+
+// 监控指标表
+CREATE TABLE wf_workflow_metrics (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ workflow_instance_id BIGINT NOT NULL,
+ metric_name VARCHAR(100) NOT NULL,
+ metric_value DECIMAL(19,2) NOT NULL,
+ collect_time DATETIME NOT NULL,
+ -- 其他基础字段
+);
+
+// 告警记录表
+CREATE TABLE wf_workflow_alert (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ alert_type VARCHAR(50) NOT NULL,
+ target_type VARCHAR(50) NOT NULL,
+ target_id BIGINT NOT NULL,
+ level VARCHAR(20) NOT NULL,
+ message TEXT NOT NULL,
+ status VARCHAR(20) NOT NULL,
+ -- 其他基础字段
+);
+```
+
+#### 1.4 工作流分析统计
+```java
+public interface WorkflowAnalytics {
+ // 执行时长分析
+ Map analyzeExecutionTime(Long workflowId);
+
+ // 成功率分析
+ Map analyzeSuccessRate(Long workflowId);
+
+ // 节点耗时分析
+ List analyzeNodeTime(Long workflowId);
+}
+
+// 分析结果表
+CREATE TABLE wf_workflow_analytics (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ workflow_definition_id BIGINT NOT NULL,
+ analysis_type VARCHAR(50) NOT NULL,
+ time_range VARCHAR(50) NOT NULL,
+ metrics JSON NOT NULL,
+ -- 其他基础字段
+);
+```
+
+### 2. 功能优化计划
+
+#### 2.1 性能优化
+- 引入本地缓存和分布式缓存
+- 实现工作流实例分片执行
+- 优化日志存储和查询
+```java
+@Configuration
+public class WorkflowCacheConfig {
+ @Bean
+ public Cache definitionCache() {
+ return CacheBuilder.newBuilder()
+ .maximumSize(1000)
+ .expireAfterWrite(1, TimeUnit.HOURS)
+ .build();
+ }
+}
+
+public class ShardingWorkflowEngine implements WorkflowEngine {
+ // 分片执行实现
+ public void executeWithSharding(WorkflowInstance instance) {
+ String shardingKey = calculateShardingKey(instance);
+ ShardingContext context = createShardingContext(shardingKey);
+ executeInShard(instance, context);
}
}
```
-## 下一步开发计划
+#### 2.2 可靠性增强
+- 实现节点执行幂等性
+- 增加全局事务控制
+- 完善补偿机制
+```java
+public abstract class IdempotentNodeExecutor implements NodeExecutor {
+ // 幂等性检查
+ protected boolean checkIdempotent(String executionId) {
+ return redisTemplate.opsForValue()
+ .setIfAbsent("node:execution:" + executionId, "1", 24, TimeUnit.HOURS);
+ }
+}
-1. 优先实现日志管理增强功能
- - 日志导出功能
- - 日志清理功能
- - 日志查询性能优化
+@Service
+public class CompensationService {
+ // 注册补偿操作
+ public void registerCompensation(NodeInstance node, Runnable compensation);
+
+ // 执行补偿
+ public void executeCompensation(WorkflowInstance instance);
+}
+```
-2. 实现工作流监控功能
- - 执行监控
- - 告警通知
- - 监控大屏
+#### 2.3 扩展性优化
+- 支持自定义节点类型
+- 支持插件化扩展
+- 提供更多扩展点
+```java
+public interface WorkflowPlugin {
+ // 插件初始化
+ void init(WorkflowEngine engine);
+
+ // 注册扩展点
+ void registerExtensions();
+
+ // 清理资源
+ void destroy();
+}
-3. 实现剩余节点类型
- - Jenkins节点
- - Git节点
- - HTTP节点
- - 通知节点
+public class PluginManager {
+ // 加载插件
+ public void loadPlugins();
+
+ // 启用插件
+ public void enablePlugin(String pluginId);
+
+ // 禁用插件
+ public void disablePlugin(String pluginId);
+}
+```
-4. 实现工作流调度功能
- - 定时调度
- - 依赖调度
- - 调度监控
+### 3. 新特性规划
-## 技术栈
+#### 3.1 工作流模板功能
+```java
+// 模板定义表
+CREATE TABLE wf_workflow_template (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ code VARCHAR(100) NOT NULL UNIQUE,
+ name VARCHAR(100) NOT NULL,
+ description TEXT,
+ content JSON NOT NULL,
+ category VARCHAR(50),
+ tags JSON,
+ -- 其他基础字段
+);
-- 后端框架:Spring Boot 3.x
-- 数据库:MySQL 8.x
-- ORM框架:Spring Data JPA
-- 任务调度:Quartz
-- 监控:Micrometer + Prometheus
-- 日志:Logback
-- 工具库:
- - Apache Commons
- - Guava
- - MapStruct
- - Jackson
\ No newline at end of file
+// 模板参数表
+CREATE TABLE wf_template_parameter (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ template_id BIGINT NOT NULL,
+ name VARCHAR(100) NOT NULL,
+ type VARCHAR(50) NOT NULL,
+ required BIT NOT NULL DEFAULT 0,
+ default_value VARCHAR(255),
+ validation_rule VARCHAR(255),
+ -- 其他基础字段
+);
+```
+
+#### 3.2 工作流版本管理
+```java
+// 版本管理表
+CREATE TABLE wf_workflow_version (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ workflow_definition_id BIGINT NOT NULL,
+ version VARCHAR(20) NOT NULL,
+ content JSON NOT NULL,
+ change_log TEXT,
+ status VARCHAR(20) NOT NULL,
+ -- 其他基础字段
+);
+
+public interface VersionManager {
+ // 创建新版本
+ String createVersion(Long workflowId, String content);
+
+ // 发布版本
+ void publishVersion(Long workflowId, String version);
+
+ // 回滚版本
+ void rollbackVersion(Long workflowId, String version);
+}
+```
+
+#### 3.3 工作流迁移功能
+```java
+public interface WorkflowMigration {
+ // 导出工作流
+ byte[] exportWorkflow(Long workflowId);
+
+ // 导入工作流
+ Long importWorkflow(byte[] content);
+
+ // 迁移实例到新版本
+ void migrateInstance(Long instanceId, String targetVersion);
+}
+
+// 迁移记录表
+CREATE TABLE wf_workflow_migration (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ source_workflow_id BIGINT NOT NULL,
+ target_workflow_id BIGINT NOT NULL,
+ migration_type VARCHAR(50) NOT NULL,
+ status VARCHAR(20) NOT NULL,
+ error_message TEXT,
+ -- 其他基础字段
+);
+```
+
+#### 3.4 工作流测试功能
+```java
+public interface WorkflowTesting {
+ // 模拟执行
+ TestResult simulateExecution(Long workflowId, Map variables);
+
+ // 节点单元测试
+ TestResult testNode(NodeConfig config, Map inputs);
+
+ // 生成测试报告
+ TestReport generateReport(Long testExecutionId);
+}
+
+// 测试用例表
+CREATE TABLE wf_workflow_test_case (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ workflow_definition_id BIGINT NOT NULL,
+ name VARCHAR(100) NOT NULL,
+ description TEXT,
+ variables JSON,
+ expected_result JSON,
+ -- 其他基础字段
+);
+
+// 测试执行记录表
+CREATE TABLE wf_workflow_test_execution (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ test_case_id BIGINT NOT NULL,
+ execution_time DATETIME NOT NULL,
+ status VARCHAR(20) NOT NULL,
+ actual_result JSON,
+ error_message TEXT,
+ -- 其他基础字段
+);
+```
+
+## 三、技术架构
+
+### 1. 整体架构
+```
++------------------+
+| API Layer |
++------------------+
+| Service Layer |
++------------------+
+| Engine Core |
++------------------+
+| Storage Layer |
++------------------+
+```
+
+### 2. 关键组件
+- 工作流引擎核心
+- 节点执行引擎
+- 变量管理器
+- 日志管理器
+- 权限管理器
+- 调度管理器
+- 监控告警组件
+- 分析统计组件
+
+### 3. 存储设计
+- 核心业务表
+- 执行记录表
+- 监控指标表
+- 分析统计表
+- 日志记录表
+
+### 4. 缓存设计
+- 本地缓存
+ - 工作流定义缓存
+ - 节点配置缓存
+
+- 分布式缓存
+ - 执行状态缓存
+ - 变量数据缓存
+
+## 四、部署运维
+
+### 1. 部署架构
+```
++---------------+ +---------------+
+| API Server | | API Server |
++---------------+ +---------------+
+ | |
++---------------+ +---------------+
+| Engine Worker | | Engine Worker |
++---------------+ +---------------+
+ | |
++---------------+ +---------------+
+| Node Worker | | Node Worker |
++---------------+ +---------------+
+```
+
+### 2. 监控方案
+- 系统监控
+ - JVM指标
+ - 线程池状态
+ - 数据库连接池
+
+- 业务监控
+ - 工作流执行状态
+ - 节点执行性能
+ - 错误率统计
+
+### 3. 告警方案
+- 系统告警
+ - 资源使用率
+ - 错误率阈值
+ - 响应时间
+
+- 业务告警
+ - 执行超时
+ - 节点失败
+ - 异常终止
+
+### 4. 运维工具
+- 管理控制台
+- 监控面板
+- 运维脚本
+- 诊断工具
+
+## 五、项目管理
+
+### 1. 开发计划
+- Phase 1: 核心功能实现 (已完成)
+- Phase 2: 高级特性开发 (进行中)
+- Phase 3: 性能优化和稳定性提升
+- Phase 4: 运维工具和监控体系建设
+
+### 2. 测试策略
+- 单元测试
+- 集成测试
+- 性能测试
+- 稳定性测试
+
+### 3. 文档规划
+- 设计文档
+- API文档
+- 使用手册
+- 运维手册
+
+### 4. 版本规划
+- v1.0: 基础功能版本
+- v1.1: 高级特性版本
+- v1.2: 性能优化版本
+- v2.0: 企业版本
\ No newline at end of file
diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/enums/ResponseCode.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/enums/ResponseCode.java
index 546c4ccf..5845da6b 100644
--- a/backend/src/main/java/com/qqchen/deploy/backend/framework/enums/ResponseCode.java
+++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/enums/ResponseCode.java
@@ -73,14 +73,8 @@ public enum ResponseCode {
EXTERNAL_SYSTEM_SYNC_FAILED(2503, "external.system.sync.failed"),
EXTERNAL_SYSTEM_TYPE_NOT_SUPPORTED(2504, "external.system.type.not.supported"),
- /**
- * Git系统认证方式错误
- */
+ // Git系统相关错误码
EXTERNAL_SYSTEM_GIT_AUTH_TYPE_ERROR(2501, "Git系统只支持Token认证"),
-
- /**
- * Git系统Token必填
- */
EXTERNAL_SYSTEM_GIT_TOKEN_REQUIRED(2502, "Git系统必须提供Token"),
// 仓库相关错误码 (2600-2699)
@@ -94,7 +88,34 @@ public enum ResponseCode {
REPOSITORY_BRANCH_NAME_EXISTS(2621, "repository.branch.name.exists"),
REPOSITORY_SYNC_IN_PROGRESS(2630, "repository.sync.in.progress"),
REPOSITORY_SYNC_FAILED(2631, "repository.sync.failed"),
- REPOSITORY_SYNC_HISTORY_NOT_FOUND(2632, "repository.sync.history.not.found");
+ REPOSITORY_SYNC_HISTORY_NOT_FOUND(2632, "repository.sync.history.not.found"),
+
+ // 工作流相关错误码 (2700-2799)
+ WORKFLOW_NOT_FOUND(2700, "workflow.not.found"),
+ WORKFLOW_CODE_EXISTS(2701, "workflow.code.exists"),
+ WORKFLOW_NAME_EXISTS(2702, "workflow.name.exists"),
+ WORKFLOW_DISABLED(2703, "workflow.disabled"),
+ WORKFLOW_NOT_PUBLISHED(2704, "workflow.not.published"),
+ WORKFLOW_ALREADY_PUBLISHED(2705, "workflow.already.published"),
+ WORKFLOW_ALREADY_DISABLED(2706, "workflow.already.disabled"),
+ WORKFLOW_INSTANCE_NOT_FOUND(2710, "workflow.instance.not.found"),
+ WORKFLOW_INSTANCE_ALREADY_COMPLETED(2711, "workflow.instance.already.completed"),
+ WORKFLOW_INSTANCE_ALREADY_CANCELED(2712, "workflow.instance.already.canceled"),
+ WORKFLOW_INSTANCE_NOT_RUNNING(2713, "workflow.instance.not.running"),
+ WORKFLOW_NODE_NOT_FOUND(2720, "workflow.node.not.found"),
+ WORKFLOW_NODE_TYPE_NOT_SUPPORTED(2721, "workflow.node.type.not.supported"),
+ WORKFLOW_NODE_CONFIG_INVALID(2722, "workflow.node.config.invalid"),
+ WORKFLOW_NODE_EXECUTION_FAILED(2723, "workflow.node.execution.failed"),
+ WORKFLOW_NODE_TIMEOUT(2724, "workflow.node.timeout"),
+ WORKFLOW_VARIABLE_NOT_FOUND(2730, "workflow.variable.not.found"),
+ WORKFLOW_VARIABLE_TYPE_INVALID(2731, "workflow.variable.type.invalid"),
+ WORKFLOW_PERMISSION_DENIED(2740, "workflow.permission.denied"),
+ WORKFLOW_APPROVAL_REQUIRED(2741, "workflow.approval.required"),
+ WORKFLOW_APPROVAL_REJECTED(2742, "workflow.approval.rejected"),
+ WORKFLOW_DEPENDENCY_NOT_SATISFIED(2750, "workflow.dependency.not.satisfied"),
+ WORKFLOW_CIRCULAR_DEPENDENCY(2751, "workflow.circular.dependency"),
+ WORKFLOW_SCHEDULE_INVALID(2752, "workflow.schedule.invalid"),
+ WORKFLOW_CONCURRENT_LIMIT_EXCEEDED(2753, "workflow.concurrent.limit.exceeded");
private final int code;
private final String messageKey; // 国际化消息key
diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowStatusEnum.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowStatusEnum.java
index db4f2bd8..cb67f655 100644
--- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowStatusEnum.java
+++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/WorkflowStatusEnum.java
@@ -10,10 +10,55 @@ import lombok.Getter;
@AllArgsConstructor
public enum WorkflowStatusEnum {
+ // 工作流定义状态
DRAFT("DRAFT", "草稿"),
PUBLISHED("PUBLISHED", "已发布"),
- DISABLED("DISABLED", "已禁用");
+ DISABLED("DISABLED", "已禁用"),
+
+ // 工作流实例状态
+ PENDING("PENDING", "等待执行"),
+ RUNNING("RUNNING", "执行中"),
+ PAUSED("PAUSED", "已暂停"),
+ COMPLETED("COMPLETED", "已完成"),
+ FAILED("FAILED", "执行失败"),
+ CANCELED("CANCELED", "已取消"),
+ TIMEOUT("TIMEOUT", "已超时");
private final String code;
private final String description;
+
+ /**
+ * 判断是否为终态
+ */
+ public boolean isFinalStatus() {
+ return this == COMPLETED || this == FAILED || this == CANCELED || this == TIMEOUT;
+ }
+
+ /**
+ * 判断是否为运行状态
+ */
+ public boolean isRunning() {
+ return this == RUNNING;
+ }
+
+ /**
+ * 判断是否可以暂停
+ */
+ public boolean canPause() {
+ return this == RUNNING;
+ }
+
+ /**
+ * 判断是否可以恢复
+ */
+ public boolean canResume() {
+ return this == PAUSED;
+ }
+
+ /**
+ * 判断是否可以取消
+ */
+ public boolean canCancel() {
+ return this == PENDING || this == RUNNING || this == PAUSED;
+ }
}
\ No newline at end of file
diff --git a/backend/src/main/resources/messages.properties b/backend/src/main/resources/messages.properties
index a916d4a8..5962bbed 100644
--- a/backend/src/main/resources/messages.properties
+++ b/backend/src/main/resources/messages.properties
@@ -87,4 +87,38 @@ repository.branch.not.found=分支不存在
repository.branch.name.exists=分支名称"{0}"已存在
repository.sync.in.progress=仓库同步正在进行中
repository.sync.failed=仓库同步失败:{0}
-repository.sync.history.not.found=同步历史记录不存在
\ No newline at end of file
+repository.sync.history.not.found=同步历史记录不存在
+
+# 工作流相关错误消息
+workflow.definition.not.found=工作流定义不存在
+workflow.definition.code.exists=工作流定义编码"{0}"已存在
+workflow.definition.name.exists=工作流定义名称"{0}"已存在
+workflow.definition.invalid.content=工作流定义内容无效:{0}
+workflow.definition.not.published=工作流定义未发布
+workflow.definition.already.published=工作流定义已发布
+workflow.definition.cannot.delete=工作流定义已被使用,无法删除
+
+workflow.instance.not.found=工作流实例不存在
+workflow.instance.already.started=工作流实例已启动
+workflow.instance.already.ended=工作流实例已结束
+workflow.instance.already.suspended=工作流实例已挂起
+workflow.instance.not.suspended=工作流实例未挂起
+workflow.instance.cannot.cancel=工作流实例无法取消
+workflow.instance.cannot.suspend=工作流实例无法挂起
+workflow.instance.cannot.resume=工作流实例无法恢复
+
+workflow.node.not.found=工作流节点不存在
+workflow.node.type.not.supported=不支持的节点类型:{0}
+workflow.node.config.invalid=节点配置无效:{0}
+workflow.node.execution.failed=节点执行失败:{0}
+workflow.node.timeout=节点执行超时
+workflow.node.approval.rejected=节点审批被拒绝
+workflow.node.approval.canceled=节点审批已取消
+
+workflow.variable.not.found=工作流变量不存在
+workflow.variable.required=工作流变量"{0}"为必填项
+workflow.variable.invalid=工作流变量"{0}"的值无效
+
+workflow.permission.denied=无权操作此工作流
+workflow.operation.not.allowed=当前状态不允许此操作
+workflow.concurrent.operation=工作流正在执行其他操作,请稍后重试
\ No newline at end of file
diff --git a/backend/src/main/resources/messages_zh_CN.properties b/backend/src/main/resources/messages_zh_CN.properties
index e57a72df..10ac55b7 100644
--- a/backend/src/main/resources/messages_zh_CN.properties
+++ b/backend/src/main/resources/messages_zh_CN.properties
@@ -58,4 +58,38 @@ permission.not.found=权限不存在
permission.code.exists=权限编码 {0} 已存在
permission.name.exists=权限名称 {0} 已存在
permission.already.assigned=该权限已分配给角色
-permission.assign.failed=权限分配失败
\ No newline at end of file
+permission.assign.failed=权限分配失败
+
+# 工作流相关错误消息
+workflow.definition.not.found=工作流定义不存在
+workflow.definition.code.exists=工作流定义编码"{0}"已存在
+workflow.definition.name.exists=工作流定义名称"{0}"已存
+workflow.definition.invalid.content=工作流定义内容无效:{0}
+workflow.definition.not.published=工作流定义未发布
+workflow.definition.already.published=工作流定义已发布
+workflow.definition.cannot.delete=工作流定义已被使用,无法删除
+
+workflow.instance.not.found=工作流实例不存在
+workflow.instance.already.started=工作流实例已启动
+workflow.instance.already.ended=工作流实例已结束
+workflow.instance.already.suspended=工作流实例已挂起
+workflow.instance.not.suspended=工作流实例未挂起
+workflow.instance.cannot.cancel=工作流实例无法取消
+workflow.instance.cannot.suspend=工作流实例无法挂起
+workflow.instance.cannot.resume=工作流实例无法恢复
+
+workflow.node.not.found=工作流节点不存在
+workflow.node.type.not.supported=不支持的节点类型:{0}
+workflow.node.config.invalid=节点配置无效:{0}
+workflow.node.execution.failed=节点执行失败:{0}
+workflow.node.timeout=节点执行超时
+workflow.node.approval.rejected=节点审批被拒绝
+workflow.node.approval.canceled=节点审批已取消
+
+workflow.variable.not.found=工作流变量不存在
+workflow.variable.required=工作流变量"{0}"为必填项
+workflow.variable.invalid=工作流变量"{0}"的值无效
+
+workflow.permission.denied=无权操作此工作流
+workflow.operation.not.allowed=当前状态不允许此操作
+workflow.concurrent.operation=工作流正在执行其他操作,请稍后重试
\ No newline at end of file