From 609a6629457652c123e50cf9128377258987a43c Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 3 Dec 2024 21:16:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/docs/workflow-development.md | 970 +++++++++--------- .../backend/framework/enums/ResponseCode.java | 37 +- .../workflow/enums/WorkflowStatusEnum.java | 47 +- .../src/main/resources/messages.properties | 36 +- .../main/resources/messages_zh_CN.properties | 36 +- 5 files changed, 603 insertions(+), 523 deletions(-) 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