# Flowable DevOps Backend

基于 Spring Boot 3 + WebFlux + Flowable 7 的可视化工作流平台后端。

## 技术栈

- **Spring Boot 3.1.5** - 主框架
- **WebFlux** - 响应式Web框架
- **Flowable 7.0.1** - 工作流引擎
- **MySQL 8** - 主数据库
- **Redis** - 缓存
- **Jakarta EL (JUEL)** - 表达式引擎
- **JPA/Hibernate** - ORM框架

## 关键特性

- 同步执行策略（禁用全局异步执行器）
- 审批节点自然暂停等待
- 统一使用 Jakarta EL 表达式引擎
- ServiceTask 通过 delegateExpression 指向 genericNodeExecutor

## 运行环境要求

- Java 17+
- Maven 3.6+
- MySQL 8.0
- Redis

## 快速开始

### 1. 环境变量配置

设置以下环境变量：

```bash
# 数据库配置
export SPRING_DATASOURCE_URL="jdbc:mysql://172.22.222.111:3306/flowable-devops?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8mb4"
export SPRING_DATASOURCE_USERNAME="root"
export SPRING_DATASOURCE_PASSWORD="your-password"

# Redis配置
export SPRING_REDIS_HOST="172.22.222.111"
export SPRING_REDIS_PORT="6379"
export SPRING_REDIS_PASSWORD="your-redis-password"
export SPRING_REDIS_DATABASE="5"
```

### 2. 构建项目

```bash
# 如果遇到Maven仓库问题，使用项目本地的settings.xml
mvn -s settings.xml clean package -DskipTests

# 或者使用默认设置（需要确保Maven仓库配置正确）
mvn clean package -DskipTests
```

### 3. 运行应用

```bash
# 开发模式运行
mvn -s settings.xml spring-boot:run

# 或者直接运行jar包
java -jar target/flowable-devops-backend-1.0-SNAPSHOT.jar
```

应用将在 http://localhost:8080 启动。

### 4. 运行测试

```bash
# 运行所有测试
mvn -s settings.xml test

# 运行单个测试类
mvn -s settings.xml -Dtest=ExpressionEngineTest test

# 运行单个测试方法
mvn -s settings.xml -Dtest=ExpressionEngineTest#testSimpleExpression test
```

## API端点

- **健康检查**: `GET /actuator/health`
- **工作流管理**: `/api/workflows`
- **节点类型**: `/api/node-types`
- **任务审批**: `/api/tasks`

## 配置说明

### application.yml 关键配置

- `flowable.async-executor-activate: false` - 禁用异步执行器
- `flowable.history-level: full` - 完整历史记录
- `app.workflow.expression.engine: jakarta-el` - 使用 Jakarta EL 表达式引擎

### 数据库

项目使用 MySQL 8 作为主数据库，Flowable 会自动创建所需的表结构。

业务表包括：
- `workflow_definitions` - 工作流定义
- `node_types` - 节点类型元数据
- `workflow_executions` - 工作流执行记录
- `node_execution_logs` - 节点执行日志

## 开发指南

### 目录结构

```
src/main/java/com/flowable/devops/
├── FlowableDevopsApplication.java  # 主应用类
├── config/                         # 配置类
│   ├── FlowableConfig.java        # Flowable配置
│   └── WebFluxConfig.java         # WebFlux配置
├── controller/                     # 控制器
├── service/                       # 服务层
├── entity/                        # 实体类
├── repository/                    # 数据访问层
├── workflow/                      # 工作流相关
│   └── node/                      # 节点实现
└── expression/                    # 表达式引擎
```

### 注意事项

1. 所有 ServiceTask 必须使用 `delegateExpression="${genericNodeExecutor}"`
2. 条件分支通过 ExclusiveGateway + 条件边实现
3. 表达式统一使用 Jakarta EL，格式为 `${...}`
4. 审批节点使用 UserTask，自然暂停等待

## 故障排除

### Maven依赖下载问题

如果遇到Maven仓库访问问题，使用项目本地的settings.xml：

```bash
mvn -s settings.xml [command]
```

### 数据库连接问题

确保：
1. MySQL服务正在运行
2. 数据库 `flowable-devops` 已创建
3. 用户权限配置正确
4. 网络连接正常

### Redis连接问题

确保：
1. Redis服务正在运行
2. 指定的数据库可访问
3. 密码配置正确（如有）