可正常启动

This commit is contained in:
dengqichen 2024-12-03 21:16:39 +08:00
parent 33448f5ac5
commit 609a662945
5 changed files with 603 additions and 523 deletions

View File

@ -1,548 +1,494 @@
# 工作流引擎功能开发文档
# 工作流引擎开发文档
## 已实现功能
## 一、已完成工作
### 1. 核心功能
- [x] 工作流定义管理
- 工作流定义的CRUD操作
- 工作流状态管理(草稿、发布、禁用)
- 工作流版本控制
### 1. 核心实体设计
- WorkflowDefinition: 工作流定义
- 包含基本信息(编码、名称、描述等)
- 包含流程定义内容(JSON格式)
- 支持版本控制和状态管理
- [x] 工作流实例管理
- 工作流实例的创建和执行
- 实例状态管理(运行、暂停、完成、失败、取消)
- 实例执行历史记录
- WorkflowInstance: 工作流实例
- 关联工作流定义
- 记录执行状态和进度
- 支持暂停、恢复、取消等操作
- [x] 节点实例管理
- 节点实例的创建和执行
- 节点状态管理(等待、运行、完成、失败、取消)
- 节点执行历史记录
- NodeInstance: 节点实例
- 关联工作流实例
- 记录节点执行状态和结果
- 支持重试和跳过等操作
### 2. 节点类型
- [x] Shell节点
- 支持Windows/Unix跨平台
- 工作目录配置
- 环境变量支持
- 超时处理
- 输出流日志记录
### 2. 节点类型体系
- 基础节点类型:
- START: 开始节点
- END: 结束节点
- CONDITION: 条件节点
- PARALLEL: 并行节点
### 3. 日志管理
- [x] 日志记录
- 工作流级别日志
- 节点级别日志
- 系统级别日志
- 变量更新日志
- 功能节点类型:
- APPROVAL: 审批节点
- JENKINS: Jenkins构建节点
- SCRIPT: 脚本执行节点
- GIT: Git操作节点
- NACOS: 配置中心节点
- HTTP: HTTP请求节点
- NOTIFY: 通知节点
- [x] 日志查询
- 工作流日志查询
- 节点日志查询
- 支持分页和条件过滤
### 3. 工作流引擎实现
- 核心接口设计
- WorkflowEngine: 工作流引擎接口
- NodeExecutor: 节点执行器接口
## 待实现功能
- 默认实现
- DefaultWorkflowEngine: 默认工作流引擎实现
- AbstractNodeExecutor: 抽象节点执行器
- ShellNodeExecutor等具体执行器
### 1. 节点类型扩展
#### 1.1 Jenkins节点
### 4. 变量与日志管理
- WorkflowVariable: 工作流变量
- 支持全局变量和节点变量
- 支持变量引用和替换
- WorkflowLog: 工作流日志
- 支持不同日志类型和级别
- 支持详细的执行记录
### 5. 权限管理
- WorkflowPermission: 工作流权限
- 支持角色和用户级别的权限控制
- 支持操作级别的权限控制
### 6. API接口设计
- 工作流定义管理
- 工作流实例操作
- 节点实例管理
- 日志查询等功能
### 7. 错误码和消息
- 工作流相关错误码(2700-2799)
- 详细的错误消息定义
## 二、待完成工作
### 1. 高级功能实现
#### 1.1 节点执行引擎增强
```java
// 实现思路:
1. 添加Jenkins客户端依赖
```xml
<dependency>
<groupId>com.offbytwo.jenkins</groupId>
<artifactId>jenkins-client</artifactId>
<version>0.3.8</version>
</dependency>
```
public interface NodeExecutor {
// 新增预执行检查
boolean preCheck(NodeInstance node, WorkflowContext context);
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. 处理构建产物
}
// 新增补偿操作
void compensate(NodeInstance node, WorkflowContext context);
// 新增超时处理
void handleTimeout(NodeInstance node, WorkflowContext context);
}
// 节点执行状态追踪
public class NodeExecutionTracker {
private Long nodeInstanceId;
private Date startTime;
private Date endTime;
private String status;
private Map<String, Object> metrics;
private List<String> logs;
}
```
3. 添加构建结果处理
- 支持构建状态判断
- 支持测试结果解析
- 支持构建产物下载
```
#### 1.2 Git节点
```java
// 实现思路:
1. 添加JGit依赖
```xml
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>6.5.0.202303070854-r</version>
</dependency>
```
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
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
```
2. 实现日志导出服务
```java
@Service
public class WorkflowLogExportService {
public void exportToExcel(Long workflowInstanceId, OutputStream output) {
// 1. 查询日志数据
// 2. 创建Excel工作簿
// 3. 写入日志数据
// 4. 格式化和样式设置
// 5. 输出文件
}
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. 记录清理统计
}
public void cleanupByInstance(Long workflowInstanceId) {
// 1. 查询实例日志
// 2. 物理删除日志
// 3. 记录清理结果
}
}
```
### 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<NotifyChannel> 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. 记录执行结果
// 修改调度配置
public void updateSchedule(WorkflowSchedule schedule);
// 启用/禁用调度
public void toggleSchedule(Long scheduleId, boolean enabled);
// 手动触发
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 '下次触发时间',
-- 其他基础字段
);
```
#### 1.3 工作流监控告警
```java
public interface WorkflowMonitor {
// 收集性能指标
void collectMetrics(WorkflowInstance instance);
// 检查健康状态
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<String, Duration> analyzeExecutionTime(Long workflowId);
// 成功率分析
Map<String, Double> analyzeSuccessRate(Long workflowId);
// 节点耗时分析
List<NodeTimeAnalysis> 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<String, WorkflowDefinition> 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);
}
}
```
#### 4.2 依赖调度
#### 2.2 可靠性增强
- 实现节点执行幂等性
- 增加全局事务控制
- 完善补偿机制
```java
// 实现思路:
1. 添加依赖配置
```java
@Entity
@Table(name = "wf_workflow_dependency")
public class WorkflowDependency {
// 上游工作流
private Long upstreamWorkflowId;
// 依赖类型
private DependencyType type;
// 触发条件
private String condition;
public abstract class IdempotentNodeExecutor implements NodeExecutor {
// 幂等性检查
protected boolean checkIdempotent(String executionId) {
return redisTemplate.opsForValue()
.setIfAbsent("node:execution:" + executionId, "1", 24, TimeUnit.HOURS);
}
}
```
2. 实现依赖服务
```java
@Service
public class WorkflowDependencyService {
public void handleWorkflowComplete(Long workflowInstanceId) {
// 1. 查询依赖配置
// 2. 检查触发条件
// 3. 触发下游工作流
// 4. 记录依赖执行
}
public class CompensationService {
// 注册补偿操作
public void registerCompensation(NodeInstance node, Runnable compensation);
// 执行补偿
public void executeCompensation(WorkflowInstance instance);
}
```
### 5. 工作流权限管理
#### 2.3 扩展性优化
- 支持自定义节点类型
- 支持插件化扩展
- 提供更多扩展点
```java
public interface WorkflowPlugin {
// 插件初始化
void init(WorkflowEngine engine);
#### 5.1 权限模型
```java
// 实现思路:
1. 定义权限模型
```java
@Entity
@Table(name = "wf_permission")
public class WorkflowPermission {
// 权限类型
private PermissionType type;
// 权限范围
private PermissionScope scope;
// 权限值
private String value;
// 注册扩展点
void registerExtensions();
// 清理资源
void destroy();
}
public class PluginManager {
// 加载插件
public void loadPlugins();
// 启用插件
public void enablePlugin(String pluginId);
// 禁用插件
public void disablePlugin(String pluginId);
}
```
2. 实现权限服务
```java
@Service
public class WorkflowPermissionService {
public boolean hasPermission(Long userId, Long workflowId, PermissionType type) {
// 1. 查询用户权限
// 2. 检查继承权限
// 3. 验证权限范围
// 4. 返回结果
}
### 3. 新特性规划
public void grantPermission(PermissionGrant grant) {
// 1. 验证授权者权限
// 2. 创建权限记录
// 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,
-- 其他基础字段
);
// 模板参数表
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);
}
```
### 6. 工作流版本管理
#### 3.3 工作流迁移功能
```java
public interface WorkflowMigration {
// 导出工作流
byte[] exportWorkflow(Long workflowId);
#### 6.1 版本控制
```java
// 实现思路:
1. 添加版本模型
```java
@Entity
@Table(name = "wf_workflow_version")
public class WorkflowVersion {
// 版本号
private String version;
// 变更内容
private String changelog;
// 工作流定义
private String definition;
// 导入工作流
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,
-- 其他基础字段
);
```
2. 实现版本服务
#### 3.4 工作流测试功能
```java
@Service
public class WorkflowVersionService {
public void createVersion(Long workflowId) {
// 1. 生成版本号
// 2. 保存当前定义
// 3. 记录变更日志
}
public interface WorkflowTesting {
// 模拟执行
TestResult simulateExecution(Long workflowId, Map<String, Object> variables);
public void rollback(Long workflowId, String version) {
// 1. 验证版本有效性
// 2. 恢复历史版本
// 3. 记录回滚操作
}
// 节点单元测试
TestResult testNode(NodeConfig config, Map<String, Object> 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,
-- 其他基础字段
);
```
### 7. 工作流测试
## 三、技术架构
#### 7.1 模拟执行
```java
// 实现思路:
1. 实现测试环境
```java
@Component
public class WorkflowTestEnvironment {
public WorkflowContext createTestContext() {
// 1. 创建测试上下文
// 2. 初始化测试数据
// 3. 配置测试参数
}
}
### 1. 整体架构
```
+------------------+
| API Layer |
+------------------+
| Service Layer |
+------------------+
| Engine Core |
+------------------+
| Storage Layer |
+------------------+
```
2. 实现测试服务
```java
@Service
public class WorkflowTestService {
public TestResult simulateExecution(Long workflowId) {
// 1. 准备测试环境
// 2. 执行工作流
// 3. 收集测试结果
// 4. 生成测试报告
}
}
### 2. 关键组件
- 工作流引擎核心
- 节点执行引擎
- 变量管理器
- 日志管理器
- 权限管理器
- 调度管理器
- 监控告警组件
- 分析统计组件
### 3. 存储设计
- 核心业务表
- 执行记录表
- 监控指标表
- 分析统计表
- 日志记录表
### 4. 缓存设计
- 本地缓存
- 工作流定义缓存
- 节点配置缓存
- 分布式缓存
- 执行状态缓存
- 变量数据缓存
## 四、部署运维
### 1. 部署架构
```
+---------------+ +---------------+
| API Server | | API Server |
+---------------+ +---------------+
| |
+---------------+ +---------------+
| Engine Worker | | Engine Worker |
+---------------+ +---------------+
| |
+---------------+ +---------------+
| Node Worker | | Node Worker |
+---------------+ +---------------+
```
### 8. 工作流模板
### 2. 监控方案
- 系统监控
- JVM指标
- 线程池状态
- 数据库连接池
#### 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<TemplateParameter> parameters;
}
```
- 业务监控
- 工作流执行状态
- 节点执行性能
- 错误率统计
2. 实现模板服务
```java
@Service
public class WorkflowTemplateService {
public Long createFromTemplate(Long templateId, Map<String, Object> parameters) {
// 1. 加载模板定义
// 2. 替换模板参数
// 3. 创建工作流定义
// 4. 返回工作流ID
}
### 3. 告警方案
- 系统告警
- 资源使用率
- 错误率阈值
- 响应时间
public void saveAsTemplate(Long workflowId) {
// 1. 提取工作流定义
// 2. 提取参数定义
// 3. 保存为模板
}
}
```
- 业务告警
- 执行超时
- 节点失败
- 异常终止
## 下一步开发计划
### 4. 运维工具
- 管理控制台
- 监控面板
- 运维脚本
- 诊断工具
1. 优先实现日志管理增强功能
- 日志导出功能
- 日志清理功能
- 日志查询性能优化
## 五、项目管理
2. 实现工作流监控功能
- 执行监控
- 告警通知
- 监控大屏
### 1. 开发计划
- Phase 1: 核心功能实现 (已完成)
- Phase 2: 高级特性开发 (进行中)
- Phase 3: 性能优化和稳定性提升
- Phase 4: 运维工具和监控体系建设
3. 实现剩余节点类型
- Jenkins节点
- Git节点
- HTTP节点
- 通知节点
### 2. 测试策略
- 单元测试
- 集成测试
- 性能测试
- 稳定性测试
4. 实现工作流调度功能
- 定时调度
- 依赖调度
- 调度监控
### 3. 文档规划
- 设计文档
- API文档
- 使用手册
- 运维手册
## 技术栈
- 后端框架Spring Boot 3.x
- 数据库MySQL 8.x
- ORM框架Spring Data JPA
- 任务调度Quartz
- 监控Micrometer + Prometheus
- 日志Logback
- 工具库:
- Apache Commons
- Guava
- MapStruct
- Jackson
### 4. 版本规划
- v1.0: 基础功能版本
- v1.1: 高级特性版本
- v1.2: 性能优化版本
- v2.0: 企业版本

View File

@ -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

View File

@ -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;
}
}

View File

@ -88,3 +88,37 @@ repository.branch.name.exists=分支名称"{0}"已存在
repository.sync.in.progress=仓库同步正在进行中
repository.sync.failed=仓库同步失败:{0}
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=工作流正在执行其他操作,请稍后重试

View File

@ -59,3 +59,37 @@ permission.code.exists=权限编码 {0} 已存在
permission.name.exists=权限名称 {0} 已存在
permission.already.assigned=该权限已分配给角色
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=工作流正在执行其他操作,请稍后重试