diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/API\345\217\202\350\200\203.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/API\345\217\202\350\200\203.md"
new file mode 100644
index 00000000..d517e12b
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/API\345\217\202\350\200\203.md"
@@ -0,0 +1,653 @@
+# API参考
+
+
+**本文档中引用的文件**
+- [LoginController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/LoginController.java)
+- [UserController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/UserController.java)
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java)
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java)
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java)
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [OpenApiController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/OpenApiController.java)
+- [AuthenticationInterceptor.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/AuthenticationInterceptor.java)
+- [DataVinesExceptionHandler.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/DataVinesExceptionHandler.java)
+- [ResultMap.java](file://datavines-core/src/main/java/io/datavines/core/entity/ResultMap.java)
+- [DataVinesConstants.java](file://datavines-core/src/main/java/io/datavines/core/constant/DataVinesConstants.java)
+- [Status.java](file://datavines-core/src/main/java/io/datavines/core/enums/Status.java)
+- [DataVinesSwaggerConfig.java](file://datavines-server/src/main/java/io/datavines/server/api/config/DataVinesSwaggerConfig.java)
+- [UserLogin.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/user/UserLogin.java)
+- [WorkSpaceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceCreate.java)
+- [DataSourceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/datasource/DataSourceCreate.java)
+- [JobCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobCreate.java)
+- [SubmitJob.java](file://datavines-common/src/main/java/io/datavines/common/entity/job/SubmitJob.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [API基础信息](#api基础信息)
+3. [认证与授权](#认证与授权)
+4. [API版本策略](#api版本策略)
+5. [错误处理](#错误处理)
+6. [核心API端点](#核心api端点)
+7. [API使用示例](#api使用示例)
+8. [客户端开发指导](#客户端开发指导)
+
+## 简介
+DataVines提供了一套完整的RESTful API接口,用于管理和操作数据质量检查系统。本API参考文档全面记录了所有可用的API端点,包括用户管理、工作空间管理、数据源管理、作业管理、执行控制等功能。API设计遵循REST原则,使用JSON格式进行数据交换,并通过标准HTTP状态码和自定义错误码提供清晰的响应信息。
+
+**API特点:**
+- 基于Spring Boot和Swagger构建
+- 使用JWT进行身份验证
+- 支持OpenAPI 2.0规范
+- 提供详细的错误信息和状态码
+- 支持外部系统集成
+
+## API基础信息
+
+### 基础URL
+所有API端点的基础URL为:
+```
+http://:/api/v1
+```
+
+其中``是DataVines服务器地址,``是服务端口(默认为56001)。
+
+### HTTP方法
+API使用标准的HTTP方法:
+- `GET`:获取资源
+- `POST`:创建资源或执行操作
+- `PUT`:更新资源
+- `DELETE`:删除资源
+
+### 内容类型
+所有请求和响应的内容类型均为`application/json`。
+
+### 请求头
+| 头部名称 | 描述 | 是否必需 |
+|---------|------|---------|
+| Authorization | Bearer令牌,用于身份验证 | 是(除登录等公开接口外) |
+| Content-Type | 请求内容类型,应设置为application/json | 是 |
+
+### 响应结构
+所有API响应都遵循统一的响应格式,由`ResultMap`类定义:
+
+```json
+{
+ "code": 200,
+ "msg": "Success",
+ "data": {},
+ "token": "optional_token"
+}
+```
+
+**字段说明:**
+- `code`:状态码,200表示成功,其他值表示错误
+- `msg`:消息描述,成功时为"Success",错误时为具体的错误信息
+- `data`:实际返回的数据,如果无数据则为"{}"
+- `token`:可选的JWT令牌,仅在登录等需要认证的接口返回
+
+**Section sources**
+- [ResultMap.java](file://datavines-core/src/main/java/io/datavines/core/entity/ResultMap.java)
+- [DataVinesConstants.java](file://datavines-core/src/main/java/io/datavines/core/constant/DataVinesConstants.java)
+
+## 认证与授权
+
+### 认证机制
+DataVines使用基于JWT(JSON Web Token)的认证机制。用户通过登录接口获取令牌,后续请求需要在`Authorization`头部中携带该令牌。
+
+#### 登录流程
+1. 用户通过`/api/v1/login`端点提交用户名和密码
+2. 服务器验证凭据,生成JWT令牌
+3. 令牌通过响应返回给客户端
+4. 客户端在后续请求的`Authorization`头部中携带`Bearer `
+
+```mermaid
+sequenceDiagram
+participant Client as 客户端
+participant Server as 服务器
+Client->>Server : POST /api/v1/login
+Server->>Server : 验证用户名和密码
+Server->>Server : 生成JWT令牌
+Server-->>Client : 返回包含令牌的响应
+Client->>Server : 后续请求携带Authorization头部
+Server->>Server : 验证令牌有效性
+Server-->>Client : 返回请求的资源
+```
+
+**Diagram sources**
+- [LoginController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/LoginController.java)
+- [AuthenticationInterceptor.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/AuthenticationInterceptor.java)
+
+### 权限控制
+系统通过拦截器实现权限控制,主要机制包括:
+
+1. **公开接口**:使用`@AuthIgnore`注解标记,无需认证即可访问
+2. **认证接口**:需要有效的JWT令牌
+3. **令牌验证**:拦截器验证令牌的有效性和用户状态
+
+```mermaid
+flowchart TD
+Start([请求到达]) --> CheckAuth["检查@AuthIgnore注解"]
+CheckAuth --> |是| Allow["允许访问"]
+CheckAuth --> |否| CheckToken["检查Authorization头部"]
+CheckToken --> |无令牌| ReturnError["返回401错误"]
+CheckToken --> |有令牌| ValidateToken["验证令牌有效性"]
+ValidateToken --> |无效| ReturnError
+ValidateToken --> |有效| GetUser["获取用户信息"]
+GetUser --> CheckUser["检查用户是否存在"]
+CheckUser --> |不存在| ReturnError
+CheckUser --> |存在| Allow
+ReturnError --> End([返回错误响应])
+Allow --> End
+```
+
+**Diagram sources**
+- [AuthenticationInterceptor.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/AuthenticationInterceptor.java)
+
+### 令牌管理
+- **令牌格式**:`Bearer `,符合RFC 6750标准
+- **令牌有效期**:系统自动管理令牌的刷新和过期
+- **令牌刷新**:通过`@RefreshToken`注解实现自动刷新机制
+
+**Section sources**
+- [AuthenticationInterceptor.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/AuthenticationInterceptor.java)
+- [DataVinesConstants.java](file://datavines-core/src/main/java/io/datavines/core/constant/DataVinesConstants.java)
+
+## API版本策略
+
+### 版本控制
+API采用URL路径进行版本控制,当前版本为v1:
+
+```
+/api/v1/
+```
+
+### 向后兼容性
+DataVines承诺保持向后兼容性,具体策略如下:
+
+1. **功能添加**:新增功能不会影响现有API
+2. **字段添加**:响应中可能添加新字段,但不会删除或修改现有字段
+3. **弃用通知**:计划弃用的API会提前通知,并保持一段时间的兼容性
+4. **版本升级**:重大变更将通过版本号升级(如v2)来标识
+
+### 版本迁移
+当需要升级到新版本时:
+1. 检查API文档中的变更日志
+2. 测试新版本的兼容性
+3. 逐步迁移客户端代码
+4. 监控迁移过程中的错误
+
+**Section sources**
+- [DataVinesConstants.java](file://datavines-core/src/main/java/io/datavines/core/constant/DataVinesConstants.java)
+
+## 错误处理
+
+### 错误响应格式
+当请求失败时,API返回标准化的错误响应:
+
+```json
+{
+ "code": 400,
+ "msg": "Bad Request",
+ "data": "{}"
+}
+```
+
+### 常见错误码
+| 状态码 | 错误码 | 描述 | 解决方案 |
+|-------|-------|------|---------|
+| 200 | 200 | 成功 | 无需处理 |
+| 400 | 10010001 | 请求错误 | 检查请求参数和格式 |
+| 401 | 10010002 | 无效的令牌 | 重新登录获取新令牌 |
+| 401 | 10010003 | 令牌为空 | 在请求头中添加Authorization |
+| 401 | 10010004 | 请登录 | 执行登录操作 |
+| 400 | 10020001 | 用户名已被注册 | 使用其他用户名 |
+| 400 | 11010001 | 工作空间已存在 | 使用其他名称 |
+| 400 | 12010001 | 数据源已存在 | 使用其他名称 |
+| 400 | 14010003 | 作业不存在 | 检查作业ID |
+
+### 错误处理机制
+系统通过全局异常处理器`DataVinesExceptionHandler`统一处理各种异常:
+
+```mermaid
+flowchart TD
+Start([异常抛出]) --> CheckType["检查异常类型"]
+CheckType --> |DataVinesServerException| HandleServer["处理业务异常"]
+CheckType --> |ConstraintViolationException| HandleValidation["处理参数验证异常"]
+CheckType --> |MethodArgumentNotValidException| HandleValidation
+CheckType --> |其他异常| HandleCommon["处理通用异常"]
+HandleServer --> BuildResponse["构建错误响应"]
+HandleValidation --> BuildResponse
+HandleCommon --> BuildResponse
+BuildResponse --> LogError["记录错误日志"]
+LogError --> ReturnResponse["返回标准化错误响应"]
+```
+
+**Diagram sources**
+- [DataVinesExceptionHandler.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/DataVinesExceptionHandler.java)
+- [Status.java](file://datavines-core/src/main/java/io/datavines/core/enums/Status.java)
+
+### 参数验证
+API使用JSR-303 Bean Validation进行参数验证,常见验证注解包括:
+- `@NotBlank`:字符串不能为空
+- `@NotNull`:对象不能为空
+- `@Pattern`:字符串需匹配正则表达式
+- `@Valid`:验证嵌套对象
+
+**Section sources**
+- [DataVinesExceptionHandler.java](file://datavines-server/src/main/java/io/datavines/server/api/inteceptor/DataVinesExceptionHandler.java)
+- [Status.java](file://datavines-core/src/main/java/io/datavines/core/enums/Status.java)
+
+## 核心API端点
+
+### 用户管理API
+管理用户账户和认证。
+
+#### 登录
+- **HTTP方法**: POST
+- **URL**: `/api/v1/login`
+- **描述**: 用户登录系统
+- **请求体**:
+```json
+{
+ "username": "string",
+ "password": "string"
+}
+```
+- **响应**:
+```json
+{
+ "code": 200,
+ "msg": "Success",
+ "data": {},
+ "token": "jwt_token"
+}
+```
+
+#### 注册
+- **HTTP方法**: POST
+- **URL**: `/api/v1/register`
+- **描述**: 新用户注册
+- **请求体**:
+```json
+{
+ "username": "string",
+ "password": "string",
+ "email": "string",
+ "verificationCode": "string",
+ "verificationCodeJwt": "string"
+}
+```
+
+#### 重置密码
+- **HTTP方法**: POST
+- **URL**: `/api/v1/user/resetPassword`
+- **描述**: 重置用户密码
+- **请求体**:
+```json
+{
+ "username": "string",
+ "oldPassword": "string",
+ "newPassword": "string",
+ "confirmPassword": "string"
+}
+```
+
+**Section sources**
+- [LoginController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/LoginController.java)
+- [UserController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/UserController.java)
+- [UserLogin.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/user/UserLogin.java)
+
+### 工作空间管理API
+管理用户的工作空间。
+
+#### 创建工作空间
+- **HTTP方法**: POST
+- **URL**: `/api/v1/workspace`
+- **描述**: 创建新的工作空间
+- **请求体**:
+```json
+{
+ "name": "string",
+ "description": "string"
+}
+```
+- **响应**: 工作空间ID
+
+#### 获取工作空间列表
+- **HTTP方法**: GET
+- **URL**: `/api/v1/workspace/list`
+- **描述**: 获取当前用户的所有工作空间
+- **响应**: 工作空间对象数组
+
+#### 邀请用户
+- **HTTP方法**: POST
+- **URL**: `/api/v1/workspace/inviteUser`
+- **描述**: 邀请用户加入工作空间
+- **请求体**:
+```json
+{
+ "workspaceId": 0,
+ "username": "string"
+}
+```
+
+**Section sources**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java)
+
+### 数据源管理API
+管理数据源连接和元数据。
+
+#### 测试数据源连接
+- **HTTP方法**: POST
+- **URL**: `/api/v1/datasource/test`
+- **描述**: 测试数据源连接是否有效
+- **请求体**:
+```json
+{
+ "type": "string",
+ "parameters": {}
+}
+```
+
+#### 创建数据源
+- **HTTP方法**: POST
+- **URL**: `/api/v1/datasource`
+- **描述**: 创建新的数据源连接
+- **请求体**:
+```json
+{
+ "name": "string",
+ "type": "string",
+ "workSpaceId": 0,
+ "parameters": {}
+}
+```
+
+#### 获取数据库列表
+- **HTTP方法**: GET
+- **URL**: `/api/v1/datasource/{id}/databases`
+- **描述**: 获取指定数据源的数据库列表
+- **路径参数**: `id` - 数据源ID
+
+#### 执行SQL脚本
+- **HTTP方法**: POST
+- **URL**: `/api/v1/datasource/execute`
+- **描述**: 在指定数据源上执行SQL脚本
+- **请求体**:
+```json
+{
+ "dataSourceId": 0,
+ "database": "string",
+ "script": "string"
+}
+```
+
+**Section sources**
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java)
+
+### 作业管理API
+管理数据质量检查作业。
+
+#### 创建作业
+- **HTTP方法**: POST
+- **URL**: `/api/v1/job`
+- **描述**: 创建新的数据质量检查作业
+- **请求体**:
+```json
+{
+ "name": "string",
+ "type": 0,
+ "dataSourceId": 0,
+ "metricParameters": []
+}
+```
+
+#### 获取作业列表
+- **HTTP方法**: GET
+- **URL**: `/api/v1/job/page`
+- **描述**: 分页获取作业列表
+- **查询参数**:
+ - `searchVal`: 搜索关键字
+ - `datasourceId`: 数据源ID
+ - `pageNumber`: 页码
+ - `pageSize`: 每页数量
+
+#### 执行作业
+- **HTTP方法**: POST
+- **URL**: `/api/v1/job/execute/{id}`
+- **描述**: 执行指定ID的作业
+- **路径参数**: `id` - 作业ID
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java)
+
+### 作业执行API
+管理作业的执行和监控。
+
+#### 提交数据质量作业
+- **HTTP方法**: POST
+- **URL**: `/api/v1/job/execution/submit/data-quality`
+- **描述**: 提交外部数据质量检查作业
+- **请求体**: `SubmitJob`对象
+
+#### 获取执行状态
+- **HTTP方法**: GET
+- **URL**: `/api/v1/job/execution/status/{executionId}`
+- **描述**: 获取指定执行实例的状态
+- **路径参数**: `executionId` - 执行ID
+
+#### 终止执行
+- **HTTP方法**: DELETE
+- **URL**: `/api/v1/job/execution/kill/{executionId}`
+- **描述**: 终止正在运行的作业执行
+- **路径参数**: `executionId` - 执行ID
+
+#### 获取执行结果
+- **HTTP方法**: GET
+- **URL**: `/api/v1/job/execution/list/result/{executionId}`
+- **描述**: 获取作业执行的详细结果
+- **路径参数**: `executionId` - 执行ID
+
+**Section sources**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+
+### OpenAPI端点
+为外部系统集成提供的简化API。
+
+#### 执行作业(OpenAPI)
+- **HTTP方法**: POST
+- **URL**: `/api/v1/openapi/job/execute/{id}`
+- **描述**: 通过OpenAPI执行作业,需要`CheckTokenExist`验证
+- **路径参数**: `id` - 作业ID
+
+#### 终止执行(OpenAPI)
+- **HTTP方法**: POST
+- **URL**: `/api/v1/openapi/job/execution/kill/{executionId}`
+- **描述**: 通过OpenAPI终止执行
+- **路径参数**: `executionId` - 执行ID
+
+**Section sources**
+- [OpenApiController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/OpenApiController.java)
+
+## API使用示例
+
+### Python客户端示例
+```python
+import requests
+import json
+
+class DataVinesClient:
+ def __init__(self, base_url, username, password):
+ self.base_url = base_url
+ self.username = username
+ self.password = password
+ self.token = None
+ self.session = requests.Session()
+
+ def login(self):
+ """登录并获取令牌"""
+ url = f"{self.base_url}/api/v1/login"
+ payload = {
+ "username": self.username,
+ "password": self.password
+ }
+
+ response = self.session.post(url, json=payload)
+ data = response.json()
+
+ if data["code"] == 200:
+ self.token = data["token"]
+ # 设置默认头部
+ self.session.headers.update({
+ "Authorization": f"Bearer {self.token}",
+ "Content-Type": "application/json"
+ })
+ return True
+ else:
+ raise Exception(f"登录失败: {data['msg']}")
+
+ def create_workspace(self, name, description=""):
+ """创建工作空间"""
+ url = f"{self.base_url}/api/v1/workspace"
+ payload = {
+ "name": name,
+ "description": description
+ }
+
+ response = self.session.post(url, json=payload)
+ return response.json()
+
+ def test_datasource_connection(self, datasource_params):
+ """测试数据源连接"""
+ url = f"{self.base_url}/api/v1/datasource/test"
+ response = self.session.post(url, json=datasource_params)
+ return response.json()
+
+# 使用示例
+client = DataVinesClient("http://localhost:56001", "admin", "admin")
+client.login()
+
+# 创建工作空间
+workspace = client.create_workspace("测试工作空间", "用于API测试")
+print(workspace)
+
+# 测试MySQL连接
+mysql_test = client.test_datasource_connection({
+ "type": "mysql",
+ "parameters": {
+ "host": "localhost",
+ "port": 3306,
+ "username": "test",
+ "password": "test"
+ }
+})
+print(mysql_test)
+```
+
+### cURL示例
+```bash
+# 1. 登录获取令牌
+TOKEN=$(curl -X POST "http://localhost:56001/api/v1/login" \
+ -H "Content-Type: application/json" \
+ -d '{"username":"admin","password":"admin"}' \
+ | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
+
+echo "Token: $TOKEN"
+
+# 2. 使用令牌创建工作空间
+curl -X POST "http://localhost:56001/api/v1/workspace" \
+ -H "Authorization: Bearer $TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "name": "API测试空间",
+ "description": "通过API创建的工作空间"
+ }'
+
+# 3. 获取工作空间列表
+curl -X GET "http://localhost:56001/api/v1/workspace/list" \
+ -H "Authorization: Bearer $TOKEN"
+```
+
+### Java客户端示例
+```java
+import org.springframework.web.client.RestTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+
+public class DataVinesApiClient {
+ private final String baseUrl;
+ private final RestTemplate restTemplate;
+ private String token;
+
+ public DataVinesApiClient(String baseUrl) {
+ this.baseUrl = baseUrl;
+ this.restTemplate = new RestTemplate();
+ }
+
+ public boolean login(String username, String password) {
+ String url = baseUrl + "/api/v1/login";
+ LoginRequest request = new LoginRequest(username, password);
+
+ try {
+ ResultMap response = restTemplate.postForObject(url, request, ResultMap.class);
+ if (response != null && response.getCode() == 200) {
+ this.token = (String) response.get("token");
+ return true;
+ }
+ } catch (Exception e) {
+ System.err.println("登录失败: " + e.getMessage());
+ }
+ return false;
+ }
+
+ public ResultMap createWorkspace(String name, String description) {
+ String url = baseUrl + "/api/v1/workspace";
+ WorkSpaceCreate request = new WorkSpaceCreate();
+ request.setName(name);
+ request.setDescription(description);
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.set("Authorization", "Bearer " + token);
+
+ HttpEntity entity = new HttpEntity<>(request, headers);
+ return restTemplate.postForObject(url, entity, ResultMap.class);
+ }
+}
+```
+
+**Section sources**
+- [LoginController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/LoginController.java)
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java)
+
+## 客户端开发指导
+
+### 最佳实践
+1. **错误处理**:始终检查响应的`code`字段,不要假设请求总是成功
+2. **令牌管理**:妥善存储和管理JWT令牌,避免泄露
+3. **重试机制**:对于临时性错误(如网络问题),实现指数退避重试
+4. **连接池**:使用HTTP连接池提高性能
+5. **超时设置**:设置合理的请求超时时间
+
+### 性能优化
+- **批量操作**:尽量使用批量API减少请求次数
+- **缓存**:对不经常变化的数据进行本地缓存
+- **并发请求**:对于独立的操作,使用并发请求提高效率
+- **压缩**:启用GZIP压缩减少网络传输
+
+### 安全建议
+1. **HTTPS**:生产环境必须使用HTTPS加密通信
+2. **令牌存储**:在安全的存储中保存令牌,避免明文存储
+3. **最小权限**:使用具有最小必要权限的账户
+4. **审计日志**:记录重要的API调用以供审计
+
+### 调试技巧
+1. **启用详细日志**:在开发环境中启用详细的HTTP日志
+2. **使用Swagger UI**:通过Swagger UI直接测试API
+3. **监控响应时间**:跟踪API调用的响应时间
+4. **验证请求体**:确保请求体格式正确,特别是JSON结构
+
+**Section sources**
+- [DataVinesSwaggerConfig.java](file://datavines-server/src/main/java/io/datavines/server/api/config/DataVinesSwaggerConfig.java)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241API.md"
new file mode 100644
index 00000000..87081a3e
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241API.md"
@@ -0,0 +1,277 @@
+# 任务API
+
+
+**本文档中引用的文件**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java)
+- [CommonTaskService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskService.java)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java)
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java)
+- [CommonTask.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/CommonTask.java)
+- [CommonTaskSchedule.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/CommonTaskSchedule.java)
+- [CommonTaskType.java](file://datavines-server/src/main/java/io/datavines/server/enums/CommonTaskType.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [核心组件](#核心组件)
+4. [架构概述](#架构概述)
+5. [详细组件分析](#详细组件分析)
+6. [依赖分析](#依赖分析)
+7. [性能考虑](#性能考虑)
+8. [故障排除指南](#故障排除指南)
+9. [结论](#结论)
+
+## 简介
+本文档全面记录了与质量检查任务管理相关的所有RESTful接口。详细描述了创建、更新、删除、启动和查询质量检查任务的API端点,包括HTTP方法、URL路径、请求参数和请求体结构。文档化了任务配置的完整JSON结构,包括数据源选择、检查规则配置、预期值设置、通知策略等。提供了不同类型任务(单表检查、跨表检查等)的配置示例。解释了任务克隆、批量操作等高级功能的API使用方法。包含了任务状态转换的详细说明和相应的API调用方式。
+
+## 项目结构
+本项目采用模块化设计,主要分为以下几个核心模块:
+- **datavines-common**: 提供通用配置、数据源连接、异常处理等基础功能
+- **datavines-server**: 核心服务模块,包含API控制器、业务逻辑和服务层
+- **datavines-metric**: 质量检查指标管理模块
+- **datavines-notification**: 通知系统模块
+- **datavines-connector**: 数据源连接器模块
+- **datavines-engine**: 执行引擎模块
+
+任务管理相关的API主要位于`datavines-server`模块中,通过Spring Boot框架提供RESTful服务。
+
+```mermaid
+graph TD
+subgraph "前端"
+UI[用户界面]
+end
+subgraph "后端服务"
+API[API服务器]
+Service[业务服务层]
+Repository[数据访问层]
+end
+subgraph "数据存储"
+DB[(数据库)]
+end
+UI --> API
+API --> Service
+Service --> Repository
+Repository --> DB
+```
+
+**图表来源**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java#L29-L31)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L34-L36)
+
+**章节来源**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java#L1-L47)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L1-L61)
+
+## 核心组件
+质量检查任务管理的核心组件包括任务控制器(CommonTaskController)、任务调度控制器(CommonTaskScheduleController)、任务服务(CommonTaskService)和任务调度服务(CommonTaskScheduleService)。这些组件共同实现了任务的创建、更新、删除、查询和调度功能。
+
+任务管理采用分层架构设计,控制器层负责接收HTTP请求,服务层处理业务逻辑,数据访问层负责与数据库交互。任务状态管理通过数据库中的状态字段实现,支持任务的生命周期管理。
+
+**章节来源**
+- [CommonTaskService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskService.java#L28-L49)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java#L28-L42)
+
+## 架构概述
+质量检查任务管理系统的架构采用典型的三层设计模式:表现层、业务逻辑层和数据访问层。表现层由Spring MVC控制器组成,负责处理RESTful API请求;业务逻辑层包含服务类,实现核心业务规则;数据访问层使用MyBatis Plus框架,提供对数据库的CRUD操作。
+
+系统通过CommonTask和CommonTaskSchedule两个主要实体类来管理任务及其调度配置。任务与数据源关联,支持多种任务类型,包括元数据抓取和数据质量报告。
+
+```mermaid
+classDiagram
+class CommonTask {
++Long id
++CommonTaskType taskType
++FetchType type
++Long dataSourceId
++String databaseName
++String tableName
++String parameter
++int status
++String executeHost
++LocalDateTime submitTime
++LocalDateTime scheduleTime
++LocalDateTime startTime
++LocalDateTime endTime
++LocalDateTime createTime
++LocalDateTime updateTime
+}
+class CommonTaskSchedule {
++Long id
++Long dataSourceId
++CommonTaskType taskType
++String type
++String param
++String cronExpression
++boolean status
++LocalDateTime startTime
++LocalDateTime endTime
++Long createBy
++LocalDateTime createTime
++Long updateBy
++LocalDateTime updateTime
+}
+class CommonTaskService {
++IPage~CatalogMetaDataFetchTaskVO~ getFetchTaskPage(Long, String, Integer, Integer)
++long refreshCatalog(CatalogRefresh)
++int update(CommonTask)
++CommonTask getById(long)
++Long killCatalogTask(Long)
++CommonTask[] listNeedFailover(String)
++CommonTask[] listTaskNotInServerList(String[])
++String getTaskExecuteHost(Long)
++boolean deleteByDataSourceId(long)
++LocalDateTime getRefreshTime(long, String, String)
+}
+class CommonTaskScheduleService {
++CommonTaskSchedule createOrUpdate(CommonTaskScheduleCreateOrUpdate)
++boolean deleteById(long)
++boolean deleteByDataSourceId(long)
++CommonTaskSchedule getById(long)
++CommonTaskSchedule getByDataSourceId(Long, String)
++String[] getCron(MapParam)
+}
+CommonTaskController --> CommonTaskService : "依赖"
+CommonTaskScheduleController --> CommonTaskScheduleService : "依赖"
+CommonTaskService --> CommonTask : "管理"
+CommonTaskScheduleService --> CommonTaskSchedule : "管理"
+```
+
+**图表来源**
+- [CommonTask.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/CommonTask.java#L31-L88)
+- [CommonTaskSchedule.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/CommonTaskSchedule.java#L30-L79)
+
+## 详细组件分析
+### 任务控制器分析
+任务控制器(CommonTaskController)负责处理与任务相关的HTTP请求,提供分页查询任务列表的功能。该控制器通过RESTful API暴露服务,使用Spring MVC注解定义路由和请求处理方法。
+
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "CommonTaskController"
+participant Service as "CommonTaskService"
+participant Repository as "数据访问层"
+Client->>Controller : GET /api/v1/common-task/page
+Controller->>Service : getFetchTaskPage(datasourceId, taskType, pageNumber, pageSize)
+Service->>Repository : 查询任务分页数据
+Repository-->>Service : 返回分页结果
+Service-->>Controller : 返回任务列表
+Controller-->>Client : 返回JSON响应
+```
+
+**图表来源**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java#L39-L46)
+- [CommonTaskService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskService.java#L48-L49)
+
+### 任务调度控制器分析
+任务调度控制器(CommonTaskScheduleController)负责处理任务调度相关的创建、更新、查询操作。该控制器提供了创建或更新任务调度、根据数据源ID获取任务调度、获取cron表达式等核心功能。
+
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "CommonTaskScheduleController"
+participant Service as "CommonTaskScheduleService"
+participant Repository as "数据访问层"
+Client->>Controller : POST /api/v1/common-task/schedule/createOrUpdate
+Controller->>Service : createOrUpdate(taskScheduleCreateOrUpdate)
+Service->>Repository : 保存或更新任务调度
+Repository-->>Service : 返回保存结果
+Service-->>Controller : 返回任务调度信息
+Controller-->>Client : 返回JSON响应
+```
+
+**图表来源**
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L44-L48)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java#L30-L31)
+
+### 任务调度配置分析
+任务调度配置(CommonTaskScheduleCreateOrUpdate)是创建和更新任务调度的核心数据传输对象。该类定义了任务调度所需的所有必要字段,包括任务ID、任务类型、数据源ID、调度类型、参数、开始时间和结束时间。
+
+```mermaid
+classDiagram
+class CommonTaskScheduleCreateOrUpdate {
++Long id
++CommonTaskType taskType
++Long dataSourceId
++String type
++MapParam param
++LocalDateTime startTime
++LocalDateTime endTime
+}
+class CommonTaskType {
++CATALOG_METADATA_FETCH(0, "catalog_metadata_fetch", "元数据抓取")
++DATA_QUALITY_REPORT(1, "data_quality_report", "数据质量报告")
+}
+class MapParam {
++String cycle
++String timeZone
+}
+CommonTaskScheduleCreateOrUpdate --> CommonTaskType : "引用"
+CommonTaskScheduleCreateOrUpdate --> MapParam : "包含"
+```
+
+**图表来源**
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java#L28-L51)
+- [CommonTaskType.java](file://datavines-server/src/main/java/io/datavines/server/enums/CommonTaskType.java#L24-L74)
+
+**章节来源**
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java#L1-L51)
+- [CommonTaskType.java](file://datavines-server/src/main/java/io/datavines/server/enums/CommonTaskType.java#L1-L74)
+
+## 依赖分析
+质量检查任务管理系统依赖于多个核心模块和外部库。系统内部依赖关系清晰,各模块职责分明。主要依赖包括:
+
+```mermaid
+graph TD
+CommonTaskController --> CommonTaskService
+CommonTaskScheduleController --> CommonTaskScheduleService
+CommonTaskService --> CommonTask
+CommonTaskScheduleService --> CommonTaskSchedule
+CommonTaskScheduleService --> CommonTaskType
+CommonTaskController --> DataVinesConstants
+CommonTaskScheduleController --> DataVinesConstants
+CommonTaskService --> CatalogRefresh
+CommonTaskScheduleService --> MapParam
+style CommonTaskController fill:#f9f,stroke:#333
+style CommonTaskScheduleController fill:#f9f,stroke:#333
+```
+
+**图表来源**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java#L36-L37)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L41-L42)
+
+**章节来源**
+- [CommonTaskService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskService.java#L19-L27)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java#L21-L27)
+
+## 性能考虑
+在设计和实现质量检查任务管理系统时,考虑了以下性能优化策略:
+- 使用MyBatis Plus框架提高数据库操作效率
+- 通过分页查询避免一次性加载大量数据
+- 合理设计数据库索引,特别是在常用查询字段上
+- 使用缓存机制减少重复计算
+- 异步处理耗时操作,提高系统响应速度
+
+对于大规模任务管理,建议定期清理已完成的任务记录,保持数据库性能。同时,合理配置任务调度频率,避免系统资源过度消耗。
+
+## 故障排除指南
+当遇到任务管理相关问题时,可以按照以下步骤进行排查:
+1. 检查API请求参数是否正确,特别是数据源ID和任务类型
+2. 验证数据库连接是否正常
+3. 查看服务日志,定位具体错误信息
+4. 检查任务调度配置是否符合规范
+5. 确认用户权限是否足够执行相关操作
+
+常见问题包括:
+- 任务创建失败:检查数据源配置和权限
+- 任务调度不执行:验证cron表达式和时间设置
+- 查询结果为空:确认数据源ID和任务类型是否匹配
+- 性能问题:检查数据库索引和系统资源使用情况
+
+**章节来源**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java#L39-L46)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L50-L54)
+
+## 结论
+本文档详细介绍了质量检查任务管理系统的API设计和实现。系统提供了完整的任务生命周期管理功能,包括创建、更新、删除、查询和调度。通过清晰的分层架构和模块化设计,系统具有良好的可维护性和扩展性。API设计遵循RESTful规范,便于集成和使用。未来可以进一步优化性能,增加更多任务类型和检查规则,提升系统的实用性和灵活性。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\346\211\247\350\241\214API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\346\211\247\350\241\214API.md"
new file mode 100644
index 00000000..8265e287
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\346\211\247\350\241\214API.md"
@@ -0,0 +1,302 @@
+# 任务执行API
+
+
+**本文档中引用的文件**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobExecutionInfo.java](file://datavines-common/src/main/java/io/datavines/common/entity/JobExecutionInfo.java)
+- [JobExecutionParameter.java](file://datavines-common/src/main/java/io/datavines/common/entity/JobExecutionParameter.java)
+- [JobExecutionRequest.java](file://datavines-common/src/main/java/io/datavines/common/entity/JobExecutionRequest.java)
+- [ExecutionStatus.java](file://datavines-common/src/main/java/io/datavines/common/enums/ExecutionStatus.java)
+- [JobExecutionResultVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionResultVO.java)
+- [JobExecutionVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionVO.java)
+- [JobExecutionPageParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobExecutionPageParam.java)
+- [JobExecutionDashboardParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobExecutionDashboardParam.java)
+- [LogService.java](file://datavines-server/dqc/coordinator/log/LogService.java)
+- [JobExecutionLogDiscriminator.java](file://datavines-common/src/main/java/io/datavines/common/log/JobExecutionLogDiscriminator.java)
+- [JobExecutionLogFilter.java](file://datavines-common/src/main/java/io/datavines/common/log/JobExecutionLogFilter.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [API端点概览](#api端点概览)
+3. [任务执行状态机](#任务执行状态机)
+4. [执行结果结构](#执行结果结构)
+5. [高级查询功能](#高级查询功能)
+6. [执行日志流式获取](#执行日志流式获取)
+7. [性能优化建议](#性能优化建议)
+8. [常见错误码与解决方案](#常见错误码与解决方案)
+
+## 简介
+任务执行API是DataVines平台的核心组件,用于监控和管理质量检查任务的执行过程。该API提供了完整的生命周期管理功能,包括任务提交、状态查询、执行日志获取、结果分析和历史记录查询。API设计遵循RESTful原则,通过清晰的端点划分和标准化的响应格式,为用户提供可靠的任务执行监控能力。
+
+**本节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+
+## API端点概览
+任务执行API提供了一系列RESTful端点,用于管理质量检查任务的执行过程。主要功能包括任务提交、状态查询、结果获取和日志访问。
+
+### 任务提交
+用于提交新的质量检查或数据核对任务。
+
+```mermaid
+flowchart TD
+A["POST /api/v1/job/execution/submit/data-quality"] --> B["提交质量检查任务"]
+C["POST /api/v1/job/execution/submit/data-reconciliation"] --> D["提交数据核对任务"]
+```
+
+**端点详情:**
+- **提交质量检查任务**
+ - HTTP方法: POST
+ - URL路径: `/api/v1/job/execution/submit/data-quality`
+ - 请求体: `SubmitJob` 对象
+ - 响应: 执行实例ID
+
+- **提交数据核对任务**
+ - HTTP方法: POST
+ - URL路径: `/api/v1/job/execution/submit/data-reconciliation`
+ - 请求体: `SubmitJob` 对象
+ - 响应: 执行实例ID
+
+### 状态管理
+提供任务状态查询和终止功能。
+
+```mermaid
+flowchart TD
+A["GET /api/v1/job/execution/status/{executionId}"] --> B["获取执行状态"]
+C["DELETE /api/v1/job/execution/kill/{executionId}"] --> D["终止执行"]
+```
+
+**端点详情:**
+- **获取执行状态**
+ - HTTP方法: GET
+ - URL路径: `/api/v1/job/execution/status/{executionId}`
+ - 路径参数: `executionId` (执行实例ID)
+ - 响应: 状态描述字符串
+
+- **终止执行**
+ - HTTP方法: DELETE
+ - URL路径: `/api/v1/job/execution/kill/{executionId}`
+ - 路径参数: `executionId` (执行实例ID)
+ - 响应: 操作结果
+
+### 结果查询
+提供执行结果的详细信息查询功能。
+
+```mermaid
+flowchart TD
+A["GET /api/v1/job/execution/list/result/{executionId}"] --> B["获取执行结果列表"]
+C["GET /api/v1/job/execution/list/{jobId}"] --> D["获取作业执行列表"]
+```
+
+**端点详情:**
+- **获取执行结果列表**
+ - HTTP方法: GET
+ - URL路径: `/api/v1/job/execution/list/result/{executionId}`
+ - 路径参数: `executionId` (执行实例ID)
+ - 响应: `JobExecutionResultVO` 列表
+
+- **获取作业执行列表**
+ - HTTP方法: GET
+ - URL路径: `/api/v1/job/execution/list/{jobId}`
+ - 路径参数: `jobId` (作业ID)
+ - 响应: `JobExecution` 对象列表
+
+**本节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionResultVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionResultVO.java)
+
+## 任务执行状态机
+任务执行状态机定义了执行实例的完整生命周期,从提交到完成的各个状态转换。
+
+```mermaid
+stateDiagram-v2
+[*] --> SUBMITTED_SUCCESS
+SUBMITTED_SUCCESS --> RUNNING_EXECUTION
+RUNNING_EXECUTION --> SUCCESS
+RUNNING_EXECUTION --> FAILURE
+RUNNING_EXECUTION --> KILL
+RUNNING_EXECUTION --> STOP
+READY_PAUSE --> PAUSE
+PAUSE --> RUNNING_EXECUTION
+READY_STOP --> STOP
+WAITING_SUMMIT --> SUBMITTED_SUCCESS
+SUCCESS --> [*]
+FAILURE --> [*]
+KILL --> [*]
+STOP --> [*]
+```
+
+### 状态定义
+执行状态由 `ExecutionStatus` 枚举类定义,包含以下核心状态:
+
+| 状态代码 | 状态名称 | 描述 |
+|---------|---------|------|
+| 0 | SUBMITTED_SUCCESS | 已提交 |
+| 1 | RUNNING_EXECUTION | 执行中 |
+| 6 | FAILURE | 失败 |
+| 7 | SUCCESS | 成功 |
+| 9 | KILL | 强制终止 |
+| 5 | STOP | 停止 |
+
+### 状态转换规则
+- **可终止状态**: `SUBMITTED_SUCCESS`, `READY_PAUSE`, `RUNNING_EXECUTION`
+- **完成状态**: `SUCCESS`, `FAILURE`, `KILL`, `STOP`
+- **运行状态**: `RUNNING_EXECUTION`
+- **暂停状态**: `PAUSE`
+
+**本节来源**
+- [ExecutionStatus.java](file://datavines-common/src/main/java/io/datavines/common/enums/ExecutionStatus.java)
+- [JobExecutionVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionVO.java)
+
+## 执行结果结构
+执行结果通过标准化的JSON结构返回,包含检查结果、指标信息和执行元数据。
+
+### 核心字段
+```json
+{
+ "checkSubject": "检查主题",
+ "metricName": "指标名称",
+ "metricParameter": {
+ "key": "value"
+ },
+ "checkResult": "检查结果",
+ "expectedType": "预期类型",
+ "resultFormulaFormat": "结果公式格式",
+ "score": 95.5,
+ "executionTime": "2023-01-01T12:00:00"
+}
+```
+
+### 字段说明
+| 字段名 | 类型 | 描述 |
+|-------|------|------|
+| checkSubject | string | 检查的主题,如表、列等 |
+| metricName | string | 指标名称,如"行数检查"、"空值检查"等 |
+| metricParameter | object | 指标参数,包含具体的检查配置 |
+| checkResult | string | 检查结果,如"PASS"、"FAIL"等 |
+| expectedType | string | 预期值类型 |
+| resultFormulaFormat | string | 结果计算公式格式 |
+| score | number | 质量评分,0-100 |
+| executionTime | datetime | 执行时间 |
+
+**本节来源**
+- [JobExecutionResultVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionResultVO.java)
+- [JobExecutionInfo.java](file://datavines-common/src/main/java/io/datavines/common/entity/JobExecutionInfo.java)
+
+## 高级查询功能
+提供分页查询、状态过滤和时间范围查询等高级功能,支持大规模执行实例的高效管理。
+
+### 分页查询
+```mermaid
+sequenceDiagram
+客户端->>服务器 : POST /api/v1/job/execution/page
+服务器->>数据库 : 查询执行实例
+数据库-->>服务器 : 返回分页结果
+服务器-->>客户端 : 返回执行实例列表
+```
+
+**请求参数 (JobExecutionPageParam):**
+- `pageNumber`: 页码 (从1开始)
+- `pageSize`: 每页大小
+- `jobId`: 作业ID (可选)
+- `status`: 执行状态 (可选)
+- `startTime`: 开始时间 (可选)
+- `endTime`: 结束时间 (可选)
+- `searchVal`: 搜索关键词 (可选)
+
+### 聚合查询
+提供执行状态的聚合统计和趋势分析。
+
+```mermaid
+flowchart TD
+A["POST /api/v1/job/execution/agg-pie"] --> B["获取状态聚合饼图"]
+C["POST /api/v1/job/execution/trend-bar"] --> D["获取趋势柱状图"]
+```
+
+**聚合参数 (JobExecutionDashboardParam):**
+- `workspaceId`: 工作空间ID
+- `startTime`: 开始时间
+- `endTime`: 结束时间
+- `jobType`: 作业类型 (可选)
+
+**本节来源**
+- [JobExecutionPageParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobExecutionPageParam.java)
+- [JobExecutionDashboardParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobExecutionDashboardParam.java)
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+
+## 执行日志流式获取
+提供执行日志的流式获取功能,支持实时日志查看和文件下载。
+
+### 实时日志查询
+```mermaid
+sequenceDiagram
+客户端->>服务器 : GET /api/v1/history/job/execution/queryLogWithOffsetLine
+服务器->>日志服务 : 查询日志
+日志服务-->>服务器 : 返回日志行
+服务器-->>客户端 : 返回日志内容
+```
+
+**端点详情:**
+- HTTP方法: GET
+- URL路径: `/api/v1/history/job/execution/queryLogWithOffsetLine`
+- 请求参数:
+ - `taskId`: 任务ID
+ - `offsetLine`: 偏移行数
+- 响应: 日志内容数组
+
+### 日志文件下载
+```mermaid
+flowchart TD
+A["GET /api/v1/history/job/execution/download"] --> B["重定向到执行主机"]
+B --> C["下载日志文件"]
+```
+
+**端点详情:**
+- HTTP方法: GET
+- URL路径: `/api/v1/history/job/execution/download`
+- 请求参数: `taskId` (任务ID)
+- 响应: 日志文件流
+
+**本节来源**
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [LogService.java](file://datavines-server/dqc/coordinator/log/LogService.java)
+- [JobExecutionLogDiscriminator.java](file://datavines-common/src/main/java/io/datavines/common/log/JobExecutionLogDiscriminator.java)
+
+## 性能优化建议
+为确保API在大规模场景下的性能表现,提供以下优化建议。
+
+### 大结果集处理
+- **分页查询**: 使用分页参数避免一次性获取过多数据
+- **字段过滤**: 只请求必要的字段,减少网络传输
+- **缓存策略**: 对频繁查询的结果进行客户端缓存
+
+### 批量操作
+- **批量查询**: 使用聚合查询接口获取多个执行实例的统计信息
+- **异步处理**: 对于耗时操作,考虑使用异步API模式
+
+### 连接管理
+- **连接复用**: 使用HTTP连接池复用连接
+- **超时设置**: 合理设置连接和读取超时
+- **重试机制**: 实现指数退避重试策略
+
+**本节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionLogFilter.java](file://datavines-common/src/main/java/io/datavines/common/log/JobExecutionLogFilter.java)
+
+## 常见错误码与解决方案
+列出常见的API错误码及其解决方案。
+
+| 错误码 | 错误信息 | 原因 | 解决方案 |
+|-------|--------|------|---------|
+| 30404 | 任务不存在 | 提供的执行ID无效 | 检查执行ID是否正确 |
+| 50001 | 任务执行主机不存在 | 无法确定任务执行主机 | 检查任务状态和配置 |
+| 50002 | 任务日志路径不存在 | 日志文件未生成或路径错误 | 检查日志配置和文件系统 |
+| 40001 | 请求参数无效 | 提交的参数不符合验证规则 | 检查请求体格式和必填字段 |
+| 50003 | 任务已终止 | 尝试操作已终止的任务 | 检查任务当前状态 |
+
+**本节来源**
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [DataVinesServerException.java](file://datavines-core/src/main/java/io/datavines/core/exception/DataVinesServerException.java)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\347\256\241\347\220\206API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\347\256\241\347\220\206API.md"
new file mode 100644
index 00000000..5e3853ec
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\347\256\241\347\220\206API.md"
@@ -0,0 +1,254 @@
+# 任务管理API
+
+
+**本文档引用的文件**
+- [CommonTaskController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskController.java)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java)
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java)
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobCreate.java)
+- [JobUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobUpdate.java)
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java)
+- [JobVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobVO.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [任务生命周期管理API](#任务生命周期管理api)
+3. [任务配置结构](#任务配置结构)
+4. [不同类型任务的配置示例](#不同类型任务的配置示例)
+5. [高级功能API](#高级功能api)
+6. [任务状态转换](#任务状态转换)
+7. [常见错误码与解决方案](#常见错误码与解决方案)
+
+## 简介
+本API文档详细描述了质量检查任务的全生命周期管理功能,涵盖任务的创建、更新、删除、查询和克隆等核心操作。系统支持多种类型的数据质量检查任务,包括单表检查、跨表检查和数据画像等场景。通过RESTful接口提供完整的任务管理能力,支持灵活的检查规则配置、预期值设置和通知策略定义。API设计遵循标准HTTP协议规范,使用JSON格式进行数据交换,确保接口的易用性和可集成性。
+
+## 任务生命周期管理API
+
+### 创建质量检查任务
+通过POST请求创建新的质量检查任务,需要提供完整的任务配置信息。
+
+**HTTP方法**: POST
+**URL路径**: `/api/v1/job`
+**请求体结构**: 包含任务类型、数据源ID、执行平台参数、引擎类型、超时设置等配置项
+
+```json
+{
+ "type": "single_table",
+ "dataSourceId": 123,
+ "engineType": "local",
+ "parameter": "{\"metricType\":\"row_count\",\"expectedValue\":1000}",
+ "jobName": "订单表行数检查"
+}
+```
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java#L45-L49)
+- [JobCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobCreate.java#L27-L78)
+
+### 更新质量检查任务
+通过PUT请求更新现有质量检查任务的配置。
+
+**HTTP方法**: PUT
+**URL路径**: `/api/v1/job`
+**请求体结构**: 包含任务ID和其他需要更新的字段
+
+```json
+{
+ "id": 456,
+ "type": "single_table",
+ "dataSourceId": 123,
+ "parameter": "{\"metricType\":\"row_count\",\"expectedValue\":2000}",
+ "jobName": "更新后的订单表行数检查"
+}
+```
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java#L57-L60)
+- [JobUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobUpdate.java#L27-L31)
+
+### 删除质量检查任务
+通过DELETE请求删除指定ID的质量检查任务。
+
+**HTTP方法**: DELETE
+**URL路径**: `/api/v1/job/{id}`
+**路径参数**: `id` - 任务唯一标识符
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java#L51-L55)
+
+### 查询质量检查任务
+通过GET请求查询单个或多个质量检查任务的详细信息。
+
+**HTTP方法**: GET
+**URL路径**:
+- `/api/v1/job/{id}` - 查询单个任务
+- `/api/v1/job/page` - 分页查询任务列表
+
+**查询参数**: 支持按数据源ID、任务名称、时间范围等条件进行筛选
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java#L63-L91)
+- [JobVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobVO.java#L28-L84)
+
+## 任务配置结构
+
+### 核心配置字段
+质量检查任务的配置采用JSON结构,包含以下核心字段:
+
+| 字段名称 | 类型 | 必填 | 描述 |
+|---------|------|------|------|
+| type | string | 是 | 任务类型,如single_table、cross_table等 |
+| dataSourceId | long | 是 | 数据源ID |
+| engineType | string | 否 | 执行引擎类型,如local、spark等 |
+| parameter | string | 是 | 任务参数JSON字符串 |
+| timeout | int | 否 | 超时时间(毫秒) |
+| jobName | string | 否 | 任务名称 |
+
+### 数据源选择配置
+通过`dataSourceId`和`dataSourceId2`字段指定数据源,支持单数据源和双数据源场景。
+
+### 检查规则配置
+在`parameter`字段中定义具体的检查规则,包含指标类型、阈值、比较方式等。
+
+### 预期值设置
+支持多种预期值策略,包括固定值、历史平均值、动态计算值等。
+
+### 通知策略
+可配置任务执行结果的通知方式和接收人。
+
+**Section sources**
+- [JobCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobCreate.java#L27-L78)
+
+## 不同类型任务的配置示例
+
+### 单表检查任务
+用于检查单个数据表的质量指标。
+
+```json
+{
+ "type": "single_table",
+ "dataSourceId": 123,
+ "parameter": {
+ "metricType": "row_count",
+ "expectedValue": 1000,
+ "tolerance": 0.1
+ },
+ "jobName": "用户表行数检查"
+}
+```
+
+### 跨表检查任务
+用于比较两个数据表之间的数据一致性。
+
+```json
+{
+ "type": "cross_table",
+ "dataSourceId": 123,
+ "dataSourceId2": 456,
+ "parameter": {
+ "metricType": "data_accuracy",
+ "comparisonField": "user_id",
+ "tolerance": 0.05
+ },
+ "jobName": "用户数据一致性检查"
+}
+```
+
+### 数据画像任务
+用于生成数据表的统计特征和质量报告。
+
+```json
+{
+ "type": "data_profile",
+ "dataSourceId": 123,
+ "parameter": {
+ "profileFields": ["name", "email", "phone"],
+ "statistics": ["count", "null_rate", "distinct_count"]
+ },
+ "jobName": "用户表数据画像"
+}
+```
+
+**Section sources**
+- [JobCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobCreate.java#L27-L78)
+
+## 高级功能API
+
+### 任务克隆
+通过复制现有任务的配置创建新任务,支持快速批量创建相似任务。
+
+**HTTP方法**: POST
+**URL路径**: `/api/v1/job/clone`
+**请求体**: 包含源任务ID和新任务的基本信息
+
+### 批量操作
+支持批量创建、更新和删除质量检查任务。
+
+**HTTP方法**: POST
+**URL路径**: `/api/v1/job/batch`
+**请求体**: 包含多个任务配置的数组
+
+### 任务调度配置
+管理任务的定时执行计划。
+
+**HTTP方法**: POST
+**URL路径**: `/api/v1/common-task/schedule/createOrUpdate`
+**请求体结构**:
+```json
+{
+ "taskType": "SINGLE_TABLE",
+ "dataSourceId": 123,
+ "type": "CRON",
+ "param": {
+ "cycle": "DAILY",
+ "time": "02:00"
+ }
+}
+```
+
+**Section sources**
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L44-L47)
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java#L30-L50)
+
+## 任务状态转换
+
+### 状态转换流程
+```mermaid
+stateDiagram-v2
+[*] --> 待执行
+待执行 --> 执行中 : 任务触发
+执行中 --> 执行成功 : 检查通过
+执行中 --> 执行失败 : 检查不通过
+执行中 --> 已超时 : 超过设定时间
+执行成功 --> 待执行 : 定时任务
+执行失败 --> 待执行 : 定时任务
+已超时 --> 待执行 : 定时任务
+```
+
+**Diagram sources**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java#L73-L77)
+
+### 状态查询API
+获取任务执行状态。
+
+**HTTP方法**: GET
+**URL路径**: `/api/v1/job/execution/status/{executionId}`
+**响应**: 返回任务的当前状态描述
+
+**Section sources**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java#L73-L77)
+
+## 常见错误码与解决方案
+
+| 错误码 | 描述 | 解决方案 |
+|-------|------|---------|
+| 400 | 请求参数无效 | 检查请求体中的必填字段是否完整,参数格式是否正确 |
+| 404 | 任务不存在 | 确认任务ID是否正确,任务是否已被删除 |
+| 422 | 任务配置冲突 | 检查数据源连接状态,确认配置参数的合理性 |
+| 500 | 服务器内部错误 | 联系系统管理员,检查服务运行状态 |
+
+**Section sources**
+- [JobController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobController.java)
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\350\260\203\345\272\246API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\350\260\203\345\272\246API.md"
new file mode 100644
index 00000000..5f1a7dd4
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241API/\344\273\273\345\212\241\350\260\203\345\272\246API.md"
@@ -0,0 +1,501 @@
+# 任务调度API
+
+
+**本文档中引用的文件**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java)
+- [JobScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/JobScheduleCreateOrUpdate.java)
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java)
+- [JobScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobScheduleService.java)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java)
+- [MapParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/MapParam.java)
+- [CommonTaskType.java](file://datavines-server/src/main/java/io/datavines/server/enums/CommonTaskType.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [任务调度API概览](#任务调度api概览)
+3. [核心调度配置结构](#核心调度配置结构)
+4. [任务调度API端点](#任务调度api端点)
+5. [通用任务调度API端点](#通用任务调度api端点)
+6. [Cron表达式配置与验证](#cron表达式配置与验证)
+7. [调度状态转换逻辑](#调度状态转换逻辑)
+8. [高级特性](#高级特性)
+9. [常见错误码与解决方案](#常见错误码与解决方案)
+
+## 简介
+本技术文档全面记录了DataVines平台中与质量检查任务调度配置相关的RESTful接口。文档详细描述了创建、更新、启用、禁用和查询任务调度计划的API端点,包括HTTP方法、URL路径、请求参数和请求体结构。文档化了调度配置的完整JSON结构,涵盖cron表达式、调度类型、启动时间、结束时间等核心字段。提供了基于Quartz的cron表达式配置示例和最佳实践。解释了调度状态的转换逻辑和相应的API调用方式,包括调度暂停、恢复和立即触发执行的功能。包含了调度冲突检测、重叠处理等高级特性的说明,以及常见错误码和解决方案。
+
+## 任务调度API概览
+DataVines平台提供了两套独立但结构相似的任务调度API,分别用于管理质量检查作业调度和通用任务调度。质量检查作业调度API主要管理数据质量检查任务的执行计划,而通用任务调度API则用于管理元数据抓取、数据质量报告生成等系统级任务。两套API均基于Quartz调度框架实现,支持灵活的cron表达式配置,允许用户定义复杂的调度周期。
+
+**调度系统架构**
+```mermaid
+graph TB
+subgraph "客户端"
+UI[用户界面]
+API_Client[API客户端]
+end
+subgraph "服务端"
+API_Server[API服务器]
+Scheduler[Quartz调度器]
+Database[(数据库)]
+end
+UI --> API_Server
+API_Client --> API_Server
+API_Server --> Scheduler
+API_Server --> Database
+Scheduler --> Database
+```
+
+**图源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java)
+
+## 核心调度配置结构
+调度配置的核心结构包含多个关键字段,这些字段共同定义了任务的执行行为和周期。所有调度配置均通过JSON格式的请求体进行传输,支持灵活的参数化配置。
+
+### 质量检查任务调度配置
+质量检查任务调度配置主要用于定义数据质量检查作业的执行计划。配置结构继承自`JobScheduleCreate`类,并包含一个可选的ID字段用于更新操作。
+
+```json
+{
+ "id": 123,
+ "jobId": 456,
+ "type": "CRON",
+ "param": {
+ "cycle": "custom",
+ "parameter": {
+ "crontab": "0 0 2 * * ?"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00"
+}
+```
+
+**字段说明**
+- `id`: 调度配置的唯一标识符,创建新调度时可为空
+- `jobId`: 关联的质量检查作业ID,必填字段
+- `type`: 调度类型,目前支持"CRON"类型
+- `param`: 调度参数,包含调度周期和具体参数
+- `startTime`: 调度开始时间,ISO 8601格式
+- `endTime`: 调度结束时间,可为空表示无限期执行
+
+**节源**
+- [JobScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/JobScheduleCreateOrUpdate.java)
+- [JobScheduleCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/JobScheduleCreate.java)
+
+### 通用任务调度配置
+通用任务调度配置用于管理平台级任务的执行计划,如元数据抓取和数据质量报告生成。与质量检查任务调度相比,通用任务调度配置包含任务类型字段,用于区分不同类型的系统任务。
+
+```json
+{
+ "id": 789,
+ "taskType": "CATALOG_METADATA_FETCH",
+ "dataSourceId": 101,
+ "type": "CRON",
+ "param": {
+ "cycle": "daily",
+ "parameter": {
+ "hour": "2",
+ "minute": "0"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00"
+}
+```
+
+**字段说明**
+- `taskType`: 任务类型,枚举值包括"CATALOG_METADATA_FETCH"和"DATA_QUALITY_REPORT"
+- `dataSourceId`: 关联的数据源ID,必填字段
+- 其他字段与质量检查任务调度配置相同
+
+**节源**
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java)
+- [CommonTaskType.java](file://datavines-server/src/main/java/io/datavines/server/enums/CommonTaskType.java)
+
+## 任务调度API端点
+任务调度API提供了一组RESTful端点,用于管理质量检查作业的调度配置。所有端点均位于`/api/v1/job/schedule`基础路径下,需要有效的身份验证令牌。
+
+### 创建或更新调度配置
+该端点用于创建新的质量检查作业调度配置或更新现有配置。如果请求中包含ID且该ID对应的调度配置已存在,则执行更新操作;否则创建新的调度配置。
+
+**API详情**
+- **HTTP方法**: POST
+- **URL路径**: `/api/v1/job/schedule/createOrUpdate`
+- **请求内容类型**: `application/json`
+- **响应内容类型**: `application/json`
+
+**请求体结构**
+```json
+{
+ "jobId": 456,
+ "type": "CRON",
+ "param": {
+ "cycle": "custom",
+ "parameter": {
+ "crontab": "0 0 2 * * ?"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00"
+}
+```
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "id": 123,
+ "jobId": 456,
+ "type": "CRON",
+ "param": {
+ "cycle": "custom",
+ "parameter": {
+ "crontab": "0 0 2 * * ?"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00",
+ "createTime": "2023-01-01 10:00:00",
+ "updateTime": "2023-01-01 10:00:00"
+ }
+}
+```
+
+**节源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java#L46-L50)
+- [JobScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobScheduleService.java#L30)
+
+### 查询作业调度配置
+该端点用于根据作业ID查询对应的质量检查作业调度配置。如果指定作业没有配置调度计划,则返回空结果。
+
+**API详情**
+- **HTTP方法**: GET
+- **URL路径**: `/api/v1/job/schedule/{jobId}`
+- **响应内容类型**: `application/json`
+
+**路径参数**
+- `jobId`: 质量检查作业的唯一标识符
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "id": 123,
+ "jobId": 456,
+ "type": "CRON",
+ "param": {
+ "cycle": "custom",
+ "parameter": {
+ "crontab": "0 0 2 * * ?"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00",
+ "createTime": "2023-01-01 10:00:00",
+ "updateTime": "2023-01-01 10:00:00"
+ }
+}
+```
+
+**节源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java#L52-L56)
+- [JobScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobScheduleService.java#L38)
+
+## 通用任务调度API端点
+通用任务调度API提供了一组RESTful端点,用于管理平台级任务的调度配置。所有端点均位于`/api/v1/common-task/schedule`基础路径下,需要有效的身份验证令牌。
+
+### 创建或更新通用任务调度
+该端点用于创建新的通用任务调度配置或更新现有配置。与质量检查任务调度类似,如果请求中包含ID且该ID对应的调度配置已存在,则执行更新操作;否则创建新的调度配置。
+
+**API详情**
+- **HTTP方法**: POST
+- **URL路径**: `/api/v1/common-task/schedule/createOrUpdate`
+- **请求内容类型**: `application/json`
+- **响应内容类型**: `application/json`
+
+**请求体结构**
+```json
+{
+ "taskType": "CATALOG_METADATA_FETCH",
+ "dataSourceId": 101,
+ "type": "CRON",
+ "param": {
+ "cycle": "daily",
+ "parameter": {
+ "hour": "2",
+ "minute": "0"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00"
+}
+```
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "id": 789,
+ "taskType": "CATALOG_METADATA_FETCH",
+ "dataSourceId": 101,
+ "type": "CRON",
+ "param": {
+ "cycle": "daily",
+ "parameter": {
+ "hour": "2",
+ "minute": "0"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00",
+ "createTime": "2023-01-01 10:00:00",
+ "updateTime": "2023-01-01 10:00:00"
+ }
+}
+```
+
+**节源**
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L44-L48)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java#L30)
+
+### 根据数据源ID查询通用任务调度
+该端点用于根据数据源ID和任务类型查询对应的通用任务调度配置。此查询方式特别适用于需要获取特定数据源上某种类型任务调度配置的场景。
+
+**API详情**
+- **HTTP方法**: GET
+- **URL路径**: `/api/v1/common-task/schedule/{dataSourceId}/{taskType}`
+- **响应内容类型**: `application/json`
+
+**路径参数**
+- `dataSourceId`: 数据源的唯一标识符
+- `taskType`: 任务类型,可选值为"CATALOG_METADATA_FETCH"或"DATA_QUALITY_REPORT"
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "id": 789,
+ "taskType": "CATALOG_METADATA_FETCH",
+ "dataSourceId": 101,
+ "type": "CRON",
+ "param": {
+ "cycle": "daily",
+ "parameter": {
+ "hour": "2",
+ "minute": "0"
+ }
+ },
+ "startTime": "2023-01-01 00:00:00",
+ "endTime": "2024-01-01 00:00:00",
+ "createTime": "2023-01-01 10:00:00",
+ "updateTime": "2023-01-01 10:00:00"
+ }
+}
+```
+
+**节源**
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L50-L54)
+- [CommonTaskScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/CommonTaskScheduleService.java#L38)
+
+## Cron表达式配置与验证
+Cron表达式是任务调度系统的核心组成部分,用于定义任务执行的复杂时间周期。DataVines平台基于Quartz调度框架,支持完整的cron表达式语法。
+
+### Cron表达式生成
+系统提供了辅助API端点,用于根据简单的周期参数生成对应的cron表达式。这简化了用户配置复杂调度周期的过程。
+
+**API详情**
+- **HTTP方法**: POST
+- **URL路径**: `/api/v1/job/schedule/cron` 和 `/api/v1/common-task/schedule/cron`
+- **请求内容类型**: `application/json`
+- **响应内容类型**: `application/json`
+
+**请求体结构**
+```json
+{
+ "cycle": "weekly",
+ "parameter": {
+ "dayOfWeek": "1",
+ "hour": "2",
+ "minute": "30"
+ }
+}
+```
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": ["0 30 2 ? * 1"]
+}
+```
+
+**节源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java#L58-L62)
+- [CommonTaskScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/CommonTaskScheduleController.java#L56-L60)
+- [MapParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/MapParam.java)
+
+### Cron表达式验证
+在创建或更新调度配置时,系统会自动验证cron表达式的有效性。用户也可以通过专门的API端点来验证cron表达式。
+
+**API详情**
+- **HTTP方法**: POST
+- **URL路径**: `/api/v1/job/schedule/cron/future/list`
+- **请求内容类型**: `application/json`
+- **响应内容类型**: `application/json`
+
+**请求体结构**
+```json
+{
+ "crontab": "0 0 2 * * ?"
+}
+```
+
+**成功响应**
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": [
+ "2023-01-02 02:00:00",
+ "2023-01-03 02:00:00",
+ "2023-01-04 02:00:00",
+ "2023-01-05 02:00:00",
+ "2023-01-06 02:00:00"
+ ]
+}
+```
+
+**节源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java#L65-L69)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L239-L263)
+
+## 调度状态转换逻辑
+调度系统的状态转换主要通过创建、更新和删除操作来实现。系统本身不提供显式的启用/禁用端点,而是通过调度配置的生命周期管理来控制任务的执行状态。
+
+### 调度创建与启用
+当创建新的调度配置时,系统会自动将其注册到Quartz调度器中,从而使任务进入可执行状态。调度配置中的`startTime`字段定义了任务首次执行的时间。
+
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant API as "API服务器"
+participant Scheduler as "Quartz调度器"
+Client->>API : POST /api/v1/job/schedule/createOrUpdate
+API->>API : 验证请求参数
+API->>API : 构建调度信息
+API->>Scheduler : 添加作业和触发器
+Scheduler-->>API : 注册成功
+API-->>Client : 返回创建的调度配置
+```
+
+**图源**
+- [JobScheduleController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobScheduleController.java#L46-L50)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L74-L149)
+
+### 调度更新与修改
+更新现有调度配置时,系统会检查cron表达式是否发生变化。如果发生变化,系统会重新安排触发器,从而修改任务的执行周期。`startTime`和`endTime`字段的修改也会相应调整任务的执行时间窗口。
+
+### 调度删除与禁用
+删除调度配置是禁用任务执行的主要方式。当删除调度配置时,系统会从Quartz调度器中移除对应的作业和触发器,从而停止任务的后续执行。
+
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant API as "API服务器"
+participant Scheduler as "Quartz调度器"
+Client->>API : DELETE /api/v1/job/schedule/{id}
+API->>API : 查找调度配置
+API->>Scheduler : 删除作业
+Scheduler-->>API : 删除成功
+API->>API : 从数据库删除记录
+API-->>Client : 返回删除成功
+```
+
+**节源**
+- [JobScheduleService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobScheduleService.java#L32)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L157-L174)
+
+## 高级特性
+任务调度系统提供了一些高级特性,以满足复杂的调度需求和提高系统的可靠性。
+
+### 调度冲突检测
+系统在创建或更新调度配置时会自动检测潜在的调度冲突。虽然当前实现中没有显式的冲突检测逻辑,但通过唯一的工作名称和组名称组合(基于任务类型、ID和数据源ID生成),确保了每个调度配置的唯一性。
+
+```java
+private static String buildJobName(ScheduleJobInfo schedule) {
+ return schedule.getType().getDescription() + "_job" + DataVinesConstants.UNDERLINE + schedule.getId();
+}
+
+private static String buildJobGroupName(ScheduleJobInfo schedule) {
+ return schedule.getType().getDescription() + "_job_group" + DataVinesConstants.UNDERLINE + schedule.getDatasourceId();
+}
+```
+
+**节源**
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L204-L215)
+
+### 时区处理
+系统在处理调度时间时会进行时区转换,确保调度时间在不同服务器时区环境下的一致性。当将调度信息添加到Quartz调度器时,系统会将本地时间转换为服务器默认时区的时间。
+
+```java
+private static Date buildDate(LocalDateTime localDateTime){
+ ZoneId zoneId = ZoneId.systemDefault();
+ ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
+ Instant instant = zonedDateTime.toInstant();
+ return Date.from(instant);
+}
+```
+
+**节源**
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L232-L237)
+
+## 常见错误码与解决方案
+以下是任务调度API中常见的错误码及其解决方案。
+
+### SCHEDULE_CRON_IS_INVALID_ERROR
+**错误描述**: 提供的cron表达式无效
+**错误码**: 4001
+**解决方案**:
+1. 检查cron表达式的格式是否符合Quartz cron表达式规范
+2. 使用`/cron/future/list`端点验证cron表达式
+3. 参考标准cron表达式语法:`秒 分 时 日 月 周 年(可选)`
+
+### JOB_ID_CANNOT_BE_EMPTY
+**错误描述**: 作业ID不能为空
+**错误码**: 4002
+**解决方案**:
+1. 确保在创建调度配置时提供了有效的作业ID
+2. 通过作业管理API获取有效的作业ID列表
+
+### DATASOURCE_ID_CANNOT_BE_EMPTY
+**错误描述**: 数据源ID不能为空
+**错误码**: 4003
+**解决方案**:
+1. 确保在创建通用任务调度时提供了有效的数据源ID
+2. 通过数据源管理API获取有效的数据源ID列表
+
+### TASK_TYPE_CANNOT_BE_EMPTY
+**错误描述**: 任务类型不能为空
+**错误码**: 4004
+**解决方案**:
+1. 确保在创建通用任务调度时提供了有效的任务类型
+2. 使用支持的任务类型:`CATALOG_METADATA_FETCH`或`DATA_QUALITY_REPORT`
+
+**节源**
+- [JobScheduleCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/schedule/JobScheduleCreate.java#L30-L31)
+- [CommonTaskScheduleCreateOrUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/task/CommonTaskScheduleCreateOrUpdate.java#L34-L38)
+- [QuartzExecutors.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/quartz/QuartzExecutors.java#L253-L258)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241\346\211\247\350\241\214API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241\346\211\247\350\241\214API.md"
new file mode 100644
index 00000000..643a51a2
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\344\273\273\345\212\241\346\211\247\350\241\214API.md"
@@ -0,0 +1,313 @@
+# 任务执行API
+
+
+**本文档中引用的文件**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+- [JobExecutionResultVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionResultVO.java)
+- [JobExecutionPageParam.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/job/JobExecutionPageParam.java)
+- [JobExecutionInfo.java](file://datavines-common/src/main/java/io/datavines/common/entity/JobExecutionInfo.java)
+- [ExecutionStatus.java](file://datavines-common/src/main/java/io/datavines/common/enums/ExecutionStatus.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+- [LogResult.java](file://datavines-common/src/main/java/io/datavines/common/entity/LogResult.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [核心组件](#核心组件)
+4. [架构概述](#架构概述)
+5. [详细组件分析](#详细组件分析)
+6. [依赖分析](#依赖分析)
+7. [性能考虑](#性能考虑)
+8. [故障排除指南](#故障排除指南)
+9. [结论](#结论)
+10. [附录](#附录)(如有必要)
+
+## 简介
+本文档全面记录了与任务执行实例相关的所有RESTful接口,重点描述了查询任务执行历史、获取执行日志、查看执行结果和检查详细报告的API端点。文档详细说明了执行结果的JSON结构,包括总体执行状态、各检查项结果、错误数据详情等。同时提供了分页查询、条件过滤等高级查询功能的使用方法,解释了执行结果中各项指标的含义和计算方式,并包含执行日志流式获取的API使用示例,为监控系统集成提供指导。
+
+## 项目结构
+DataVines项目是一个大数据质量监控系统,其任务执行API主要集中在`datavines-server`模块中。该模块提供了RESTful接口来管理任务的执行、查询执行历史、获取执行日志和查看执行结果。`datavines-common`模块包含了任务执行相关的公共实体和枚举,而`datavines-metric`模块则定义了质量检查的度量标准和结果计算。
+
+```mermaid
+graph TB
+subgraph "前端"
+UI[用户界面]
+end
+subgraph "后端"
+API[任务执行API]
+Service[任务执行服务]
+Repository[数据访问层]
+Log[日志服务]
+end
+UI --> API
+API --> Service
+Service --> Repository
+Service --> Log
+```
+
+**图表来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+
+**章节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+
+## 核心组件
+任务执行API的核心组件包括`JobExecutionController`、`JobHistoryExecutionController`和`JobQualityReportController`。这些控制器提供了对任务执行生命周期的全面管理,从提交任务到查询执行结果和日志。`JobExecutionController`负责任务的提交、状态查询和执行列表获取;`JobHistoryExecutionController`提供了对执行日志的流式查询和下载功能;`JobQualityReportController`则专注于质量报告的生成和查询。
+
+**章节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+
+## 架构概述
+任务执行API采用典型的分层架构,包括控制器层、服务层和数据访问层。控制器层暴露RESTful接口,服务层处理业务逻辑,数据访问层与数据库交互。日志服务独立于主流程,通过异步方式收集和查询任务执行日志。这种架构确保了系统的可扩展性和可维护性。
+
+```mermaid
+graph TB
+Client[客户端] --> Controller[控制器层]
+Controller --> Service[服务层]
+Service --> Repository[数据访问层]
+Service --> LogService[日志服务]
+Repository --> Database[(数据库)]
+LogService --> LogFile[(日志文件)]
+```
+
+**图表来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+## 详细组件分析
+
+### 任务执行控制器分析
+`JobExecutionController`是任务执行API的主要入口,提供了任务提交、状态查询和执行列表获取等功能。该控制器通过`JobExecutionService`处理业务逻辑,并返回相应的执行结果。
+
+#### 类图
+```mermaid
+classDiagram
+class JobExecutionController {
++jobExecutionService JobExecutionService
++jobExecutionResultService JobExecutionResultService
++jobExecutionErrorDataService JobExecutionErrorDataService
++submitDataQualityJob(SubmitJob) Object
++submitDataReconJob(SubmitJob) Object
++killTask(Long) Object
++getTaskStatus(Long) Object
++getJobExecutionListByJobId(Long) Object
++getJobExecutionResultInfoList(Long) Object
++page(JobExecutionPageParam) Object
++readErrorDataPage(Long, Integer, Integer) Object
++getExecutionAggPie(JobExecutionDashboardParam) Object
++getExecutionTrendBar(JobExecutionDashboardParam) Object
+}
+class JobExecutionService {
++submitJob(SubmitJob) Long
++killJob(Long) Boolean
++getById(Long) JobExecution
++listByJobId(Long) JobExecution[]
++getJobExecutionPage(JobExecutionPageParam) IPage~JobExecutionVO~
++getJobExecutionAggPie(JobExecutionDashboardParam) JobExecutionAggItem[]
++getJobExecutionTrendBar(JobExecutionDashboardParam) JobExecutionTrendBar
+}
+JobExecutionController --> JobExecutionService : "依赖"
+```
+
+**图表来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+
+#### 序列图
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "JobExecutionController"
+participant Service as "JobExecutionService"
+participant Repository as "JobExecutionMapper"
+Client->>Controller : POST /api/v1/job/execution/submit/data-quality
+Controller->>Service : submitJob(SubmitJob)
+Service->>Repository : insert(JobExecution)
+Repository-->>Service : 执行ID
+Service-->>Controller : 执行ID
+Controller-->>Client : {executionId}
+Client->>Controller : GET /api/v1/job/execution/status/{executionId}
+Controller->>Service : getById(executionId)
+Service->>Repository : selectById(executionId)
+Repository-->>Service : JobExecution
+Service-->>Controller : ExecutionStatus
+Controller-->>Client : {status}
+```
+
+**图表来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+- [JobExecutionMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/JobExecutionMapper.java)
+
+**章节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+
+### 任务历史执行控制器分析
+`JobHistoryExecutionController`提供了对任务执行日志的查询和下载功能。该控制器通过`LogService`查询日志内容,并支持按偏移行数流式获取日志。
+
+#### 类图
+```mermaid
+classDiagram
+class JobHistoryExecutionController {
++jobExecutionService JobExecutionService
++logService LogService
++queryLogWithOffsetLine(Long, int) Object
++download(Long) void
+}
+class LogService {
++queryLog(long, int, int) LogResult
++getLogBytes(long) byte[]
+}
+JobHistoryExecutionController --> LogService : "依赖"
+JobHistoryExecutionController --> JobExecutionService : "依赖"
+```
+
+**图表来源**
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+#### 序列图
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "JobHistoryExecutionController"
+participant LogService as "LogService"
+Client->>Controller : GET /api/v1/history/job/execution/queryLogWithOffsetLine
+Controller->>Controller : getJobExecutionHost(taskId)
+Controller->>LogService : queryLog(taskId, offsetLine, 10000)
+LogService->>LogService : readPartFileContent(logPath, offsetLine, 10000)
+LogService-->>Controller : LogResult
+Controller-->>Client : {msg, offsetLine}
+```
+
+**图表来源**
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+**章节来源**
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+### 任务质量报告控制器分析
+`JobQualityReportController`提供了对任务质量报告的查询功能,包括分页查询、分数查询和趋势查询。
+
+#### 类图
+```mermaid
+classDiagram
+class JobQualityReportController {
++jobExecutionService JobExecutionService
++jobExecutionResultService JobExecutionResultService
++jobExecutionErrorDataService JobExecutionErrorDataService
++jobQualityReportService JobQualityReportService
++page(JobQualityReportDashboardParam) Object
++listColumnExecution(Long) Object
++getScoreByCondition(JobQualityReportDashboardParam) Object
++getScoreTrendByCondition(JobQualityReportDashboardParam) Object
+}
+class JobQualityReportService {
++getQualityReportPage(JobQualityReportDashboardParam) IPage~JobExecutionResultVO~
++listColumnExecution(Long) JobExecutionResultVO[]
++getScoreByCondition(JobQualityReportDashboardParam) BigDecimal
++getScoreTrendByCondition(JobQualityReportDashboardParam) JobQualityReportScoreTrend[]
+}
+JobQualityReportController --> JobQualityReportService : "依赖"
+```
+
+**图表来源**
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+- [JobQualityReportService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobQualityReportService.java)
+
+**章节来源**
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+- [JobQualityReportService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobQualityReportService.java)
+
+## 依赖分析
+任务执行API的依赖关系清晰,控制器层依赖于服务层,服务层依赖于数据访问层和日志服务。这种分层依赖确保了各组件的职责分离和可测试性。
+
+```mermaid
+graph TD
+JobExecutionController --> JobExecutionService
+JobHistoryExecutionController --> LogService
+JobHistoryExecutionController --> JobExecutionService
+JobQualityReportController --> JobQualityReportService
+JobExecutionService --> JobExecutionMapper
+JobQualityReportService --> JobExecutionResultMapper
+LogService --> JobExecutionMapper
+```
+
+**图表来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+- [JobExecutionService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobExecutionService.java)
+- [JobQualityReportService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/JobQualityReportService.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+**章节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [JobQualityReportController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobQualityReportController.java)
+
+## 性能考虑
+任务执行API在设计时考虑了性能因素。日志查询采用流式读取,避免了大文件加载到内存中。分页查询和条件过滤功能减少了不必要的数据传输。对于高频查询的执行状态,可以考虑引入缓存机制以进一步提升性能。
+
+## 故障排除指南
+当任务执行API出现问题时,可以按照以下步骤进行排查:
+1. 检查任务执行状态是否为"失败"或"强制终止"。
+2. 查询执行日志以获取详细的错误信息。
+3. 检查数据库连接和任务配置是否正确。
+4. 验证执行主机是否可达。
+
+**章节来源**
+- [JobExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobExecutionController.java)
+- [JobHistoryExecutionController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/JobHistoryExecutionController.java)
+- [LogService.java](file://datavines-server/src/main/java/io/datavines/server/dqc/coordinator/log/LogService.java)
+
+## 结论
+任务执行API为DataVines系统提供了全面的任务管理功能,包括任务提交、状态查询、日志获取和质量报告生成。通过RESTful接口,外部系统可以方便地集成和监控数据质量检查任务。API设计合理,性能良好,为大数据质量监控提供了可靠的基础。
+
+## 附录
+
+### 执行状态枚举
+任务执行状态枚举定义了任务的生命周期状态:
+
+| 状态码 | 英文描述 | 中文描述 |
+|--------|----------|----------|
+| 0 | submitted | 已提交 |
+| 1 | running | 执行中 |
+| 6 | failure | 失败 |
+| 7 | success | 成功 |
+| 9 | kill | 强制终止 |
+
+**章节来源**
+- [ExecutionStatus.java](file://datavines-common/src/main/java/io/datavines/common/enums/ExecutionStatus.java)
+
+### 执行结果VO
+任务执行结果的JSON结构如下:
+
+```json
+{
+ "checkSubject": "检查主题",
+ "metricName": "度量名称",
+ "metricParameter": {
+ "key": "value"
+ },
+ "checkResult": "检查结果",
+ "expectedType": "期望类型",
+ "resultFormulaFormat": "结果公式格式",
+ "score": 95.5,
+ "executionTime": "2023-01-01T12:00:00"
+}
+```
+
+**章节来源**
+- [JobExecutionResultVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/JobExecutionResultVO.java)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\345\267\245\344\275\234\347\251\272\351\227\264API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\345\267\245\344\275\234\347\251\272\351\227\264API.md"
new file mode 100644
index 00000000..44306110
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\345\267\245\344\275\234\347\251\272\351\227\264API.md"
@@ -0,0 +1,247 @@
+# 工作空间API
+
+
+**本文档中引用的文件**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java)
+- [WorkSpaceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceCreate.java)
+- [WorkSpaceUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceUpdate.java)
+- [InviteUserIntoWorkspace.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/InviteUserIntoWorkspace.java)
+- [RemoveUserOutWorkspace.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/RemoveUserOutWorkspace.java)
+- [WorkSpaceVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/WorkSpaceVO.java)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java)
+- [WorkSpaceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/WorkSpaceServiceImpl.java)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java)
+- [WorkSpace.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/WorkSpace.java)
+- [datavines-mysql.sql](file://scripts/sql/datavines-mysql.sql)
+- [UserWorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/UserWorkSpaceService.java)
+- [UserWorkSpaceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/UserWorkSpaceServiceImpl.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [核心组件](#核心组件)
+4. [架构概述](#架构概述)
+5. [详细组件分析](#详细组件分析)
+6. [依赖分析](#依赖分析)
+7. [性能考虑](#性能考虑)
+8. [故障排除指南](#故障排除指南)
+9. [结论](#结论)
+
+## 简介
+本文档全面记录了DataVines平台中与工作空间管理相关的所有RESTful接口。文档详细描述了创建、更新、删除工作空间以及管理用户与工作空间关系的API端点。同时,文档化了工作空间配置的JSON结构,包括名称、描述、成员管理等,并解释了工作空间隔离机制和资源分配策略。此外,还提供了批量用户管理、权限分配等高级功能的API使用方法,以及工作空间配额管理和审计日志相关的API说明,为多租户场景下的API使用提供指导。
+
+## 项目结构
+DataVines是一个数据质量平台,其工作空间管理功能主要集中在`datavines-server`模块中。该模块提供了RESTful API接口,用于管理用户的工作空间。工作空间是用户组织和管理数据质量任务的逻辑容器,支持多用户协作和权限控制。
+
+```mermaid
+graph TD
+subgraph "前端"
+UI[用户界面]
+end
+subgraph "后端"
+API[API服务器]
+Service[工作空间服务]
+Mapper[工作空间映射器]
+DB[(数据库)]
+end
+UI --> API
+API --> Service
+Service --> Mapper
+Mapper --> DB
+```
+
+**图表来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L37)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L32)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java#L24)
+- [datavines-mysql.sql](file://scripts/sql/datavines-mysql.sql#L166-L177)
+
+**章节来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L1-L89)
+- [datavines-mysql.sql](file://scripts/sql/datavines-mysql.sql#L1-L200)
+
+## 核心组件
+工作空间管理的核心组件包括控制器(Controller)、服务(Service)、数据访问对象(Mapper)和实体(Entity)。这些组件共同实现了工作空间的创建、更新、删除、查询以及用户管理功能。
+
+**章节来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L1-L89)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L1-L49)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java#L1-L25)
+
+## 架构概述
+工作空间管理的架构遵循典型的分层设计模式,包括表现层(Controller)、业务逻辑层(Service)和数据访问层(Mapper)。这种分层架构有助于实现关注点分离,提高代码的可维护性和可测试性。
+
+```mermaid
+classDiagram
+class WorkSpaceController {
++createWorkSpace(WorkSpaceCreate) Object
++updateWorkSpace(WorkSpaceUpdate) Object
++deleteWorkSpace(id) Object
++listByUserId() Object
++inviteUserIntoWorkspace(InviteUserIntoWorkspace) Object
++removeUser(RemoveUserOutWorkspace) Object
++listUserByWorkspaceId(workspaceId, pageNumber, pageSize) Object
+}
+class WorkSpaceService {
++insert(WorkSpaceCreate) long
++update(WorkSpaceUpdate) int
++getById(id) WorkSpace
++listByUserId() WorkSpaceVO[]
++deleteById(id) int
++inviteUserIntoWorkspace(InviteUserIntoWorkspace) long
++removeUser(RemoveUserOutWorkspace) boolean
++listUserByWorkspaceId(workspaceId, pageNumber, pageSize) IPage~UserVO~
+}
+class WorkSpaceMapper {
++BaseMapper~WorkSpace~
+}
+class WorkSpace {
++id : Long
++name : String
++createBy : Long
++createTime : LocalDateTime
++updateBy : Long
++updateTime : LocalDateTime
+}
+WorkSpaceController --> WorkSpaceService : "调用"
+WorkSpaceService --> WorkSpaceMapper : "调用"
+WorkSpaceMapper --> WorkSpace : "映射"
+```
+
+**图表来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L39-L88)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L32-L49)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java#L24)
+- [WorkSpace.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/WorkSpace.java)
+
+## 详细组件分析
+### 工作空间控制器分析
+工作空间控制器(WorkSpaceController)是RESTful API的入口点,负责处理来自前端的HTTP请求。它使用Spring MVC框架的注解来定义API端点,并通过调用工作空间服务(WorkSpaceService)来执行具体的业务逻辑。
+
+#### 对象关系图
+```mermaid
+classDiagram
+WorkSpaceController <|-- WorkSpaceService : "依赖"
+WorkSpaceService <|-- WorkSpaceMapper : "依赖"
+WorkSpaceMapper <|-- WorkSpace : "映射"
+```
+
+**图表来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L42)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L41)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java#L24)
+
+#### API调用流程
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "WorkSpaceController"
+participant Service as "WorkSpaceService"
+participant Mapper as "WorkSpaceMapper"
+participant DB as "数据库"
+Client->>Controller : POST /api/v1/workspace
+Controller->>Service : insert(WorkSpaceCreate)
+Service->>Mapper : insert(WorkSpace)
+Mapper->>DB : INSERT INTO dv_workspace
+DB-->>Mapper : 返回插入ID
+Mapper-->>Service : 返回插入结果
+Service-->>Controller : 返回工作空间ID
+Controller-->>Client : 返回创建结果
+Client->>Controller : GET /api/v1/workspace/list
+Controller->>Service : listByUserId()
+Service->>Mapper : selectList(QueryWrapper)
+Mapper->>DB : SELECT * FROM dv_workspace WHERE user关联
+DB-->>Mapper : 返回工作空间列表
+Mapper-->>Service : 返回VO列表
+Service-->>Controller : 返回工作空间VO列表
+Controller-->>Client : 返回工作空间列表
+```
+
+**图表来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L45-L66)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L40)
+- [WorkSpaceMapper.java](file://datavines-server/src/main/java/io/datavines/server/repository/mapper/WorkSpaceMapper.java#L24)
+
+**章节来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L1-L89)
+- [WorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/WorkSpaceService.java#L1-L49)
+
+### 工作空间数据结构分析
+工作空间的数据结构包括输入DTO(Data Transfer Object)、输出VO(Value Object)和数据库实体。这些数据结构定义了工作空间的属性和行为。
+
+#### 数据结构定义
+```mermaid
+classDiagram
+class WorkSpaceCreate {
++name : String
+}
+class WorkSpaceUpdate {
++id : Long
++name : String
+}
+class WorkSpaceVO {
++id : Long
++name : String
++createBy : Long
++createTime : LocalDateTime
++updateBy : Long
++updateTime : LocalDateTime
+}
+class WorkSpace {
++id : Long
++name : String
++createBy : Long
++createTime : LocalDateTime
++updateBy : Long
++updateTime : LocalDateTime
+}
+WorkSpaceCreate <|-- WorkSpaceUpdate : "继承"
+WorkSpace --> WorkSpaceVO : "转换"
+```
+
+**图表来源**
+- [WorkSpaceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceCreate.java#L27-L30)
+- [WorkSpaceUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceUpdate.java#L27-L31)
+- [WorkSpaceVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/WorkSpaceVO.java#L30-L44)
+- [WorkSpace.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/WorkSpace.java)
+
+**章节来源**
+- [WorkSpaceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceCreate.java#L1-L31)
+- [WorkSpaceUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceUpdate.java#L1-L32)
+- [WorkSpaceVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/WorkSpaceVO.java#L1-L45)
+
+## 依赖分析
+工作空间管理功能依赖于多个组件和服务,包括用户服务(UserService)、用户工作空间服务(UserWorkSpaceService)和数据库访问层。这些依赖关系通过Spring的依赖注入机制进行管理。
+
+```mermaid
+graph TD
+WorkSpaceController --> WorkSpaceService
+WorkSpaceService --> WorkSpaceMapper
+WorkSpaceService --> UserService
+WorkSpaceService --> UserWorkSpaceService
+WorkSpaceMapper --> WorkSpace
+UserWorkSpaceService --> UserWorkSpace
+```
+
+**图表来源**
+- [WorkSpaceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/WorkSpaceServiceImpl.java#L53-L55)
+- [UserWorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/UserWorkSpaceService.java#L28)
+- [UserWorkSpaceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/UserWorkSpaceServiceImpl.java#L27)
+
+**章节来源**
+- [WorkSpaceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/WorkSpaceServiceImpl.java#L1-L55)
+- [UserWorkSpaceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/UserWorkSpaceService.java#L1-L33)
+
+## 性能考虑
+工作空间管理功能在设计时考虑了性能因素,包括使用MyBatis-Plus的分页查询、数据库索引优化和缓存机制。这些优化措施有助于提高API的响应速度和系统的整体性能。
+
+## 故障排除指南
+在使用工作空间API时,可能会遇到一些常见问题,如权限不足、参数验证失败等。建议检查请求参数是否符合要求,确保用户具有相应的权限,并查看服务器日志以获取更多错误信息。
+
+**章节来源**
+- [WorkSpaceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/WorkSpaceController.java#L46-L77)
+- [WorkSpaceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/workspace/WorkSpaceCreate.java#L28-L30)
+
+## 结论
+本文档详细介绍了DataVines平台中工作空间管理的RESTful API,包括其架构、组件、数据结构和使用方法。通过遵循本文档的指导,开发者可以有效地集成和使用工作空间管理功能,为用户提供高效的数据质量管理体验。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\346\225\260\346\215\256\346\272\220API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\346\225\260\346\215\256\346\272\220API.md"
new file mode 100644
index 00000000..39e5171e
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\346\225\260\346\215\256\346\272\220API.md"
@@ -0,0 +1,542 @@
+# 数据源API
+
+
+**本文档引用的文件**
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java)
+- [DataSourceService.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/DataSourceService.java)
+- [DataSourceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/DataSourceServiceImpl.java)
+- [DataSourceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/datasource/DataSourceCreate.java)
+- [DataSourceUpdate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/datasource/DataSourceUpdate.java)
+- [TestConnectionRequestParam.java](file://datavines-common/src/main/java/io/datavines/common/param/TestConnectionRequestParam.java)
+- [ConnectorRequestParam.java](file://datavines-common/src/main/java/io/datavines/common/param/ConnectorRequestParam.java)
+- [ConnectorResponse.java](file://datavines-common/src/main/java/io/datavines/common/param/ConnectorResponse.java)
+- [ResultMap.java](file://datavines-core/src/main/java/io/datavines/core/entity/ResultMap.java)
+- [DataSource.java](file://datavines-server/src/main/java/io/datavines/server/repository/entity/DataSource.java)
+- [DataSourceVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/DataSourceVO.java)
+- [ConnectionInfo.java](file://datavines-common/src/main/java/io/datavines/common/entity/ConnectionInfo.java)
+- [JdbcConfigBuilder.java](file://datavines-connector/connector-plugins/connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcConfigBuilder.java)
+- [OracleParameterConverter.java](file://datavines-connector/connector-plugins/connector-oracle/src/main/java/io/datavines/connector/plugin/OracleParameterConverter.java)
+- [DataVinesServerException.java](file://datavines-core/src/main/java/io/datavines/core/exception/DataVinesServerException.java)
+
+
+## 更新摘要
+**变更内容**
+- 更新了数据源连接测试API的响应格式,从简单布尔值改为结构化的ResultMap响应
+- 新增了ResultMap通用响应封装类的详细说明
+- 更新了连接测试API的请求和响应示例
+- 完善了错误处理机制的说明
+
+## 目录
+1. [简介](#简介)
+2. [API端点](#api端点)
+3. [数据源配置JSON结构](#数据源配置json结构)
+4. [请求和响应示例](#请求和响应示例)
+5. [连接测试API](#连接测试api)
+6. [错误处理机制](#错误处理机制)
+7. [最佳实践和安全建议](#最佳实践和安全建议)
+
+## 简介
+
+数据源API提供了管理数据源的完整功能,包括创建、更新、删除和查询数据源。该API支持多种数据库类型,如MySQL、PostgreSQL、Oracle等,并提供了测试连接、执行脚本和获取元数据的功能。API基于RESTful设计原则,使用JSON格式进行数据交换。
+
+**数据源API的主要功能包括:**
+- 创建新的数据源配置
+- 更新现有数据源配置
+- 删除数据源
+- 查询数据源列表和分页信息
+- 测试数据源连接
+- 获取数据库、表和列的元数据
+- 执行SQL脚本
+- 获取特定类型数据源的配置JSON模板
+
+**Section sources**
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java#L44-L167)
+
+## API端点
+
+### 创建数据源
+创建一个新的数据源配置。
+
+**HTTP方法**: POST
+**URL路径**: `/api/datasource`
+**内容类型**: `application/json`
+
+**请求体结构**:
+- `workspaceId`: 工作空间ID (long, 必填)
+- `name`: 数据源名称 (string, 必填)
+- `type`: 数据源类型 (string, 必填)
+- `param`: 数据源连接参数 (string, 必填, JSON格式)
+
+**响应格式**: 返回创建的数据源ID
+
+### 更新数据源
+更新现有数据源配置。
+
+**HTTP方法**: PUT
+**URL路径**: `/api/datasource`
+**内容类型**: `application/json`
+
+**请求体结构**:
+- `id`: 数据源ID (long, 必填)
+- `workspaceId`: 工作空间ID (long, 必填)
+- `name`: 数据源名称 (string, 必填)
+- `type`: 数据源类型 (string, 必填)
+- `param`: 数据源连接参数 (string, 必填, JSON格式)
+
+**响应格式**: 返回更新结果状态
+
+### 删除数据源
+删除指定ID的数据源。
+
+**HTTP方法**: DELETE
+**URL路径**: `/api/datasource/{id}`
+
+**响应格式**: 返回删除结果状态
+
+### 查询数据源分页列表
+获取数据源的分页列表。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/page`
+
+**查询参数**:
+- `searchVal`: 搜索关键字 (可选)
+- `workSpaceId`: 工作空间ID (必填)
+- `pageNumber`: 页码 (必填)
+- `pageSize`: 每页大小 (必填)
+
+**响应格式**: 返回分页的数据源列表
+
+### 获取数据库列表
+获取指定数据源的数据库列表。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/{id}/databases`
+
+**响应格式**: 返回数据库列表
+
+### 获取表列表
+获取指定数据源和数据库的表列表。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/{id}/{database}/tables`
+
+**响应格式**: 返回表列表
+
+### 获取列列表
+获取指定数据源、数据库和表的列列表。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/{id}/{database}/{table}/columns`
+
+**响应格式**: 返回列列表
+
+### 执行SQL脚本
+在指定数据源上执行SQL脚本。
+
+**HTTP方法**: POST
+**URL路径**: `/api/datasource/execute`
+**内容类型**: `application/json`
+
+**请求体结构**:
+- `dataSourceId`: 数据源ID
+- `script`: 要执行的SQL脚本
+
+**响应格式**: 返回执行结果
+
+### 获取配置JSON模板
+获取指定类型数据源的配置JSON模板。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/config/{type}`
+
+**响应格式**: 返回配置JSON模板
+
+### 获取连接器类型列表
+获取所有可用的连接器类型。
+
+**HTTP方法**: GET
+**URL路径**: `/api/datasource/type/list`
+
+**响应格式**: 返回连接器类型列表
+
+**Section sources**
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java#L56-L167)
+
+## 数据源配置JSON结构
+
+数据源配置以JSON格式存储,包含连接特定数据库所需的所有参数。不同数据库类型的配置结构有所不同,但都包含基本的连接信息。
+
+### 通用配置参数
+所有数据源类型都支持以下通用参数:
+- `type`: 数据源类型标识
+- `host`: 数据库主机地址
+- `port`: 数据库端口
+- `user`: 用户名
+- `password`: 密码
+- `database`: 数据库名称
+- `schema`: 模式名称
+- `properties`: 连接属性(以key=value&key2=value2格式)
+
+### MySQL配置
+```json
+{
+ "type": "mysql",
+ "host": "localhost",
+ "port": "3306",
+ "user": "root",
+ "password": "password",
+ "database": "test",
+ "properties": "useSSL=false&serverTimezone=UTC"
+}
+```
+
+### PostgreSQL配置
+```json
+{
+ "type": "postgresql",
+ "host": "localhost",
+ "port": "5432",
+ "user": "postgres",
+ "password": "password",
+ "database": "test",
+ "schema": "public",
+ "properties": "sslmode=disable"
+}
+```
+
+### Oracle配置
+Oracle数据库使用SID或服务名进行连接:
+
+**使用SID连接:**
+```json
+{
+ "type": "oracle",
+ "host": "localhost",
+ "port": "1521",
+ "user": "system",
+ "password": "password",
+ "sid": "ORCL",
+ "properties": "oracle.net.CONNECT_TIMEOUT=10000"
+}
+```
+
+**使用服务名连接:**
+```json
+{
+ "type": "oracle",
+ "host": "localhost",
+ "port": "1521",
+ "user": "system",
+ "password": "password",
+ "serviceName": "ORCLPDB1",
+ "properties": "oracle.net.CONNECT_TIMEOUT=10000"
+}
+```
+
+### SQL Server配置
+```json
+{
+ "type": "sqlserver",
+ "host": "localhost",
+ "port": "1433",
+ "user": "sa",
+ "password": "password",
+ "database": "test",
+ "properties": "encrypt=false;trustServerCertificate=true"
+}
+```
+
+### JDBC通用配置
+对于支持JDBC的数据库,可以使用通用JDBC配置:
+```json
+{
+ "type": "jdbc",
+ "url": "jdbc:your_database_url",
+ "driverName": "com.your.driver.Class",
+ "user": "username",
+ "password": "password",
+ "properties": "property1=value1&property2=value2"
+}
+```
+
+**Section sources**
+- [ConnectionInfo.java](file://datavines-common/src/main/java/io/datavines/common/entity/ConnectionInfo.java#L32-L51)
+- [JdbcConfigBuilder.java](file://datavines-connector/connector-plugins/connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcConfigBuilder.java#L36-L72)
+- [OracleParameterConverter.java](file://datavines-connector/connector-plugins/connector-oracle/src/main/java/io/datavines/connector/plugin/OracleParameterConverter.java#L25-L44)
+
+## 请求和响应示例
+
+### 创建数据源请求示例
+```json
+{
+ "workspaceId": 1,
+ "name": "MySQL Production",
+ "type": "mysql",
+ "param": "{\"host\":\"192.168.1.100\",\"port\":\"3306\",\"user\":\"appuser\",\"password\":\"app123\",\"database\":\"production\",\"properties\":\"useSSL=false\"}"
+}
+```
+
+### 创建数据源成功响应示例
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": 123
+}
+```
+
+### 获取数据源分页列表请求示例
+```
+GET /api/datasource/page?searchVal=mysql&workSpaceId=1&pageNumber=1&pageSize=10
+```
+
+### 获取数据源分页列表成功响应示例
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "records": [
+ {
+ "id": 123,
+ "uuid": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8",
+ "name": "MySQL Production",
+ "type": "mysql",
+ "updater": "admin",
+ "updateTime": "2023-05-15 10:30:00"
+ }
+ ],
+ "total": 1,
+ "size": 10,
+ "current": 1,
+ "pages": 1
+ }
+}
+```
+
+### 获取数据库列表响应示例
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": [
+ {
+ "uuid": "d1e2f3g4-h5i6-7890-j1k2-l3m4n5o6p7q8",
+ "name": "production",
+ "type": "database",
+ "parentId": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8",
+ "metadata": {}
+ },
+ {
+ "uuid": "r9s8t7u6-v5w4-3210-x9y8-z7a6b5c4d3e2",
+ "name": "staging",
+ "type": "database",
+ "parentId": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8",
+ "metadata": {}
+ }
+ ]
+}
+```
+
+### 执行SQL脚本请求示例
+```json
+{
+ "dataSourceId": 123,
+ "script": "SELECT COUNT(*) FROM users WHERE created_date > '2023-01-01'"
+}
+```
+
+### 执行SQL脚本成功响应示例
+```json
+{
+ "success": true,
+ "msg": "操作成功",
+ "data": {
+ "columns": [
+ {
+ "name": "COUNT(*)",
+ "type": "BIGINT"
+ }
+ ],
+ "data": [
+ [12345]
+ ]
+ }
+}
+```
+
+**Section sources**
+- [DataSourceCreate.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/bo/datasource/DataSourceCreate.java#L26-L39)
+- [DataSourceVO.java](file://datavines-server/src/main/java/io/datavines/server/api/dto/vo/DataSourceVO.java#L25-L42)
+
+## 连接测试API
+
+连接测试API用于验证数据源配置是否正确,能够成功连接到目标数据库。
+
+### API端点
+**HTTP方法**: POST
+**URL路径**: `/api/datasource/test`
+**内容类型**: `application/json`
+
+### 请求参数
+请求体为JSON格式,包含以下字段:
+- `type`: 数据源类型
+- `dataSourceParam`: 数据源连接参数(与创建数据源时的param字段相同)
+
+### 请求示例
+```json
+{
+ "type": "mysql",
+ "dataSourceParam": "{\"host\":\"localhost\",\"port\":\"3306\",\"user\":\"root\",\"password\":\"password\",\"database\":\"test\"}"
+}
+```
+
+### 响应格式
+**更新**:连接测试API现在返回结构化的ResultMap响应,包含完整的状态信息和错误详情。
+
+成功响应:
+```json
+{
+ "code": 200,
+ "msg": "Success",
+ "data": true
+}
+```
+
+失败响应:
+```json
+{
+ "code": 400,
+ "msg": "无法连接到数据库: Connection refused",
+ "data": false
+}
+```
+
+### 实现原理
+连接测试API通过以下步骤验证连接:
+1. 根据`type`参数获取对应的连接器工厂
+2. 使用连接器工厂创建连接器实例
+3. 调用连接器的`testConnect`方法进行连接测试
+4. 将连接器返回的ConnectorResponse转换为ResultMap响应格式
+5. 成功时返回包含`true`的data字段,失败时返回包含`false`的data字段
+
+连接测试会实际建立数据库连接并执行简单的查询(如`SELECT 1`)来验证连接的有效性。
+
+### ResultMap响应格式详解
+ResultMap是系统通用的响应封装类,提供标准化的响应格式:
+
+- `code`: HTTP状态码(200表示成功,400表示失败)
+- `msg`: 响应消息描述
+- `data`: 实际响应数据(布尔值表示连接成功与否)
+
+**Section sources**
+- [DataSourceController.java](file://datavines-server/src/main/java/io/datavines/server/api/controller/DataSourceController.java#L59-L86)
+- [TestConnectionRequestParam.java](file://datavines-common/src/main/java/io/datavines/common/param/TestConnectionRequestParam.java#L22-L25)
+- [ConnectorRequestParam.java](file://datavines-common/src/main/java/io/datavines/common/param/ConnectorRequestParam.java#L22-L27)
+- [ConnectorResponse.java](file://datavines-common/src/main/java/io/datavines/common/param/ConnectorResponse.java#L22-L52)
+- [ResultMap.java](file://datavines-core/src/main/java/io/datavines/core/entity/ResultMap.java#L29-L128)
+- [DataSourceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/DataSourceServiceImpl.java#L75-L78)
+
+## 错误处理机制
+
+数据源API实现了完善的错误处理机制,确保客户端能够获得清晰的错误信息。
+
+### 常见错误代码
+| 错误代码 | 错误消息 | 说明 |
+|---------|--------|------|
+| 200 | Success | 操作成功 |
+| 400 | 失败 | 操作失败 |
+| 401 | 未授权访问 | 用户未登录或令牌无效 |
+| 403 | 禁止访问 | 用户没有权限执行该操作 |
+| 404 | 资源未找到 | 请求的资源不存在 |
+| 409 | 冲突 | 请求与现有资源状态冲突 |
+| 500 | 服务器内部错误 | 服务器处理请求时发生未知错误 |
+| 503 | 服务不可用 | 服务暂时不可用 |
+
+### 错误响应格式
+所有错误响应都遵循统一的ResultMap格式:
+```json
+{
+ "code": 400,
+ "msg": "错误描述信息",
+ "data": null
+}
+```
+
+### 具体错误场景
+#### 创建数据源时的错误
+- **参数缺失**: 如果`workspaceId`、`name`、`type`或`param`为空,返回400错误
+- **工作空间不存在**: 如果指定的`workspaceId`不存在,返回404错误
+- **数据源名称重复**: 如果在同一工作空间中创建同名数据源,返回409错误
+
+#### 更新数据源时的错误
+- **数据源不存在**: 如果要更新的`id`对应的数据源不存在,返回404错误
+- **参数无效**: 如果更新的参数不符合要求,返回400错误
+
+#### 删除数据源时的错误
+- **数据源不存在**: 如果要删除的`id`对应的数据源不存在,返回404错误
+- **数据源正在使用**: 如果数据源被作业或其他资源引用,返回409错误
+
+#### 连接测试时的错误
+- **连接失败**: 如果无法连接到数据库,返回400错误,消息中包含具体的连接错误信息
+- **认证失败**: 如果用户名或密码错误,返回400错误
+- **连接器响应为空**: 如果连接器返回null,返回400错误
+
+### 异常处理实现
+后端使用`DataVinesServerException`类来处理所有业务异常。该异常类继承自`DataVinesException`,并包含状态码和错误消息。
+
+```java
+public class DataVinesServerException extends DataVinesException {
+ private Status status;
+
+ public DataVinesServerException(Status status) {
+ super(status.getMsg());
+ this.status = status;
+ }
+
+ public DataVinesServerException(Status status, Object... statusParams) {
+ super(CollectionUtils.isEmpty(Arrays.asList(statusParams)) ?
+ status.getMsg() : MessageFormat.format(status.getMsg(), statusParams));
+ this.status = status;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+}
+```
+
+**Section sources**
+- [DataVinesServerException.java](file://datavines-core/src/main/java/io/datavines/core/exception/DataVinesServerException.java#L26-L64)
+- [DataSourceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/DataSourceServiceImpl.java#L150-L197)
+
+## 最佳实践和安全建议
+
+### 安全最佳实践
+1. **敏感信息加密**: 所有数据源配置中的密码等敏感信息都会使用AES加密后存储在数据库中
+2. **最小权限原则**: 为数据源配置的数据库用户应仅具有执行必要操作的最小权限
+3. **定期轮换凭证**: 定期更新数据库用户的密码,并相应更新数据源配置
+4. **网络隔离**: 将数据库部署在受保护的网络区域,仅允许应用服务器访问
+
+### 性能优化建议
+1. **连接池配置**: 对于频繁访问的数据源,建议配置适当的连接池大小
+2. **索引优化**: 确保在经常查询的字段上创建适当的索引
+3. **查询优化**: 避免在生产环境中执行全表扫描等低效查询
+4. **缓存策略**: 对于不经常变化的元数据,可以考虑使用缓存
+
+### 使用建议
+1. **命名规范**: 使用有意义的名称来标识数据源,便于管理和识别
+2. **分类管理**: 根据环境(开发、测试、生产)或业务领域对数据源进行分类管理
+3. **文档记录**: 记录每个数据源的用途、负责人和相关业务信息
+4. **监控告警**: 设置数据源连接状态的监控和告警,及时发现连接问题
+
+### 开发者建议
+1. **错误处理**: 在调用API时,妥善处理各种可能的错误情况
+2. **重试机制**: 对于临时性错误(如网络问题),实现适当的重试机制
+3. **资源清理**: 及时清理不再使用的数据源配置,避免资源浪费
+4. **版本控制**: 对重要的数据源配置变更进行记录和版本控制
+
+**Section sources**
+- [DataSourceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/DataSourceServiceImpl.java#L113-L116)
+- [DataSourceServiceImpl.java](file://datavines-server/src/main/java/io/datavines/server/repository/service/impl/DataSourceServiceImpl.java#L184-L189)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\347\224\250\346\210\267API.md" "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\347\224\250\346\210\267API.md"
new file mode 100644
index 00000000..c3b89005
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/API\345\217\202\350\200\203/\347\224\250\346\210\267API.md"
@@ -0,0 +1,264 @@
+# 用户API
+
+
+**本文档引用的文件**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java)
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java)
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java)
+- [UserServiceImpl.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\impl\UserServiceImpl.java)
+- [User.java](file://datavines-server\src\main\java\io\datavines\server\repository\entity\User.java)
+- [UserLogin.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserLogin.java)
+- [UserRegister.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserRegister.java)
+- [UserResetPassword.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserResetPassword.java)
+- [UserUpdate.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserUpdate.java)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java)
+- [AuthenticationInterceptor.java](file://datavines-server\src\main\java\io\datavines\server\api\inteceptor\AuthenticationInterceptor.java)
+- [AuthIgnore.java](file://datavines-server\src\main\java\io\datavines\server\api\annotation\AuthIgnore.java)
+- [CheckTokenExist.java](file://datavines-server\src\main\java\io\datavines\server\api\annotation\CheckTokenExist.java)
+- [LoginUser.java](file://datavines-server\src\main\java\io\datavines\server\api\annotation\LoginUser.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [核心组件](#核心组件)
+4. [架构概述](#架构概述)
+5. [详细组件分析](#详细组件分析)
+6. [依赖分析](#依赖分析)
+7. [性能考虑](#性能考虑)
+8. [故障排除指南](#故障排除指南)
+9. [结论](#结论)
+
+## 简介
+本文档全面记录了DataVines平台中与用户账户管理相关的所有RESTful接口。文档详细描述了用户注册、登录、登出、密码重置、个人信息更新等API端点,涵盖了认证机制、权限控制模型、安全最佳实践以及用户状态管理等方面的内容。
+
+## 项目结构
+DataVines平台的用户管理功能主要集中在`datavines-server`模块中,相关代码位于`src/main/java/io/datavines/server/api`包下。用户相关的控制器、服务、实体和数据传输对象被组织在清晰的目录结构中,便于维护和扩展。
+
+```mermaid
+graph TB
+subgraph "API层"
+LoginController["LoginController
- 登录/注册"]
+UserController["UserController
- 用户信息管理"]
+end
+subgraph "服务层"
+UserService["UserService
- 用户业务逻辑"]
+end
+subgraph "数据层"
+User["User
- 用户实体"]
+UserMapper["UserMapper
- 数据访问"]
+end
+LoginController --> UserService
+UserController --> UserService
+UserService --> UserMapper
+UserMapper --> User
+```
+
+**图表来源**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L1-L77)
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java#L1-L56)
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+- [User.java](file://datavines-server\src\main\java\io\datavines\server\repository\entity\User.java#L1-L62)
+
+**章节来源**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L1-L77)
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java#L1-L56)
+
+## 核心组件
+用户管理功能的核心组件包括用户控制器、用户服务、用户实体和认证拦截器。这些组件协同工作,实现了完整的用户生命周期管理功能。
+
+**章节来源**
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+- [UserServiceImpl.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\impl\UserServiceImpl.java#L1-L161)
+
+## 架构概述
+用户API采用典型的分层架构,包括表现层、业务逻辑层和数据访问层。认证机制基于JWT(JSON Web Token),通过拦截器实现统一的权限验证。
+
+```mermaid
+sequenceDiagram
+participant Client as "客户端"
+participant Controller as "控制器"
+participant Service as "服务层"
+participant TokenManager as "令牌管理器"
+participant DB as "数据库"
+Client->>Controller : POST /api/login
+Controller->>Service : 调用login方法
+Service->>DB : 查询用户信息
+DB-->>Service : 返回用户数据
+Service->>TokenManager : 生成JWT令牌
+TokenManager-->>Service : 返回令牌
+Service-->>Controller : 返回登录结果
+Controller-->>Client : 返回包含令牌的响应
+Client->>Controller : 带令牌的请求
+Controller->>AuthenticationInterceptor : 拦截请求
+AuthenticationInterceptor->>TokenManager : 验证令牌
+TokenManager-->>AuthenticationInterceptor : 返回验证结果
+AuthenticationInterceptor->>Controller : 继续处理
+```
+
+**图表来源**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L51-L58)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java#L51-L57)
+- [AuthenticationInterceptor.java](file://datavines-server\src\main\java\io\datavines\server\api\inteceptor\AuthenticationInterceptor.java#L54-L104)
+
+## 详细组件分析
+
+### 用户认证分析
+用户认证组件负责处理用户的登录、注册和令牌管理。通过JWT实现无状态的认证机制,确保系统的可扩展性。
+
+#### 认证类图
+```mermaid
+classDiagram
+class LoginController {
++login(UserLogin) Object
++register(UserRegister) Object
+}
+class UserController {
++update(UserLogin) Object
++resetPassword(UserResetPassword) Object
+}
+class UserService {
++login(UserLogin) UserLoginResult
++register(UserRegister) UserBaseInfo
++resetPassword(UserResetPassword) Boolean
+}
+class TokenManager {
++generateToken(username, password) String
++validateToken(token, username, password) Boolean
++getUsername(token) String
++getPassword(token) String
+}
+class AuthenticationInterceptor {
++preHandle(request, response, handler) boolean
+}
+LoginController --> UserService : "调用"
+UserController --> UserService : "调用"
+UserService --> TokenManager : "使用"
+AuthenticationInterceptor --> TokenManager : "验证"
+AuthenticationInterceptor --> UserService : "查询用户"
+```
+
+**图表来源**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L1-L77)
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java#L1-L56)
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java#L1-L197)
+- [AuthenticationInterceptor.java](file://datavines-server\src\main\java\io\datavines\server\api\inteceptor\AuthenticationInterceptor.java#L1-L116)
+
+**章节来源**
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L1-L77)
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java#L1-L56)
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+
+### 用户实体分析
+用户实体定义了系统中用户的基本属性和数据结构,是用户管理功能的基础。
+
+#### 用户实体类图
+```mermaid
+classDiagram
+class User {
++id : Long
++username : String
++password : String
++email : String
++phone : Long
++admin : Boolean
++createTime : LocalDateTime
++updateTime : LocalDateTime
+}
+class UserRegister {
++username : String
++email : String
++password : String
++verificationCode : String
++verificationCodeJwt : String
++phone : String
+}
+class UserLogin {
++username : String
++password : String
+}
+class UserResetPassword {
++id : Long
++oldPassword : String
++newPassword : String
++newPasswordConfirm : String
+}
+class UserUpdate {
++id : Long
++username : String
++email : String
++phone : String
+}
+class UserLoginResult {
++id : Long
++username : String
++email : String
++phone : Long
++admin : Boolean
++createTime : LocalDateTime
++updateTime : LocalDateTime
+}
+class UserBaseInfo {
++id : Long
++username : String
++email : String
++phone : Long
++admin : Boolean
++createTime : LocalDateTime
++updateTime : LocalDateTime
+}
+```
+
+**图表来源**
+- [User.java](file://datavines-server\src\main\java\io\datavines\server\repository\entity\User.java#L1-L62)
+- [UserRegister.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserRegister.java#L1-L57)
+- [UserLogin.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserLogin.java#L1-L37)
+- [UserResetPassword.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserResetPassword.java#L1-L37)
+- [UserUpdate.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserUpdate.java#L1-L37)
+- [UserLoginResult.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\vo\UserLoginResult.java#L1-L37)
+- [UserBaseInfo.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\vo\UserBaseInfo.java#L1-L37)
+
+**章节来源**
+- [User.java](file://datavines-server\src\main\java\io\datavines\server\repository\entity\User.java#L1-L62)
+- [UserRegister.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserRegister.java#L1-L57)
+- [UserLogin.java](file://datavines-server\src\main\java\io\datavines\server\api\dto\bo\user\UserLogin.java#L1-L37)
+
+## 依赖分析
+用户管理模块依赖于多个核心组件,包括JWT令牌管理、数据库访问和全局异常处理。这些依赖关系确保了功能的完整性和系统的稳定性。
+
+```mermaid
+graph TD
+UserController --> UserService
+LoginController --> UserService
+UserService --> UserMapper
+UserService --> TokenManager
+AuthenticationInterceptor --> TokenManager
+AuthenticationInterceptor --> UserService
+UserMapper --> User
+```
+
+**图表来源**
+- [UserController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\UserController.java#L1-L56)
+- [LoginController.java](file://datavines-server\src\main\java\io\datavines\server\api\controller\LoginController.java#L1-L77)
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java#L1-L197)
+- [AuthenticationInterceptor.java](file://datavines-server\src\main\java\io\datavines\server\api\inteceptor\AuthenticationInterceptor.java#L1-L116)
+
+**章节来源**
+- [UserService.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\UserService.java#L1-L38)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java#L1-L197)
+- [AuthenticationInterceptor.java](file://datavines-server\src\main\java\io\datavines\server\api\inteceptor\AuthenticationInterceptor.java#L1-L116)
+
+## 性能考虑
+用户认证系统采用了JWT无状态认证机制,避免了服务器端会话存储,提高了系统的可扩展性。密码使用BCrypt算法进行哈希存储,确保了安全性的同时也考虑了计算性能。
+
+## 故障排除指南
+当用户遇到登录问题时,应首先检查用户名和密码是否正确。如果忘记密码,可以使用密码重置功能。系统会验证旧密码的正确性,然后允许设置新密码。
+
+**章节来源**
+- [UserServiceImpl.java](file://datavines-server\src\main\java\io\datavines\server\repository\service\impl\UserServiceImpl.java#L133-L153)
+- [TokenManager.java](file://datavines-core\src\main\java\io\datavines\core\utils\TokenManager.java#L163-L167)
+
+## 结论
+DataVines平台的用户API提供了完整的用户账户管理功能,包括注册、登录、密码重置等核心操作。通过JWT认证机制和分层架构设计,系统既保证了安全性又具备良好的可扩展性。建议在使用时遵循安全最佳实践,定期更新密码并妥善保管认证令牌。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\345\274\200\345\217\221\350\200\205\346\214\207\345\215\227.md" "b/.qoder/repowiki/zh/content/\345\274\200\345\217\221\350\200\205\346\214\207\345\215\227.md"
new file mode 100644
index 00000000..3ffb4f82
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\345\274\200\345\217\221\350\200\205\346\214\207\345\215\227.md"
@@ -0,0 +1,277 @@
+# 开发者指南
+
+
+**本文档中引用的文件**
+- [pom.xml](file://pom.xml)
+- [README.md](file://README.md)
+- [mvnw](file://mvnw)
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml)
+- [package.json](file://datavines-ui/package.json)
+- [checkStyle.xml](file://tools/checkstyle/checkStyle.xml)
+- [datavines-daemon.sh](file://bin/datavines-daemon.sh)
+- [datavines-submit.sh](file://bin/datavines-submit.sh)
+- [.eslintrc.js](file://datavines-ui/.eslintrc.js)
+- [DataVinesArchitecture](docs/img/architecture.jpg)
+
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [开发环境搭建](#开发环境搭建)
+4. [构建系统与依赖管理](#构建系统与依赖管理)
+5. [代码风格与规范](#代码风格与规范)
+6. [单元测试与集成测试](#单元测试与集成测试)
+7. [代码提交流程](#代码提交流程)
+8. [代码审查标准](#代码审查标准)
+9. [调试技巧与性能分析](#调试技巧与性能分析)
+10. [分支策略与发布流程](#分支策略与发布流程)
+11. [新贡献者入门指导](#新贡献者入门指导)
+
+## 简介
+DataVines 是一个易于使用的数据质量服务平台,支持多种指标。该项目采用插件化设计,具有良好的扩展性,支持多种数据源、检查规则、作业执行引擎、告警通道、错误数据存储和注册中心。平台提供网页配置检查作业、运行作业、查看作业执行日志、查看错误数据和检查结果的功能,同时也支持在线生成作业运行脚本,通过 `datavines-submit.sh` 提交作业,可与调度系统结合使用。
+
+**Section sources**
+- [README.md](file://README.md#L19-L136)
+
+## 项目结构
+DataVines 项目采用 Maven 多模块结构,主要模块包括:
+- `datavines-common`: 公共模块,包含配置、数据源、实体、枚举、异常、日志、参数、工具类等
+- `datavines-engine`: 引擎模块,包含引擎API、公共工具、配置、核心、执行器和插件
+- `datavines-cli`: 命令行接口模块
+- `datavines-connector`: 连接器模块,包含API和各种数据源插件
+- `datavines-ui`: 用户界面模块,基于 React 和 Ant Design 构建
+- `datavines-server`: 服务器模块,基于 Spring Boot 构建
+- `datavines-metric`: 指标模块,包含API、期望值插件、指标插件和结果公式插件
+- `datavines-notification`: 通知模块,包含API、核心和各种通知插件
+- `datavines-registry`: 注册中心模块,包含API和各种注册中心插件
+- `datavines-runner`: 作业执行模块
+- `datavines-spi`: SPI 模块,包含插件加载、优先级和SPI注解
+
+```mermaid
+graph TD
+A[DataVines] --> B[datavines-common]
+A --> C[datavines-engine]
+A --> D[datavines-cli]
+A --> E[datavines-connector]
+A --> F[datavines-ui]
+A --> G[datavines-server]
+A --> H[datavines-metric]
+A --> I[datavines-notification]
+A --> J[datavines-registry]
+A --> K[datavines-runner]
+A --> L[datavines-spi]
+```
+
+**Diagram sources **
+- [pom.xml](file://pom.xml#L30-L45)
+
+**Section sources**
+- [pom.xml](file://pom.xml#L21-L907)
+
+## 开发环境搭建
+### 前置条件
+- JDK 8
+- Maven 3.6.1 或更高版本
+- Node.js (用于前端开发)
+- 数据库 (MySQL 或 PostgreSQL)
+
+### 环境配置
+1. 克隆项目仓库
+2. 配置数据库连接信息
+3. 安装前端依赖
+
+```bash
+# 安装前端依赖
+cd datavines-ui
+npm install
+```
+
+**Section sources**
+- [README.md](file://README.md#L95-L97)
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml#L17-L96)
+- [package.json](file://datavines-ui/package.json#L1-L100)
+
+## 构建系统与依赖管理
+### Maven 构建
+DataVines 使用 Maven 作为构建工具。项目根目录下的 `pom.xml` 文件定义了所有模块的依赖关系和构建配置。
+
+```bash
+# 构建项目
+mvn clean package -Prelease -DskipTests
+```
+
+### 依赖管理
+项目使用 Maven 的 `dependencyManagement` 来统一管理依赖版本,确保所有模块使用一致的依赖版本。
+
+```xml
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+
+
+```
+
+**Section sources**
+- [pom.xml](file://pom.xml#L129-L701)
+- [README.md](file://README.md#L31-L34)
+
+## 代码风格与规范
+### Java 代码规范
+项目使用 Checkstyle 进行代码风格检查,配置文件位于 `tools/checkstyle/checkStyle.xml`。主要规范包括:
+- 使用 UTF-8 编码
+- 禁止使用 `System.out.println`
+- 禁止使用 `@author` 注解
+- 禁止使用中文字符
+- 禁止 TODO 注释中包含用户名
+- 禁止行尾空格
+- 禁止使用 `Throwables.propagate`
+- 文件长度不超过 3000 行
+- 行长度不超过 500 字符
+- 包名必须以 `io.datavines` 开头
+- 类名、方法名、变量名遵循驼峰命名法
+
+### JavaScript/TypeScript 代码规范
+前端代码使用 ESLint 进行代码风格检查,配置文件位于 `datavines-ui/.eslintrc.js`。主要规范包括:
+- 使用 4 空格缩进
+- 使用单引号
+- 行长度不超过 200 字符
+- 禁用 `no-console` 规则
+- 禁用 `no-use-before-define` 规则
+
+**Section sources**
+- [checkStyle.xml](file://tools/checkstyle/checkStyle.xml#L1-L522)
+- [.eslintrc.js](file://datavines-ui/.eslintrc.js#L1-L62)
+
+## 单元测试与集成测试
+### 单元测试
+项目使用 JUnit 进行单元测试,测试代码位于各模块的 `src/test` 目录下。
+
+```java
+@Test
+public void testDataVinesClient() {
+ // 测试代码
+}
+```
+
+### 集成测试
+项目使用 Spring Test 进行集成测试,测试代码位于 `datavines-server` 模块的 `src/test` 目录下。
+
+```java
+@SpringBootTest
+class DataVinesServerApplicationTests {
+ @Test
+ void contextLoads() {
+ }
+}
+```
+
+**Section sources**
+- [pom.xml](file://pom.xml#L295-L300)
+- [spring.version](file://pom.xml#L105)
+- [DataVinesClientTest.java](file://datavines-client/datavines-http-client/datavines-http-client-core/src/test/java/io/datavines/http/clinet/DataVinesClientTest.java)
+- [ZooKeeperRegistryTest.java](file://datavines-registry/datavines-registry-plugins/datavines-registry-zookeeper/src/test/java/io/datavines/registry/plugin/ZooKeeperRegistryTest.java)
+
+## 代码提交流程
+1. 创建新的功能分支
+2. 在分支上进行开发
+3. 提交代码到远程仓库
+4. 创建 Pull Request
+5. 等待代码审查
+6. 根据审查意见修改代码
+7. 合并到主分支
+
+```bash
+# 创建功能分支
+git checkout -b feature/new-feature
+
+# 提交代码
+git add .
+git commit -m "Add new feature"
+git push origin feature/new-feature
+```
+
+**Section sources**
+- [README.md](file://README.md#L107-L115)
+
+## 代码审查标准
+### 代码质量
+- 代码必须通过 Checkstyle 和 ESLint 检查
+- 代码必须有适当的单元测试和集成测试
+- 代码必须有适当的注释和文档
+- 代码必须遵循项目的设计模式和架构
+
+### 代码风格
+- 代码必须遵循项目的代码风格规范
+- 代码必须有适当的命名
+- 代码必须有适当的缩进和格式化
+
+### 功能实现
+- 功能必须完整实现
+- 功能必须经过充分测试
+- 功能必须有适当的错误处理
+
+**Section sources**
+- [checkStyle.xml](file://tools/checkstyle/checkStyle.xml#L1-L522)
+- [.eslintrc.js](file://datavines-ui/.eslintrc.js#L1-L62)
+
+## 调试技巧与性能分析
+### 调试技巧
+- 使用 IDE 的调试功能
+- 使用日志输出调试信息
+- 使用 JMX 进行远程监控和调试
+
+### 性能分析
+- 使用 JProfiler 或 VisualVM 进行性能分析
+- 使用 JMX Exporter 导出性能指标
+- 使用 Prometheus 和 Grafana 进行监控
+
+**Section sources**
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml#L72-L80)
+- [jmx_exporter_config.yaml](file://datavines-server/src/main/resources/jmx/jmx_exporter_config.yaml)
+
+## 分支策略与发布流程
+### 分支策略
+- `main` 分支:主分支,用于发布稳定版本
+- `develop` 分支:开发分支,用于集成开发中的功能
+- `feature/*` 分支:功能分支,用于开发新功能
+- `hotfix/*` 分支:热修复分支,用于修复紧急问题
+
+### 发布流程
+1. 从 `develop` 分支创建发布分支 `release/*`
+2. 在发布分支上进行最后的测试和修复
+3. 合并发布分支到 `main` 分支
+4. 在 `main` 分支上打标签
+5. 合并发布分支到 `develop` 分支
+6. 删除发布分支
+
+**Section sources**
+- [README.md](file://README.md#L107-L115)
+
+## 新贡献者入门指导
+### 入门步骤
+1. 阅读项目 README 文件
+2. 搭建开发环境
+3. 运行项目
+4. 阅读代码
+5. 选择一个简单的任务开始贡献
+
+### 贡献方式
+- 提交 Bug 报告
+- 提交功能建议
+- 提交代码补丁
+- 改进文档
+
+### 资源链接
+- [项目文档](https://datavane.github.io/datavines-website/docs/user-guide/quick-start)
+- [开发环境准备](https://datavane.github.io/datavines-website/docs/development/environment-preparation)
+- [贡献指南](https://github.com/datavane/datavines/blob/main/CONTRIBUTING.md)
+
+**Section sources**
+- [README.md](file://README.md#L101-L115)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\345\277\253\351\200\237\345\205\245\351\227\250.md" "b/.qoder/repowiki/zh/content/\345\277\253\351\200\237\345\205\245\351\227\250.md"
new file mode 100644
index 00000000..547b0194
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\345\277\253\351\200\237\345\205\245\351\227\250.md"
@@ -0,0 +1,315 @@
+# 快速入门
+
+
+**本文档中引用的文件**
+- [README.md](file://README.md)
+- [datavines-mysql.sql](file://scripts/sql/datavines-mysql.sql)
+- [datavines-daemon.sh](file://bin/datavines-daemon.sh)
+- [datavines-submit.sh](file://bin/datavines-submit.sh)
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml)
+- [Dockerfile](file://deploy/docker/Dockerfile)
+- [docker-compose.yaml](file://deploy/compose/docker-compose.yaml)
+- [.env](file://deploy/compose/.env)
+
+
+## 目录
+1. [简介](#简介)
+2. [环境准备](#环境准备)
+3. [数据库初始化](#数据库初始化)
+4. [服务启动](#服务启动)
+5. [最小化配置示例](#最小化配置示例)
+6. [端到端使用示例](#端到端使用示例)
+7. [不同操作系统的注意事项](#不同操作系统的注意事项)
+8. [常见问题排查](#常见问题排查)
+9. [总结](#总结)
+
+## 简介
+
+DataVines 是一个易于使用的数据质量服务平台,支持多种数据质量检查规则和执行引擎。本指南将帮助您在本地环境中快速部署和运行 DataVines,从零开始完成安装、配置、启动和验证的全过程。
+
+**Section sources**
+- [README.md](file://README.md#L24-L98)
+
+## 环境准备
+
+在部署 DataVines 之前,需要确保您的系统满足以下环境依赖:
+
+1. **Java 运行环境**:需要 JDK 8 或更高版本
+2. **Maven**:需要 Maven 3.6.1 或更高版本用于构建项目
+3. **数据库**:支持 MySQL 或 PostgreSQL,用于存储元数据和运行信息
+4. **可选依赖**:
+ - 如果使用 Spark 作为执行引擎,需要确保服务器已安装 Spark
+ - 如果数据量较小或仅用于功能验证,可以使用 JDBC 引擎
+
+构建项目:
+```bash
+mvn clean package -Prelease -DskipTests
+```
+
+构建完成后,将在 `datavines-dist/target/` 目录下生成 `datavines-x.x.x-bin.tar.gz` 安装包。
+
+**Section sources**
+- [README.md](file://README.md#L31-L34)
+- [README.md](file://README.md#L95-L98)
+
+## 数据库初始化
+
+DataVines 使用关系型数据库存储元数据和运行信息。以下是针对 MySQL 的数据库初始化步骤:
+
+1. 创建数据库:
+```sql
+CREATE DATABASE datavines DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+```
+
+2. 执行初始化脚本:
+```bash
+mysql -u root -p datavines < scripts/sql/datavines-mysql.sql
+```
+
+该脚本将创建所有必要的表结构,包括数据源、作业、执行实例、结果存储等。
+
+**Section sources**
+- [datavines-mysql.sql](file://scripts/sql/datavines-mysql.sql#L1-L800)
+
+## 服务启动
+
+DataVines 提供了多种启动方式,包括直接启动、Docker 启动和提交作业。
+
+### 直接启动方式
+
+1. 解压安装包:
+```bash
+tar -zxvf datavines-x.x.x-bin.tar.gz
+cd datavines-x.x.x-bin
+```
+
+2. 修改数据库配置:
+编辑 `conf/application.yaml` 文件,根据您的数据库类型选择相应的配置。默认配置使用 PostgreSQL,如需使用 MySQL,可通过命令行参数指定:
+
+```bash
+bin/datavines-daemon.sh start mysql
+```
+
+3. 启动服务:
+```bash
+# 启动服务(使用 MySQL 配置)
+bin/datavines-daemon.sh start mysql
+
+# 停止服务
+bin/datavines-daemon.sh stop
+
+# 查看服务状态
+bin/datavines-daemon.sh status
+```
+
+### Docker 启动方式
+
+1. 构建 Docker 镜像:
+```bash
+docker build -t datavines:dev -f deploy/docker/Dockerfile .
+```
+
+2. 启动容器:
+```bash
+docker-compose -f deploy/compose/docker-compose.yaml up -d
+```
+
+Docker 配置文件中定义了以下环境变量:
+- 端口映射:5600:5600
+- 数据库连接:通过 .env 文件配置
+- 容器名称:datavines
+
+**Section sources**
+- [datavines-daemon.sh](file://bin/datavines-daemon.sh#L1-L183)
+- [Dockerfile](file://deploy/docker/Dockerfile#L1-L44)
+- [docker-compose.yaml](file://deploy/compose/docker-compose.yaml#L1-L19)
+- [.env](file://deploy/compose/.env#L1-L5)
+
+## 最小化配置示例
+
+以下是最小化配置示例,用于快速验证安装是否成功:
+
+1. **application.yaml 配置**(MySQL 版本):
+```yaml
+spring:
+ profiles:
+ active: mysql
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/datavines?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+ username: root
+ password: 123456
+server:
+ port: 5600
+```
+
+2. **验证服务是否正常运行**:
+```bash
+# 检查端口是否监听
+netstat -an | grep 5600
+
+# 检查进程是否运行
+ps aux | grep datavines
+
+# 访问 Web 界面
+http://localhost:5600
+```
+
+预期输出:
+- 服务启动日志中显示 "Datavines server start"
+- 端口 5600 处于监听状态
+- Web 界面可以正常访问
+
+**Section sources**
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml#L84-L96)
+
+## 端到端使用示例
+
+以下是一个完整的端到端使用示例,演示如何配置数据源、创建质量检查任务并查看结果。
+
+### 1. 配置数据源
+
+通过 API 或 Web 界面配置 MySQL 数据源:
+```json
+{
+ "name": "test_mysql",
+ "type": "mysql",
+ "param": {
+ "host": "127.0.0.1",
+ "port": 3306,
+ "username": "root",
+ "password": "123456",
+ "database": "test"
+ }
+}
+```
+
+### 2. 创建质量检查任务
+
+创建一个检查表行数的任务:
+```bash
+# 提交作业
+bin/datavines-submit.sh submit_job_mysql_storage.json
+```
+
+作业配置文件示例:
+```json
+{
+ "job": {
+ "name": "check_table_row_count",
+ "type": 0,
+ "datasource_id": 1,
+ "schema_name": "test",
+ "table_name": "users",
+ "metric_type": "table_row_count",
+ "engine_type": "local"
+ }
+}
+```
+
+### 3. 查看执行结果
+
+1. 通过 Web 界面查看作业执行历史
+2. 查看作业执行日志
+3. 检查结果存储表 `dv_job_execution_result`
+4. 查看质量评分报告 `dv_job_quality_report`
+
+**Section sources**
+- [datavines-submit.sh](file://bin/datavines-submit.sh#L1-L49)
+- [DataVinesServer.java](file://datavines-server/src/main/java/io/datavines/server/DataVinesServer.java#L1-L160)
+
+## 不同操作系统的注意事项
+
+### Linux/Unix 系统
+
+1. 确保有足够权限执行脚本:
+```bash
+chmod +x bin/*.sh
+```
+
+2. 检查环境变量是否正确设置:
+```bash
+echo $JAVA_HOME
+echo $PATH
+```
+
+### Windows 系统
+
+1. 使用 Git Bash 或 WSL 运行 shell 脚本
+2. 确保行尾符正确(LF 而不是 CRLF)
+3. 路径分隔符使用正斜杠 `/`
+4. 可能需要修改脚本中的路径处理逻辑
+
+### macOS 系统
+
+1. 确保已安装 Xcode 命令行工具
+2. 可能需要调整 JVM 内存参数
+3. 注意防火墙设置,确保端口可访问
+
+**Section sources**
+- [datavines-daemon.sh](file://bin/datavines-daemon.sh#L45-L52)
+- [datavines-submit.sh](file://bin/datavines-submit.sh#L31-L33)
+
+## 常见问题排查
+
+### 端口冲突
+
+问题:端口 5600 已被占用
+解决方案:
+```bash
+# 查找占用端口的进程
+lsof -i :5600
+# 或
+netstat -anp | grep 5600
+
+# 终止进程或修改配置文件中的端口
+server:
+ port: 5601
+```
+
+### 数据库连接失败
+
+问题:无法连接到数据库
+检查项:
+1. 数据库服务是否已启动
+2. 连接 URL、用户名、密码是否正确
+3. 数据库驱动是否匹配
+4. 网络连接是否正常
+5. 防火墙是否阻止连接
+
+### 服务启动失败
+
+常见错误及解决方案:
+1. **Java 环境问题**:确保 JAVA_HOME 正确设置
+2. **内存不足**:调整 JVM 参数
+3. **依赖缺失**:确保所有依赖库已正确打包
+4. **权限问题**:确保有足够权限读写文件和目录
+
+日志文件位置:`logs/datavines-server-.out`
+
+### 作业执行失败
+
+检查步骤:
+1. 查看作业执行日志
+2. 检查数据源连接是否正常
+3. 验证 SQL 语句是否正确
+4. 检查执行引擎配置
+5. 查看错误数据存储配置
+
+**Section sources**
+- [datavines-daemon.sh](file://bin/datavines-daemon.sh#L136-L152)
+- [application.yaml](file://datavines-server/src/main/resources/application.yaml#L69-L71)
+
+## 总结
+
+本指南详细介绍了 DataVines 的本地部署和运行过程,包括环境准备、数据库初始化、服务启动、配置示例和常见问题排查。通过本指南,用户可以快速搭建 DataVines 环境并验证其基本功能。
+
+关键要点:
+- 确保 Java 和 Maven 环境正确配置
+- 根据数据库类型选择合适的配置文件
+- 使用提供的脚本简化启动和管理过程
+- 通过最小化配置快速验证安装
+- 利用端到端示例理解完整工作流程
+- 参考常见问题排查指南解决部署中的问题
+
+完成部署后,用户可以通过 Web 界面或 API 进一步探索 DataVines 的各项功能,包括数据目录、数据质量检查、数据画像等。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\345\221\212\350\255\246\351\200\232\351\201\223\346\217\222\344\273\266\345\274\200\345\217\221.md" "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\345\221\212\350\255\246\351\200\232\351\201\223\346\217\222\344\273\266\345\274\200\345\217\221.md"
new file mode 100644
index 00000000..f252f341
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\345\221\212\350\255\246\351\200\232\351\201\223\346\217\222\344\273\266\345\274\200\345\217\221.md"
@@ -0,0 +1,524 @@
+# 告警通道插件开发
+
+
+**本文档中引用的文件**
+- [SlasHandlerPlugin.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\spi\SlasHandlerPlugin.java)
+- [NotificationManager.java](file://datavines-notification\datavines-notification-core\src\main\java\io\datavines\notification\core\NotificationManager.java)
+- [DingTalkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSlasHandlerPlugin.java)
+- [EmailSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EmailSlasHandlerPlugin.java)
+- [LarkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSlasHandlerPlugin.java)
+- [WecomBotSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSlasHandlerPlugin.java)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java)
+- [SlaNotificationMessage.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\entity\SlaNotificationMessage.java)
+- [SlaNotificationResult.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\entity\SlaNotificationResult.java)
+- [NotificationConstants.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\constants\NotificationConstants.java)
+- [DingTalkConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkConstants.java)
+- [LarkConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkConstants.java)
+- [WecomBotConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotConstants.java)
+
+
+## 目录
+1. [引言](#引言)
+2. [核心接口设计](#核心接口设计)
+3. [通知管理器架构](#通知管理器架构)
+4. [插件实现示例](#插件实现示例)
+5. [通知模板与动态内容](#通知模板与动态内容)
+6. [错误处理与重试机制](#错误处理与重试机制)
+7. [安全性考虑](#安全性考虑)
+8. [开发指南](#开发指南)
+
+## 引言
+本文档详细介绍了如何为DataVines开发新的告警通知插件。通过分析现有的钉钉、邮件、飞书和企业微信插件实现,我们将深入探讨SlasHandlerPlugin接口的设计原理和实现方法。文档涵盖了从消息构建、认证处理到请求发送的完整流程,以及通知模板配置、动态内容填充、发送失败重试机制和错误日志记录等关键功能。同时,我们也会讨论凭证管理和传输加密等安全性考虑,为开发者提供全面的指导。
+
+## 核心接口设计
+
+告警通道插件的核心是`SlasHandlerPlugin`接口,它定义了所有通知插件必须实现的基本功能。该接口通过SPI(Service Provider Interface)机制进行扩展,允许系统动态加载和管理不同的通知通道。
+
+```mermaid
+classDiagram
+class SlasHandlerPlugin {
+<>
++notify(SlaNotificationMessage, Map~SlaSenderMessage, Set~SlaConfigMessage~~) SlaNotificationResult
++getConfigSenderJson() String
++getConfigJson() String
+}
+class SlaNotificationMessage {
+-Long slaId
+-String subject
+-String message
+}
+class SlaNotificationResult {
+-Boolean status
+-SlaNotificationResultRecord[] records
++merge(SlaNotificationResult) SlaNotificationResult
+}
+class SlaNotificationResultRecord {
+-Boolean status
+-String message
+}
+class SlaSenderMessage {
+-String type
+-String config
+}
+class SlaConfigMessage {
+-String config
+}
+SlasHandlerPlugin <|-- DingTalkSlasHandlerPlugin
+SlasHandlerPlugin <|-- EmailSlasHandlerPlugin
+SlasHandlerPlugin <|-- LarkSlasHandlerPlugin
+SlasHandlerPlugin <|-- WecomBotSlasHandlerPlugin
+SlaNotificationResult "1" --> "0..*" SlaNotificationResultRecord
+```
+
+**图示来源**
+- [SlasHandlerPlugin.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\spi\SlasHandlerPlugin.java#L28-L42)
+- [SlaNotificationMessage.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\entity\SlaNotificationMessage.java#L28-L35)
+- [SlaNotificationResult.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\entity\SlaNotificationResult.java#L30-L52)
+
+`SlasHandlerPlugin`接口包含三个核心方法:
+- `notify`:执行实际的通知发送操作,接收通知消息和配置信息,返回发送结果
+- `getConfigSenderJson`:获取发送器级别的配置信息,通常包含通道的全局配置
+- `getConfigJson`:获取具体通知配置信息,定义了用户在创建告警时需要填写的参数
+
+**本节来源**
+- [SlasHandlerPlugin.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\spi\SlasHandlerPlugin.java#L28-L42)
+
+## 通知管理器架构
+
+`NotificationManager`是告警通知系统的核心管理组件,负责协调各个通知插件的调用。它使用插件加载器动态发现和实例化所有支持的告警通道插件,并根据配置信息路由通知请求。
+
+```mermaid
+sequenceDiagram
+participant NotificationManager
+participant PluginLoader
+participant SlasHandlerPlugin
+participant DingTalkSender
+participant EMailSender
+participant LarkSender
+participant WecomBotSender
+NotificationManager->>PluginLoader : 初始化时获取所有支持的插件
+PluginLoader-->>NotificationManager : 返回支持的插件类型列表
+NotificationManager->>NotificationManager : 存储支持的插件类型
+NotificationManager->>NotificationManager : 验证配置的有效性
+alt 配置无效
+NotificationManager-->>调用者 : 抛出DataVinesException
+else 配置有效
+loop 遍历每个发送器配置
+NotificationManager->>PluginLoader : 根据类型获取插件实例
+PluginLoader-->>NotificationManager : 返回插件实例
+NotificationManager->>SlasHandlerPlugin : 调用notify方法
+SlasHandlerPlugin->>DingTalkSender : 发送钉钉消息
+SlasHandlerPlugin->>EMailSender : 发送邮件
+SlasHandlerPlugin->>LarkSender : 发送飞书消息
+SlasHandlerPlugin->>WecomBotSender : 发送企业微信消息
+SlasHandlerPlugin-->>NotificationManager : 返回发送结果
+NotificationManager->>NotificationManager : 合并所有结果
+end
+NotificationManager-->>调用者 : 返回最终的发送结果
+end
+```
+
+**图示来源**
+- [NotificationManager.java](file://datavines-notification\datavines-notification-core\src\main\java\io\datavines\notification\core\NotificationManager.java#L35-L69)
+
+`NotificationManager`的实现要点包括:
+1. 在构造函数中通过`PluginLoader`获取所有支持的插件类型,存储在`supportedPlugins`集合中
+2. `notify`方法首先验证配置的有效性,确保至少有一个发送器配置
+3. 遍历配置中的每个发送器,检查其类型是否被支持
+4. 通过`PluginLoader`获取对应类型的插件实例
+5. 调用插件的`notify`方法执行实际的通知发送
+6. 将各个插件的发送结果合并,返回统一的结果
+
+**本节来源**
+- [NotificationManager.java](file://datavines-notification\datavines-notification-core\src\main\java\io\datavines\notification\core\NotificationManager.java#L35-L69)
+
+## 插件实现示例
+
+### 钉钉插件实现
+
+钉钉告警插件`DingTalkSlasHandlerPlugin`实现了`SlasHandlerPlugin`接口,提供了完整的钉钉机器人消息发送功能。
+
+```mermaid
+classDiagram
+class DingTalkSlasHandlerPlugin {
++notify(SlaNotificationMessage, Map~SlaSenderMessage, Set~SlaConfigMessage~~) SlaNotificationResult
++getConfigSenderJson() String
++getConfigJson() String
+}
+class DingTalkSender {
+-String msgType
++sendCardMsg(Set~ReceiverConfig~, String, String) SlaNotificationResultRecord
+-generateMsgJson(String, String, ReceiverConfig) String
+-constructUrl(String, String) String
+-constructHttpPost(String, String) HttpPost
+}
+class ReceiverConfig {
+-String webhook
+-String secret
+-String keyWord
+-String atMobiles
+-String atDingtalkIds
+-Boolean isAtAll
+}
+class DingTalkConstants {
++DING_TALK_MSG_TYPE_TEXT
++DING_TALK_MSG_TYPE_MARKDOWN
++MSG_TYPE
+}
+DingTalkSlasHandlerPlugin --> DingTalkSender : 使用
+DingTalkSender --> ReceiverConfig : 使用
+DingTalkSender --> DingTalkConstants : 使用
+```
+
+**图示来源**
+- [DingTalkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSlasHandlerPlugin.java#L39-L133)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L51-L192)
+- [DingTalkConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkConstants.java#L19-L30)
+
+钉钉插件的关键实现细节:
+- `notify`方法过滤出类型为"dingtalk"的发送器配置,为每个配置创建`DingTalkSender`实例
+- `getConfigJson`方法定义了钉钉通知的配置参数,包括webhook、secret、关键词、@手机号等
+- `DingTalkSender`负责构建符合钉钉API要求的JSON消息体,支持文本和Markdown格式
+- 实现了钉钉机器人安全验证机制,通过HMAC-SHA256签名确保请求的安全性
+
+**本节来源**
+- [DingTalkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSlasHandlerPlugin.java#L39-L133)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L51-L192)
+
+### 邮件插件实现
+
+邮件告警插件`EmailSlasHandlerPlugin`提供了完整的邮件发送功能,支持SMTP认证和SSL/TLS加密。
+
+```mermaid
+classDiagram
+class EmailSlasHandlerPlugin {
++notify(SlaNotificationMessage, Map~SlaSenderMessage, Set~SlaConfigMessage~~) SlaNotificationResult
++getConfigSenderJson() String
++getConfigJson() String
+-getInputParam(String, String, String, int, Validate) InputParam
+-getInputParamNoValidate(String, String, String, int) InputParam
+}
+class EMailSender {
+-String mailSmtpHost
+-String mailSmtpPort
+-String mailSenderEmail
+-String enableSmtpAuth
+-String mailUser
+-String mailPasswd
+-String mailUseStartTLS
+-String mailUseSSL
+-String sslTrust
++sendMails(Set~String~, Set~String~, String, String) SlaNotificationResultRecord
+-getSession() Session
+-getTextTypeMessage(String) String
+}
+class ReceiverConfig {
+-String to
+-String cc
+}
+EmailSlasHandlerPlugin --> EMailSender : 使用
+EMailSender --> ReceiverConfig : 使用
+```
+
+**图示来源**
+- [EmailSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EmailSlasHandlerPlugin.java#L43-L224)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L44-L197)
+
+邮件插件的关键实现细节:
+- `notify`方法解析收件人和抄送人列表,支持逗号或分号分隔的多个邮箱地址
+- `getConfigSenderJson`方法定义了邮件服务器的全局配置,包括SMTP主机、端口、认证信息等
+- `getConfigJson`方法定义了具体的收件人配置
+- `EMailSender`使用Apache Commons Mail库发送邮件,支持HTML格式和附件
+- 实现了完整的SMTP会话配置,包括STARTTLS、SSL和证书信任设置
+
+**本节来源**
+- [EmailSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EmailSlasHandlerPlugin.java#L43-L224)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L44-L197)
+
+### 飞书插件实现
+
+飞书告警插件`LarkSlasHandlerPlugin`实现了飞书机器人的消息发送功能。
+
+```mermaid
+classDiagram
+class LarkSlasHandlerPlugin {
++notify(SlaNotificationMessage, Map~SlaSenderMessage, Set~SlaConfigMessage~~) SlaNotificationResult
++getConfigSenderJson() String
++getConfigJson() String
+}
+class LarkSender {
+-String alarmTitle
+-String alarmColor
+-String subjectKey
+-String messageKey
+-String atAllKey
++sendCardMsg(Set~ReceiverConfig~, String, String) SlaNotificationResultRecord
+}
+class ReceiverConfig {
+-String webhook
+-Boolean atAll
+-String groupName
+}
+class LarkConstants {
++MSG_TYPE
++DEFAULT_MSG_TYPE
++CARD
++LARK_API
++GROUP_HOOK_URL
++ACCESS_TOKEN_QUERY_URL
++USER_OPEN_ID_QUERY_URL
++MESSAGES_URL
+}
+LarkSlasHandlerPlugin --> LarkSender : 使用
+LarkSender --> ReceiverConfig : 使用
+LarkSender --> LarkConstants : 使用
+```
+
+**图示来源**
+- [LarkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSlasHandlerPlugin.java#L39-L132)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java#L38-L84)
+- [LarkConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkConstants.java#L20-L35)
+
+飞书插件的关键实现细节:
+- 使用飞书的交互式卡片消息格式,提供更好的视觉效果
+- 支持@所有人功能,通过`atAll`配置项控制
+- `LarkSender`直接使用HTTP工具类发送POST请求到飞书API
+- 消息内容采用结构化JSON格式,包含标题、颜色和消息列表
+
+**本节来源**
+- [LarkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSlasHandlerPlugin.java#L39-L132)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java#L38-L84)
+
+### 企业微信插件实现
+
+企业微信告警插件`WecomBotSlasHandlerPlugin`实现了企业微信机器人的消息发送功能。
+
+```mermaid
+classDiagram
+class WecomBotSlasHandlerPlugin {
++notify(SlaNotificationMessage, Map~SlaSenderMessage, Set~SlaConfigMessage~~) SlaNotificationResult
++getConfigSenderJson() String
++getConfigJson() String
+}
+class WecomBotSender {
++sendMsg(Set~ReceiverConfig~, String, String) SlaNotificationResultRecord
+-getMarkdownMessage(String, String) String
+}
+class ReceiverConfig {
+-String webhook
+}
+class WecomBotRes {
+-Integer errcode
+-String errmsg
++success() boolean
+}
+class WecomBotConstants {
++MSG_TYPE
++MARKDOWN
++CONTENT
++FIRST_TITLE_START
++QUOTE_START
++END
+}
+WecomBotSlasHandlerPlugin --> WecomBotSender : 使用
+WecomBotSender --> ReceiverConfig : 使用
+WecomBotSender --> WecomBotRes : 使用
+WecomBotSender --> WecomBotConstants : 使用
+```
+
+**图示来源**
+- [WecomBotSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSlasHandlerPlugin.java#L33-L97)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L38-L95)
+- [WecomBotConstants.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotConstants.java)
+
+企业微信插件的关键实现细节:
+- 使用Markdown消息格式,支持丰富的文本样式
+- `WecomBotSender`发送消息后会解析响应结果,通过`WecomBotRes`类判断发送是否成功
+- 实现了消息内容的格式化处理,将JSON数组转换为Markdown列表
+- 支持链接格式化,将任务执行记录转换为可点击的链接
+
+**本节来源**
+- [WecomBotSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSlasHandlerPlugin.java#L33-L97)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L38-L95)
+
+## 通知模板与动态内容
+
+DataVines的告警通知系统支持灵活的消息模板和动态内容填充。通知消息由主题(subject)和内容(message)两部分组成,其中内容可以是包含多个消息项的JSON数组。
+
+```mermaid
+flowchart TD
+Start([开始]) --> ParseMessage["解析消息内容为JSON数组"]
+ParseMessage --> CheckContent{"内容是否为空?"}
+CheckContent --> |是| ReturnOriginal["返回原始内容"]
+CheckContent --> |否| ProcessItems["遍历每个消息项"]
+ProcessItems --> CheckLink{"是否为任务执行记录?"}
+CheckLink --> |是| FormatLink["格式化为可点击链接"]
+CheckLink --> |否| KeepOriginal["保持原始文本"]
+FormatLink --> AddToResult["添加到结果字符串"]
+KeepOriginal --> AddToResult
+AddToResult --> MoreItems{"还有更多项?"}
+MoreItems --> |是| ProcessItems
+MoreItems --> |否| WrapHTML["包装为HTML/Markdown格式"]
+WrapHTML --> ReturnResult["返回格式化后的内容"]
+ReturnOriginal --> ReturnResult
+ReturnResult --> End([结束])
+```
+
+**图示来源**
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L178-L193)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L76-L93)
+
+不同通知通道对消息内容的处理方式:
+- **邮件**:将JSON数组转换为HTML表格,任务执行记录转换为超链接
+- **企业微信**:将JSON数组转换为Markdown列表,任务执行记录转换为可点击链接
+- **钉钉**:支持文本和Markdown格式,可包含@功能
+- **飞书**:使用交互式卡片格式,提供结构化的消息展示
+
+**本节来源**
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L178-L193)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L76-L93)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L111-L177)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java#L61-L66)
+
+## 错误处理与重试机制
+
+告警通知系统实现了完善的错误处理和重试机制,确保通知的可靠送达。
+
+```mermaid
+flowchart TD
+Start([开始发送通知]) --> CheckConfig["验证配置有效性"]
+CheckConfig --> IsValid{"配置有效?"}
+IsValid --> |否| ThrowException["抛出DataVinesException"]
+IsValid --> |是| LoopSenders["遍历每个发送器"]
+LoopSenders --> GetPlugin["获取插件实例"]
+GetPlugin --> IsValidPlugin{"插件类型支持?"}
+IsValidPlugin --> |否| ThrowException
+IsValidPlugin --> |是| CallNotify["调用插件notify方法"]
+CallNotify --> CatchError{"发生异常?"}
+CatchError --> |是| RecordFailure["记录失败的接收者"]
+CatchError --> |否| Continue
+RecordFailure --> LogError["记录错误日志"]
+Continue --> NextSender{"还有更多发送器?"}
+NextSender --> |是| LoopSenders
+NextSender --> |否| CheckFailures{"有失败的接收者?"}
+CheckFailures --> |是| SetStatus["设置结果状态为失败"]
+CheckFailures --> |否| SetSuccess["设置结果状态为成功"]
+SetStatus --> ReturnResult["返回结果"]
+SetSuccess --> ReturnResult
+ThrowException --> ReturnResult
+ReturnResult --> End([结束])
+```
+
+**图示来源**
+- [NotificationManager.java](file://datavines-notification\datavines-notification-core\src\main\java\io\datavines\notification\core\NotificationManager.java#L45-L68)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L55-L89)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L137-L140)
+
+错误处理的关键特点:
+1. **分层错误处理**:在`NotificationManager`层面验证配置有效性,在插件层面处理具体的发送错误
+2. **细粒度失败记录**:每个插件记录具体的失败接收者,提供详细的错误信息
+3. **异常捕获**:所有发送操作都包含在try-catch块中,防止单个发送失败影响整体流程
+4. **日志记录**:详细的错误日志帮助诊断问题,包括异常堆栈信息
+5. **结果合并**:将所有插件的发送结果合并,提供统一的成功/失败状态
+
+**本节来源**
+- [NotificationManager.java](file://datavines-notification\datavines-notification-core\src\main\java\io\datavines\notification\core\NotificationManager.java#L45-L68)
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L55-L89)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L137-L140)
+
+## 安全性考虑
+
+告警通知系统在设计时充分考虑了安全性,特别是在凭证管理和传输加密方面。
+
+### 凭证管理
+
+系统通过以下方式确保凭证的安全:
+- **配置隔离**:发送器级别的配置(如SMTP服务器、用户名、密码)与具体的接收者配置分离
+- **加密存储**:敏感信息如密码在存储时应进行加密处理
+- **最小权限原则**:每个通知通道使用专用的凭证,避免权限过度分配
+
+### 传输加密
+
+不同通知通道的传输加密机制:
+- **钉钉**:支持通过secret进行HMAC-SHA256签名,确保请求的完整性和真实性
+- **邮件**:支持STARTTLS和SSL/TLS加密,保护邮件内容在传输过程中的安全
+- **飞书**:通过HTTPS协议传输,使用访问令牌进行身份验证
+- **企业微信**:通过HTTPS协议传输,使用webhook URL进行身份验证
+
+```mermaid
+flowchart LR
+subgraph Security
+Credential["凭证管理"]
+Transport["传输加密"]
+end
+Credential --> Isolation["配置隔离"]
+Credential --> Encryption["加密存储"]
+Credential --> LeastPrivilege["最小权限"]
+Transport --> DingTalk["钉钉: HMAC-SHA256"]
+Transport --> Email["邮件: STARTTLS/SSL"]
+Transport --> Lark["飞书: HTTPS + 访问令牌"]
+Transport --> Wecom["企业微信: HTTPS + webhook"]
+Isolation --> BestPractice["安全最佳实践"]
+Encryption --> BestPractice
+LeastPrivilege --> BestPractice
+DingTalk --> BestPractice
+Email --> BestPractice
+Lark --> BestPractice
+Wecom --> BestPractice
+```
+
+**图示来源**
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L96-L109)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L154-L163)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java#L67)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L54)
+
+**本节来源**
+- [DingTalkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSender.java#L96-L109)
+- [EMailSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EMailSender.java#L154-L163)
+- [LarkSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-lark\src\main\java\io\datavines\notification\plugin\lark\LarkSender.java#L67)
+- [WecomBotSender.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-wecombot\src\main\java\io\datavines\notification\plugin\wecombot\WecomBotSender.java#L54)
+
+## 开发指南
+
+### 创建新的告警通道插件
+
+要创建一个新的告警通道插件,需要遵循以下步骤:
+
+1. **创建Maven模块**:在`datavines-notification-plugins`目录下创建新的模块
+2. **实现SlasHandlerPlugin接口**:创建主类实现`SlasHandlerPlugin`接口
+3. **定义配置实体**:创建接收者配置类,通常包含通道特定的配置参数
+4. **实现发送器**:创建发送器类,负责构建消息和发送HTTP请求
+5. **注册SPI**:在`resources/META-INF/plugins/`目录下创建SPI配置文件
+
+### 配置参数定义
+
+使用`PluginParams`体系定义配置参数,支持多种输入类型:
+- `InputParam`:文本输入框
+- `RadioParam`:单选按钮
+- `SelectParam`:下拉选择框
+- `CheckboxParam`:复选框
+
+配置参数应包含验证规则,如必填项、格式验证等。
+
+### 消息构建最佳实践
+
+- **保持消息简洁**:告警消息应突出关键信息,避免冗长
+- **使用结构化格式**:对于复杂消息,使用JSON数组组织内容
+- **支持动态链接**:将相关记录转换为可点击的链接,方便快速定位问题
+- **考虑多语言**:消息内容应支持国际化,适应不同语言环境
+
+### 测试与调试
+
+- **单元测试**:为插件和发送器编写单元测试,验证核心功能
+- **集成测试**:在真实环境中测试通知发送,验证配置的正确性
+- **日志监控**:通过日志监控发送状态,及时发现和解决问题
+- **错误模拟**:测试各种错误场景,确保错误处理机制的可靠性
+
+**本节来源**
+- [SlasHandlerPlugin.java](file://datavines-notification\datavines-notification-api\src\main\java\io\datavines\notification\api\spi\SlasHandlerPlugin.java#L28-L42)
+- [DingTalkSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-dingtalk\src\main\java\io\datavines\notification\plugin\dingtalk\DingTalkSlasHandlerPlugin.java#L39-L133)
+- [EmailSlasHandlerPlugin.java](file://datavines-notification\datavines-notification-plugins\datavines-notification-plugin-email\src\main\java\io\datavines\notification\plugin\email\EmailSlasHandlerPlugin.java#L43-L224)
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\211\247\350\241\214\345\274\225\346\223\216\346\217\222\344\273\266\345\274\200\345\217\221.md" "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\211\247\350\241\214\345\274\225\346\223\216\346\217\222\344\273\266\345\274\200\345\217\221.md"
new file mode 100644
index 00000000..ebea8e01
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\211\247\350\241\214\345\274\225\346\223\216\346\217\222\344\273\266\345\274\200\345\217\221.md"
@@ -0,0 +1,256 @@
+# 执行引擎插件开发
+
+
+**本文档引用的文件**
+- [EngineExecutor.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/engine/EngineExecutor.java)
+- [RuntimeEnvironment.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/env/RuntimeEnvironment.java)
+- [AbstractEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractEngineExecutor.java)
+- [AbstractYarnEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractYarnEngineExecutor.java)
+- [AbstractLivyEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractLivyEngineExecutor.java)
+- [SparkEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-spark/datavines-engine-spark-executor/src/main/java/io/datavines/engine/spark/executor/SparkEngineExecutor.java)
+- [FlinkEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-flink/datavines-engine-flink-executor/src/main/java/io/datavines/engine/flink/executor/FlinkEngineExecutor.java)
+- [LocalEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-local/datavines-engine-local-executor/src/main/java/io/datavines/engine/local/executor/LocalEngineExecutor.java)
+- [LivyEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-livy/datavines-engine-livy-executor/src/main/java/io/datavines/engine/livy/executor/LivyEngineExecutor.java)
+- [Execution.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/env/Execution.java)
+
+
+## 目录
+1. [引言](#引言)
+2. [核心接口与抽象基类](#核心接口与抽象基类)
+3. [执行引擎实现示例](#执行引擎实现示例)
+4. [执行参数解析与命令行构造](#执行参数解析与命令行构造)
+5. [不同执行平台的适配方法](#不同执行平台的适配方法)
+6. [日志收集、错误处理与资源清理](#日志收集错误处理与资源清理)
+7. [总结](#总结)
+
+## 引言
+DataVines 是一个数据质量检测框架,支持通过插件化方式扩展不同的执行引擎。本指南旨在为开发者提供详细的执行引擎插件开发说明,涵盖 `EngineExecutor` 接口的核心方法、`RuntimeEnvironment` 的配置方式,并通过 Spark、Flink 和本地执行引擎的实现示例,展示任务提交、状态监控和结果获取的具体流程。同时,本文还将介绍如何适配 Yarn、Livy 和本地等不同执行平台,以及执行参数解析、命令行构造的最佳实践。
+
+## 核心接口与抽象基类
+
+### EngineExecutor 接口
+`EngineExecutor` 是所有执行引擎的核心接口,定义了执行器的生命周期方法。开发者需实现该接口以支持新的执行引擎。
+
+```mermaid
+classDiagram
+class EngineExecutor {
+<>
++init(JobExecutionRequest, Logger, Configurations) void
++execute() void
++after() void
++cancel() void
++isCancel() boolean
++getProcessResult() ProcessResult
++getTaskRequest() JobExecutionRequest
+}
+```
+
+**接口说明:**
+- `init`: 初始化执行器,接收任务请求、日志记录器和配置信息。
+- `execute`: 执行任务的核心方法。
+- `after`: 执行完成后执行的清理或后续操作。
+- `cancel`: 取消正在运行的任务。
+- `isCancel`: 判断任务是否已被取消。
+- `getProcessResult`: 获取任务执行结果。
+- `getTaskRequest`: 获取任务请求对象。
+
+**代码来源**
+- [EngineExecutor.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/engine/EngineExecutor.java#L27-L42)
+
+### RuntimeEnvironment 接口
+`RuntimeEnvironment` 定义了运行时环境的准备和执行上下文获取方法,是执行环境的基础接口。
+
+```mermaid
+classDiagram
+class RuntimeEnvironment {
+<>
++prepare() void
++getExecution() Execution
+}
+```
+
+**接口说明:**
+- `prepare`: 准备运行时环境,如初始化资源、加载配置等。
+- `getExecution`: 获取具体的执行实例,用于执行数据处理流程。
+
+**代码来源**
+- [RuntimeEnvironment.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/env/RuntimeEnvironment.java#L23-L28)
+
+### Execution 接口
+`Execution` 接口定义了数据处理流程的执行方法,支持源(Source)、转换(Transform)和汇(Sink)组件的执行。
+
+```mermaid
+classDiagram
+class Execution {
+<>
++execute(SR[], TF[], SK[]) void
++stop() void
++prepare() void
+}
+```
+
+**代码来源**
+- [Execution.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/env/Execution.java#L23-L30)
+
+### 抽象基类体系
+DataVines 提供了多个抽象基类来简化执行器的开发:
+- `AbstractEngineExecutor`: 所有执行器的基类,提供通用字段和日志处理方法。
+- `AbstractYarnEngineExecutor`: 针对 Yarn 平台的执行器基类,封装了 Yarn 应用程序的取消和杀死逻辑。
+- `AbstractLivyEngineExecutor`: 针对 Livy 服务的执行器基类,封装了与 Livy REST API 的交互逻辑。
+
+```mermaid
+classDiagram
+class AbstractEngineExecutor {
+-jobExecutionRequest JobExecutionRequest
+-logger Logger
+-cancel boolean
+-processResult ProcessResult
++logHandle(String[]) void
++isCancel() boolean
++buildCommand() String
+}
+class AbstractYarnEngineExecutor {
+-shellCommandProcess ShellCommandProcess
++cancel() void
+-killYarnApplication() void
+}
+class AbstractLivyEngineExecutor {
+-livyCommandProcess LivyCommandProcess
++cancel() void
+}
+AbstractEngineExecutor <|-- AbstractYarnEngineExecutor
+AbstractEngineExecutor <|-- AbstractLivyEngineExecutor
+```
+
+**代码来源**
+- [AbstractEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractEngineExecutor.java#L27-L56)
+- [AbstractYarnEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractYarnEngineExecutor.java#L25-L59)
+- [AbstractLivyEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractLivyEngineExecutor.java#L23-L36)
+
+## 执行引擎实现示例
+
+### Spark 执行引擎
+`SparkEngineExecutor` 继承自 `AbstractYarnEngineExecutor`,通过 `spark-submit` 命令提交任务到 Yarn 集群。
+
+**核心流程:**
+1. 解析 `engineParameter` 获取 Spark 参数。
+2. 构建 `spark-submit` 命令行。
+3. 使用 `ShellCommandProcess` 执行命令并监控结果。
+
+```mermaid
+sequenceDiagram
+participant JobRunner
+participant SparkEngineExecutor
+participant ShellCommandProcess
+participant Yarn
+JobRunner->>SparkEngineExecutor : init()
+JobRunner->>SparkEngineExecutor : execute()
+SparkEngineExecutor->>SparkEngineExecutor : buildCommand()
+SparkEngineExecutor->>ShellCommandProcess : run(command)
+ShellCommandProcess->>Yarn : spark-submit
+Yarn-->>ShellCommandProcess : Application ID
+ShellCommandProcess-->>SparkEngineExecutor : ProcessResult
+SparkEngineExecutor-->>JobRunner : getProcessResult()
+```
+
+**代码来源**
+- [SparkEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-spark/datavines-engine-spark-executor/src/main/java/io/datavines/engine/spark/executor/SparkEngineExecutor.java#L41-L152)
+
+### Flink 执行引擎
+`FlinkEngineExecutor` 同样继承自 `AbstractYarnEngineExecutor`,通过 `flink` 命令提交任务。
+
+**特点:**
+- 使用 `FlinkArgsUtils` 工具类构建 Flink 命令行参数。
+- 支持通过 `--conf spark.yarn.tags` 标记任务。
+
+**代码来源**
+- [FlinkEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-flink/datavines-engine-flink-executor/src/main/java/io/datavines/engine/flink/executor/FlinkEngineExecutor.java#L38-L182)
+
+### 本地执行引擎
+`LocalEngineExecutor` 直接在当前 JVM 中执行任务,适用于调试和轻量级场景。
+
+**特点:**
+- 不需要构建命令行,直接调用 `LocalDataVinesBootstrap` 执行。
+- `buildCommand()` 方法返回 `null`。
+
+**代码来源**
+- [LocalEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-local/datavines-engine-local-executor/src/main/java/io/datavines/engine/local/executor/LocalEngineExecutor.java#L27-L77)
+
+### Livy 执行引擎
+`LivyEngineExecutor` 继承自 `AbstractLivyEngineExecutor`,通过 Livy REST API 提交 Spark 任务。
+
+**核心流程:**
+1. 构建 JSON 格式的 Livy 请求体。
+2. 调用 `post2LivyWithRetry` 发送请求。
+3. 监控任务状态并获取结果。
+
+```mermaid
+sequenceDiagram
+participant JobRunner
+participant LivyEngineExecutor
+participant LivyCommandProcess
+participant LivyServer
+JobRunner->>LivyEngineExecutor : init()
+JobRunner->>LivyEngineExecutor : execute()
+LivyEngineExecutor->>LivyEngineExecutor : buildCommand()
+LivyEngineExecutor->>LivyCommandProcess : post2LivyWithRetry(json)
+LivyCommandProcess->>LivyServer : POST /sessions
+LivyServer-->>LivyCommandProcess : Session ID
+LivyCommandProcess->>LivyCommandProcess : processResultOfLivyState()
+LivyCommandProcess-->>LivyEngineExecutor : ProcessResult
+LivyEngineExecutor-->>JobRunner : getProcessResult()
+```
+
+**代码来源**
+- [LivyEngineExecutor.java](file://datavines-engine/datavines-engine-plugins/datavines-engine-livy/datavines-engine-livy-executor/src/main/java/io/datavines/engine/livy/executor/LivyEngineExecutor.java#L42-L236)
+
+## 执行参数解析与命令行构造
+
+### 参数解析
+执行参数通过 `JSONUtils.parseObject()` 从 `JobExecutionRequest` 中解析:
+- `engineParameter`: 引擎特定参数(如 Spark/Flink 配置)。
+- `applicationParameter`: 应用级参数(如数据质量规则配置)。
+
+### 命令行构造
+各执行器通过 `buildCommand()` 方法构造命令行:
+- **Spark/Flink**: 拼接 `spark-submit` 或 `flink` 命令及参数。
+- **Livy**: 构造 JSON 请求体,包含 `file`, `jars`, `args`, `conf` 等字段。
+
+**最佳实践:**
+- 使用 `Base64` 编码应用参数,避免命令行长度限制。
+- 动态获取 `SPARK_HOME` 或 `FLINK_HOME` 路径。
+- 支持插件目录的自动发现和 JAR 包加载。
+
+## 不同执行平台的适配方法
+
+| 平台 | 适配方式 | 关键类 |
+|------|---------|--------|
+| Yarn | 通过 `spark-submit` 或 `flink` 命令提交 | `AbstractYarnEngineExecutor`, `ShellCommandProcess` |
+| Livy | 通过 REST API 提交 Spark 任务 | `AbstractLivyEngineExecutor`, `LivyCommandProcess` |
+| 本地 | 直接在 JVM 内执行 | `LocalEngineExecutor`, `LocalDataVinesBootstrap` |
+
+**适配要点:**
+- **Yarn**: 需处理 `sudo -u` 权限和 `yarn application -kill` 命令。
+- **Livy**: 需处理会话生命周期和状态轮询。
+- **本地**: 需确保类路径正确,避免资源冲突。
+
+## 日志收集、错误处理与资源清理
+
+### 日志收集
+通过 `logHandle(List logs)` 方法统一处理日志输出:
+- 将日志信息格式化后输出到 `logger.info()`。
+- 支持多行日志的拼接和展示。
+
+**代码来源**
+- [AbstractEngineExecutor.java](file://datavines-engine/datavines-engine-executor/src/main/java/io/datavines/engine/executor/core/base/AbstractEngineExecutor.java#L45-L48)
+
+### 错误处理
+- 在 `execute()` 方法中捕获异常并重新抛出。
+- 记录详细的错误日志,便于问题排查。
+
+### 资源清理
+- `after()` 方法用于执行清理操作。
+- `cancel()` 方法确保任务被正确终止,释放资源。
+
+## 总结
+本文详细介绍了 DataVines 执行引擎插件的开发方法,涵盖了核心接口、抽象基类、具体实现示例以及平台适配策略。开发者可以基于 `EngineExecutor` 接口和提供的抽象基类,快速实现新的执行引擎插件,满足不同场景下的数据质量检测需求。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\217\222\344\273\266\345\274\200\345\217\221.md" "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\217\222\344\273\266\345\274\200\345\217\221.md"
new file mode 100644
index 00000000..e4d44df0
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\217\222\344\273\266\345\274\200\345\217\221.md"
@@ -0,0 +1,246 @@
+# 插件开发
+
+
+**本文档中引用的文件**
+- [PluginLoader.java](file://datavines-spi/src/main/java/io/datavines/spi/PluginLoader.java)
+- [SPI.java](file://datavines-spi/src/main/java/io/datavines/spi/SPI.java)
+- [Connector.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Connector.java)
+- [SqlMetric.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/SqlMetric.java)
+- [NotificationSender.java](file://datavines-notification/datavines-notification-api/src/main/java/io/datavines/notification/api/spi/NotificationSender.java)
+- [Registry.java](file://datavines-registry/datavines-registry-api/src/main/java/io/datavines/registry/api/Registry.java)
+- [EngineExecutor.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/engine/EngineExecutor.java)
+
+
+## 目录
+1. [简介](#简介)
+2. [SPI机制原理](#spi机制原理)
+3. [数据源插件开发](#数据源插件开发)
+4. [检查规则插件开发](#检查规则插件开发)
+5. [执行引擎插件开发](#执行引擎插件开发)
+6. [告警通道插件开发](#告警通道插件开发)
+7. [注册中心插件开发](#注册中心插件开发)
+8. [插件配置与服务发现](#插件配置与服务发现)
+9. [插件打包与部署](#插件打包与部署)
+10. [插件调试与测试](#插件调试与测试)
+11. [版本管理与兼容性](#版本管理与兼容性)
+12. [最佳实践](#最佳实践)
+
+## 简介
+DataVines 是一个基于插件架构设计的数据质量服务平台,支持多种类型的插件扩展,包括数据源、检查规则、执行引擎、告警通道和注册中心。本指南详细介绍了如何为 DataVines 开发各类插件,涵盖 SPI 机制的工作原理、接口实现、配置管理、打包部署、调试测试以及版本兼容性等完整开发生命周期。
+
+## SPI机制原理
+DataVines 使用自定义的 SPI(Service Provider Interface)机制来实现插件的动态加载和管理。核心类 `PluginLoader` 负责加载标注了 `@SPI` 注解的接口实现类。
+
+`PluginLoader` 通过读取 `META-INF/plugins/` 目录下的配置文件,根据接口全限定名查找对应的实现类。每个插件配置文件以接口名命名,内容为 `插件名称=实现类全限定名` 的键值对格式。`PluginLoader` 支持单例模式获取插件实例(`getOrCreatePlugin`),确保同一名称的插件在 JVM 中只有一个实例。
+
+`@SPI` 注解用于标记可扩展的接口,其 `value` 属性可指定默认插件名称。`PluginLoader` 在加载时会验证实现类是否为接口的子类型,并通过 `findAnnotationName` 方法自动推断未在配置文件中显式命名的插件名称(通常为类名去掉接口后缀并转为小写)。
+
+```mermaid
+classDiagram
+class PluginLoader~T~ {
++getPluginLoader(Class~T~ type) PluginLoader~T~
++getOrCreatePlugin(String name) T
++getSupportedPlugins() Set~String~
+-loadPluginClasses() Map~String, Class~?
+-loadResource(Map~String, Class~?, ClassLoader, URL)
+-loadClass(Map~String, Class~?, URL, Class~?, String)
+}
+class SPI {
++String value()
+}
+PluginLoader --> SPI : "使用"
+```
+
+**图示来源**
+- [PluginLoader.java](file://datavines-spi/src/main/java/io/datavines/spi/PluginLoader.java#L51-L487)
+- [SPI.java](file://datavines-spi/src/main/java/io/datavines/spi/SPI.java#L1-L32)
+
+## 数据源插件开发
+数据源插件用于连接和操作不同的数据库系统。开发者需要实现 `Connector` 接口,并提供相应的 `DataSourceClient` 和 `Executor` 实现。
+
+`Connector` 接口定义了创建数据源客户端和执行器的方法。`DataSourceClient` 负责获取数据库的元数据信息(如数据库、表、列等),而 `Executor` 则负责执行 SQL 查询和脚本。开发者通常需要继承 `JdbcConnector` 或 `JdbcDataSourceClient` 等基类来简化 JDBC 类型数据源的开发。
+
+插件实现类需在 `META-INF/plugins/` 目录下创建以 `io.datavines.connector.api.Connector` 命名的配置文件,并添加 `插件名称=实现类全限定名` 的条目。例如,MySQL 插件的配置为 `mysql=io.datavines.connector.plugin.mysql.MySQLConnector`。
+
+```mermaid
+classDiagram
+class Connector {
++createDataSourceClient(Config config) DataSourceClient
++createExecutor(Config config) Executor
+}
+class DataSourceClient {
++getDatabases() String[]
++getTables(String database) String[]
++getColumns(String database, String table) QueryColumn[]
+}
+class Executor {
++executeQuery(String sql) ResultListWithColumns
++executeUpdate(String sql) int
+}
+class JdbcConnector {
++createDataSourceClient(Config config) JdbcDataSourceClient
++createExecutor(Config config) BaseJdbcExecutor
+}
+Connector <|-- JdbcConnector
+JdbcConnector --> JdbcDataSourceClient : "创建"
+JdbcConnector --> BaseJdbcExecutor : "创建"
+DataSourceClient <|.. JdbcDataSourceClient
+Executor <|.. BaseJdbcExecutor
+```
+
+**图示来源**
+- [Connector.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Connector.java#L1-L15)
+
+**本节来源**
+- [Connector.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Connector.java#L1-L15)
+
+## 检查规则插件开发
+检查规则插件用于定义数据质量的校验逻辑。核心接口是 `SqlMetric`,它定义了生成用于数据质量检查的 SQL 语句的方法。
+
+`SqlMetric` 接口的实现需要根据配置的参数(如表名、列名、阈值等)生成相应的 SQL 查询。查询结果将用于判断数据质量是否达标。例如,`column_not_null` 规则会生成 `SELECT COUNT(*) FROM table WHERE column IS NULL` 这样的 SQL 来统计空值数量。
+
+开发者需要实现 `SqlMetric` 接口,并在 `META-INF/plugins/` 目录下创建 `io.datavines.metric.api.SqlMetric` 配置文件。插件名称通常与规则类型一致,如 `column_not_null`。
+
+```mermaid
+classDiagram
+class SqlMetric {
++getSql(Config config) String
++getActualValueColumnName() String
++getExpectedValueColumnName() String
+}
+class ColumnNotNullMetric {
++getSql(Config config) String
+}
+class ColumnDuplicateMetric {
++getSql(Config config) String
+}
+SqlMetric <|.. ColumnNotNullMetric
+SqlMetric <|.. ColumnDuplicateMetric
+```
+
+**图示来源**
+- [SqlMetric.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/SqlMetric.java#L1-L15)
+
+**本节来源**
+- [SqlMetric.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/SqlMetric.java#L1-L15)
+
+## 执行引擎插件开发
+执行引擎插件负责提交和管理数据质量检查任务的执行。核心接口是 `EngineExecutor`,它定义了任务提交、状态查询和日志获取等方法。
+
+`EngineExecutor` 的实现需要能够与底层计算框架(如 Spark、Flink)进行交互。例如,`SparkEngineExecutor` 会通过 `spark-submit` 命令或 Livy 服务提交任务。开发者需要实现 `submitJob`、`getJobStatus`、`getJobLog` 等关键方法。
+
+插件需在 `META-INF/plugins/` 目录下创建 `io.datavines.engine.api.engine.EngineExecutor` 配置文件。DataVines 内置了 `local` 和 `spark` 两种执行引擎。
+
+```mermaid
+classDiagram
+class EngineExecutor {
++submitJob(JobConfiguration jobConfig) String
++getJobStatus(String jobId) ExecutionStatus
++getJobLog(String jobId, int fromLine, int size) LogResult
++killJob(String jobId) boolean
+}
+class SparkEngineExecutor {
++submitJob(JobConfiguration jobConfig) String
+}
+class LocalEngineExecutor {
++submitJob(JobConfiguration jobConfig) String
+}
+EngineExecutor <|.. SparkEngineExecutor
+EngineExecutor <|.. LocalEngineExecutor
+```
+
+**图示来源**
+- [EngineExecutor.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/engine/EngineExecutor.java#L1-L15)
+
+**本节来源**
+- [EngineExecutor.java](file://datavines-engine/datavines-engine-api/src/main/java/io/datavines/engine/api/engine/EngineExecutor.java#L1-L15)
+
+## 告警通道插件开发
+告警通道插件用于在数据质量检查失败时发送通知。核心接口是 `NotificationSender`,它定义了发送通知消息的方法。
+
+`NotificationSender` 的实现需要能够调用具体的告警服务 API,如邮件服务器、钉钉机器人、企业微信等。`send` 方法接收一个包含告警内容的 `NotificationRequest` 对象,并返回发送结果。
+
+开发者需实现 `NotificationSender` 接口,并在 `META-INF/plugins/` 目录下创建 `io.datavines.notification.api.spi.NotificationSender` 配置文件。DataVines 已支持邮件、钉钉、飞书和企业微信机器人等告警通道。
+
+```mermaid
+classDiagram
+class NotificationSender {
++send(NotificationRequest request) boolean
+}
+class EmailNotificationSender {
++send(NotificationRequest request) boolean
+}
+class DingTalkNotificationSender {
++send(NotificationRequest request) boolean
+}
+NotificationSender <|.. EmailNotificationSender
+NotificationSender <|.. DingTalkNotificationSender
+```
+
+**图示来源**
+- [NotificationSender.java](file://datavines-notification/datavines-notification-api/src/main/java/io/datavines/notification/api/spi/NotificationSender.java#L1-L15)
+
+**本节来源**
+- [NotificationSender.java](file://datavines-notification/datavines-notification-api/src/main/java/io/datavines/notification/api/spi/NotificationSender.java#L1-L15)
+
+## 注册中心插件开发
+注册中心插件用于实现服务发现和分布式协调。核心接口是 `Registry`,它定义了服务注册、发现和监听的方法。
+
+`Registry` 的实现需要能够与注册中心服务(如 ZooKeeper、MySQL)进行交互。`register` 方法用于注册服务实例,`subscribe` 方法用于监听服务列表的变化。
+
+开发者需实现 `Registry` 接口,并在 `META-INF/plugins/` 目录下创建 `io.datavines.registry.api.Registry` 配置文件。DataVines 支持 MySQL、PostgreSQL 和 ZooKeeper 作为注册中心。
+
+```mermaid
+classDiagram
+class Registry {
++register(ServerInfo serverInfo) void
++unregister(ServerInfo serverInfo) void
++subscribe(String service, SubscribeListener listener) void
++unsubscribe(String service, SubscribeListener listener) void
+}
+class MySQLRegistry {
++register(ServerInfo serverInfo) void
+}
+class ZooKeeperRegistry {
++register(ServerInfo serverInfo) void
+}
+Registry <|.. MySQLRegistry
+Registry <|.. ZooKeeperRegistry
+```
+
+**图示来源**
+- [Registry.java](file://datavines-registry/datavines-registry-api/src/main/java/io/datavines/registry/api/Registry.java#L1-L15)
+
+**本节来源**
+- [Registry.java](file://datavines-registry/datavines-registry-api/src/main/java/io/datavines/registry/api/Registry.java#L1-L15)
+
+## 插件配置与服务发现
+插件的配置主要通过 `Config` 对象传递。`Config` 是一个键值对集合,包含了插件运行所需的所有参数。例如,数据源插件需要 `host`、`port`、`username`、`password` 等配置项。
+
+服务发现依赖于注册中心插件。当多个 `datavines-server` 实例启动时,它们会通过 `Registry` 接口向注册中心注册自己的信息(如 IP、端口)。其他组件(如 `datavines-runner`)可以通过订阅服务列表来发现可用的服务器,并实现负载均衡。
+
+## 插件打包与部署
+插件开发完成后,需要将其打包成 JAR 文件。JAR 包中必须包含 `META-INF/plugins/` 目录及其下的配置文件。对于数据源插件,还需要将数据库的 JDBC 驱动 JAR 包一并放入 `datavines-connector-plugins` 模块的 `lib` 目录中。
+
+部署时,将插件 JAR 包和依赖的驱动 JAR 包复制到 `datavines/lib/plugins/` 目录下。重启 DataVines 服务后,`PluginLoader` 会自动扫描并加载新插件。
+
+## 插件调试与测试
+建议使用单元测试来验证插件的核心逻辑。对于数据源插件,可以编写测试用例来验证 `getDatabases`、`getTables` 等方法是否能正确返回元数据。对于检查规则插件,应测试 `getSql` 方法生成的 SQL 语句是否正确。
+
+集成测试可以通过启动一个本地的 DataVines 环境,配置使用待测试的插件,并执行一个数据质量检查任务来完成。观察任务执行日志和结果,可以验证插件是否按预期工作。
+
+## 版本管理与兼容性
+插件的版本管理应遵循语义化版本规范(SemVer)。主版本号的变更通常意味着不兼容的 API 修改。为保证兼容性,建议:
+
+1. 避免修改已发布的 `SPI` 接口。
+2. 通过添加新方法或新配置项来扩展功能,而不是修改现有行为。
+3. 在 `PluginLoader` 中,优先加载显式配置的插件,以避免因自动推断名称导致的冲突。
+4. 在插件 JAR 包的 `MANIFEST.MF` 文件中声明兼容的 DataVines 核心版本。
+
+## 最佳实践
+1. **遵循命名规范**:插件名称应简洁、明确,使用小写字母和下划线。
+2. **提供默认实现**:在 `@SPI` 注解中指定一个可靠的默认插件。
+3. **处理异常**:在插件代码中妥善处理可能的异常,并提供清晰的错误信息。
+4. **资源管理**:对于需要管理连接、会话等资源的插件,确保在适当时机进行资源释放。
+5. **日志记录**:使用 SLF4J 记录关键操作和错误,便于问题排查。
+6. **配置校验**:在插件初始化时,对传入的 `Config` 对象进行必要的校验。
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\225\260\346\215\256\346\272\220\346\217\222\344\273\266\345\274\200\345\217\221.md" "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\225\260\346\215\256\346\272\220\346\217\222\344\273\266\345\274\200\345\217\221.md"
new file mode 100644
index 00000000..67008720
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\225\260\346\215\256\346\272\220\346\217\222\344\273\266\345\274\200\345\217\221.md"
@@ -0,0 +1,551 @@
+# 数据源插件开发
+
+
+**本文档中引用的文件**
+- [Connector.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Connector.java)
+- [DataSourceClient.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/DataSourceClient.java)
+- [Dialect.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Dialect.java)
+- [ConnectorFactory.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/ConnectorFactory.java)
+- [Executor.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Executor.java)
+- [JdbcConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcConnector.java)
+- [JdbcDataSourceClient.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDataSourceClient.java)
+- [JdbcDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDialect.java)
+- [AbstractJdbcConnectorFactory.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/AbstractJdbcConnectorFactory.java)
+- [BaseJdbcExecutor.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/BaseJdbcExecutor.java)
+- [MysqlConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnector.java)
+- [MysqlDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlDialect.java)
+- [MysqlConnectorFactory.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java)
+- [PostgreSqlConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnector.java)
+- [PostgreSqlDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlDialect.java)
+
+
+## 目录
+1. [引言](#引言)
+2. [核心接口详解](#核心接口详解)
+3. [JDBC基础实现](#jdbc基础实现)
+4. [MySQL插件实现示例](#mysql插件实现示例)
+5. [PostgreSQL插件实现示例](#postgresql插件实现示例)
+6. [连接池与事务管理](#连接池与事务管理)
+7. [错误恢复机制](#错误恢复机制)
+8. [插件测试指南](#插件测试指南)
+9. [插件打包与部署](#插件打包与部署)
+10. [SPI机制注册](#spi机制注册)
+
+## 引言
+DataVines是一个数据质量监控平台,支持通过插件机制扩展数据源。本文档详细介绍如何为DataVines开发新的数据源插件,涵盖Connector、DataSourceClient和Dialect接口的作用和实现方法。通过MySQL和PostgreSQL插件的实现示例,展示如何处理连接配置、SQL方言差异和元数据获取。同时涵盖连接池管理、事务处理和错误恢复机制,指导开发者如何测试插件的兼容性和性能,并提供插件打包和部署的详细步骤。
+
+## 核心接口详解
+
+### Connector接口
+Connector接口是数据源插件的核心接口,定义了与数据源交互的基本操作。它提供了获取数据库、表、列等元数据的方法,以及测试连接的功能。
+
+```mermaid
+classDiagram
+class Connector {
++getDatabases(GetDatabasesRequestParam) ConnectorResponse
++getTables(GetTablesRequestParam) ConnectorResponse
++getColumns(GetColumnsRequestParam) ConnectorResponse
++getPartitions(ConnectorRequestParam) ConnectorResponse
++testConnect(TestConnectionRequestParam) ConnectorResponse
++keyProperties() String[]
+}
+```
+
+**接口来源**
+- [Connector.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Connector.java)
+
+### DataSourceClient接口
+DataSourceClient接口负责管理数据源连接,提供获取DataSource、Connection和JdbcTemplate的方法。它抽象了底层连接管理的复杂性,使上层代码可以专注于业务逻辑。
+
+```mermaid
+classDiagram
+class DataSourceClient {
++getDataSource(BaseJdbcDataSourceInfo) DataSource
++getDataSource(Map~String,Object~) DataSource
++getDataSource(Properties) DataSource
++getConnection(BaseJdbcDataSourceInfo) Connection
++getConnection(Map~String,Object~) Connection
++getConnection(Map~String,Object~, Logger) Connection
++getConnection(Properties) Connection
++getJdbcTemplate(BaseJdbcDataSourceInfo) JdbcTemplate
+}
+```
+
+**接口来源**
+- [DataSourceClient.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/DataSourceClient.java)
+
+### Dialect接口
+Dialect接口处理SQL方言的差异,提供数据库特定的SQL生成和处理功能。它定义了驱动类名、标识符引号、排除的数据库列表等属性,以及各种SQL查询的生成方法。
+
+```mermaid
+classDiagram
+class Dialect {
++getDriver() String
++getColumnPrefix() String
++getColumnSuffix() String
++getExcludeDatabases() String[]
++getFullQualifiedTableName(String, String, String, boolean) String
++invalidateItemCanOutput() boolean
++invalidateItemCanOutputToSelf() boolean
++supportToBeErrorDataStorage() boolean
++getJDBCType(DataType) String
++getDataType(String) DataType
++quoteIdentifier(String) String
++getQuoteIdentifier() String
++getTableExistsQuery(String) String
++getSchemaQuery(String) String
++getCountQuery(String) String
++getSelectQuery(String) String
++getCreateTableAsSelectStatement(String, String, String) String
++getCreateTableAsSelectStatementFromSql(String, String, String) String
++getCreateTableStatement(String, StructField[], TypeConverter) String
++getInsertAsSelectStatement(String, String, String) String
++getInsertAsSelectStatementFromSql(String, String, String) String
++getErrorDataScript(Map~String, String~) String
++getValidateResultDataScript(Map~String, String~) String
++getPageFromResultSet(Statement, ResultSet, String, int, int) ResultList
+}
+```
+
+**接口来源**
+- [Dialect.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Dialect.java)
+
+### ConnectorFactory接口
+ConnectorFactory接口是插件工厂,负责创建和配置插件所需的各个组件。通过SPI机制注册,DataVines在运行时动态加载相应的插件工厂。
+
+```mermaid
+classDiagram
+class ConnectorFactory {
++getCategory() String
++getConnector() Connector
++getResponseConverter() ResponseConverter
++getDialect() Dialect
++getConnectorParameterConverter() ParameterConverter
++getExecutor() Executor
++getTypeConverter() TypeConverter
++getConfigBuilder() ConfigBuilder
++getDataSourceClient() DataSourceClient
++getStatementSplitter() StatementSplitter
++getStatementParser() StatementParser
++getMetricScript() MetricScript
++showInFrontend() Boolean
+}
+```
+
+**接口来源**
+- [ConnectorFactory.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/ConnectorFactory.java)
+
+### Executor接口
+Executor接口负责执行SQL脚本和查询,提供分页查询、列表查询和单条记录查询等功能。它是数据操作的执行层,封装了具体的执行逻辑。
+
+```mermaid
+classDiagram
+class Executor {
++queryForPage(ExecuteRequestParam) ConnectorResponse
++queryForList(ExecuteRequestParam) ConnectorResponse
++queryForOne(ExecuteRequestParam) ConnectorResponse
++deleteData(ExecuteRequestParam) ConnectorResponse
+}
+```
+
+**接口来源**
+- [Executor.java](file://datavines-connector/datavines-connector-api/src/main/java/io/datavines/connector/api/Executor.java)
+
+## JDBC基础实现
+
+### JdbcConnector抽象类
+JdbcConnector是所有JDBC数据源插件的基础实现,提供了获取数据库、表、列等元数据的通用方法。它继承了Connector接口,并实现了大部分通用功能。
+
+```mermaid
+classDiagram
+class JdbcConnector {
+-logger Logger
+-TABLE String
+-VIEW String
+-TABLE_TYPES String[]
+-TABLE_NAME String
+-TABLE_TYPE String
+-dataSourceClient DataSourceClient
++JdbcConnector(DataSourceClient)
++getDatabases(GetDatabasesRequestParam) ConnectorResponse
++getTables(GetTablesRequestParam) ConnectorResponse
++getColumns(GetColumnsRequestParam) ConnectorResponse
++getPartitions(ConnectorRequestParam) ConnectorResponse
++testConnect(TestConnectionRequestParam) ConnectorResponse
++keyProperties() String[]
++getMetadataDatabases(Connection) ResultSet
++getMetadataTables(DatabaseMetaData, String, String) ResultSet
++getMetadataColumns(DatabaseMetaData, String, String, String, String) ResultSet
++getPrimaryKeys(DatabaseMetaData, String, String, String) ResultSet
+}
+```
+
+**实现来源**
+- [JdbcConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcConnector.java)
+
+### JdbcDataSourceClient实现
+JdbcDataSourceClient实现了DataSourceClient接口,利用JdbcDataSourceManager管理连接池,提供DataSource、Connection和JdbcTemplate的获取功能。
+
+```mermaid
+classDiagram
+class JdbcDataSourceClient {
++getDataSource(BaseJdbcDataSourceInfo) DataSource
++getDataSource(Map~String, Object~) DataSource
++getDataSource(Properties) DataSource
++getConnection(BaseJdbcDataSourceInfo) Connection
++getConnection(Map~String, Object~) Connection
++getConnection(Map~String, Object~, Logger) Connection
++getConnection(Properties) Connection
++getJdbcTemplate(BaseJdbcDataSourceInfo) JdbcTemplate
+}
+```
+
+**实现来源**
+- [JdbcDataSourceClient.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDataSourceClient.java)
+
+### JdbcDialect抽象类
+JdbcDialect是所有JDBC方言的基础实现,提供了默认的SQL生成逻辑和标识符引号处理。具体数据库的方言类可以继承它并重写特定方法。
+
+```mermaid
+classDiagram
+class JdbcDialect {
++getColumnPrefix() String
++getColumnSuffix() String
++getExcludeDatabases() String[]
++getErrorDataScript(Map~String, String~) String
++getValidateResultDataScript(Map~String, String~) String
++getPageFromResultSet(Statement, ResultSet, String, int, int) ResultList
+}
+```
+
+**实现来源**
+- [JdbcDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDialect.java)
+
+### AbstractJdbcConnectorFactory抽象类
+AbstractJdbcConnectorFactory是所有JDBC插件工厂的基础实现,提供了通用的组件创建逻辑,如ResponseConverter、TypeConverter、ConfigBuilder等。
+
+```mermaid
+classDiagram
+class AbstractJdbcConnectorFactory {
++getCategory() String
++getResponseConverter() ResponseConverter
++getTypeConverter() TypeConverter
++getConfigBuilder() ConfigBuilder
++getDataSourceClient() DataSourceClient
++getStatementSplitter() StatementSplitter
++getStatementParser() StatementParser
++getMetricScript() MetricScript
+}
+```
+
+**实现来源**
+- [AbstractJdbcConnectorFactory.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/AbstractJdbcConnectorFactory.java)
+
+### BaseJdbcExecutor抽象类
+BaseJdbcExecutor是所有JDBC执行器的基础实现,提供了基于JdbcTemplate的查询功能,包括分页查询、列表查询和单条记录查询。
+
+```mermaid
+classDiagram
+class BaseJdbcExecutor {
+-dataSourceClient DataSourceClient
++BaseJdbcExecutor(DataSourceClient)
++queryForPage(ExecuteRequestParam) ConnectorResponse
++queryForOne(ExecuteRequestParam) ConnectorResponse
++queryForList(ExecuteRequestParam) ConnectorResponse
++query(JdbcTemplate, String, int) ListWithQueryColumn
+}
+```
+
+**实现来源**
+- [BaseJdbcExecutor.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/BaseJdbcExecutor.java)
+
+## MySQL插件实现示例
+
+### MysqlConnector实现
+MysqlConnector继承了JdbcConnector,实现了MySQL特定的元数据获取逻辑,特别是通过getMetadataDatabases方法使用DatabaseMetaData.getCatalogs()获取数据库列表。
+
+```mermaid
+classDiagram
+class MysqlConnector {
++MysqlConnector(DataSourceClient)
++getDatasourceInfo(Map~String,String~) BaseJdbcDataSourceInfo
++getMetadataDatabases(Connection) ResultSet
+}
+```
+
+**实现来源**
+- [MysqlConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnector.java)
+
+### MysqlDialect实现
+MysqlDialect继承了JdbcDialect,定义了MySQL特定的驱动类名、标识符引号和错误数据存储支持。它重写了getDriver方法返回"com.mysql.cj.jdbc.Driver"。
+
+```mermaid
+classDiagram
+class MysqlDialect {
++getDriver() String
++invalidateItemCanOutputToSelf() boolean
++supportToBeErrorDataStorage() boolean
++quoteIdentifier(String) String
++getQuoteIdentifier() String
+}
+```
+
+**实现来源**
+- [MysqlDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlDialect.java)
+
+### MysqlConnectorFactory实现
+MysqlConnectorFactory继承了AbstractJdbcConnectorFactory,实现了MySQL特定的组件创建逻辑,包括MysqlParameterConverter、MysqlDialect、MysqlExecutor等。
+
+```mermaid
+classDiagram
+class MysqlConnectorFactory {
++getConnectorParameterConverter() ParameterConverter
++getDialect() Dialect
++getConnector() Connector
++getExecutor() Executor
++getConfigBuilder() ConfigBuilder
++getMetricScript() MetricScript
+}
+```
+
+**实现来源**
+- [MysqlConnectorFactory.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java)
+
+## PostgreSQL插件实现示例
+
+### PostgreSqlConnector实现
+PostgreSqlConnector继承了JdbcConnector,实现了PostgreSQL特定的元数据获取逻辑,包括支持"FOREIGN TABLE"类型和使用getMetadataDatabases方法获取数据库列表。
+
+```mermaid
+classDiagram
+class PostgreSqlConnector {
+-FOREIGN_TABLE String
+-TABLE_TYPES String[]
++PostgreSqlConnector(DataSourceClient)
++getDatasourceInfo(Map~String,String~) BaseJdbcDataSourceInfo
++getMetadataDatabases(Connection) ResultSet
++getMetadataTables(DatabaseMetaData, String, String) ResultSet
+}
+```
+
+**实现来源**
+- [PostgreSqlConnector.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlConnector.java)
+
+### PostgreSqlDialect实现
+PostgreSqlDialect继承了JdbcDialect,定义了PostgreSQL特定的驱动类名"org.postgresql.Driver"。
+
+```mermaid
+classDiagram
+class PostgreSqlDialect {
++getDriver() String
+}
+```
+
+**实现来源**
+- [PostgreSqlDialect.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-postgresql/src/main/java/io/datavines/connector/plugin/PostgreSqlDialect.java)
+
+## 连接池与事务管理
+
+### 连接池管理
+DataVines使用JdbcDataSourceManager管理连接池,通过DataSourceClient接口提供连接获取功能。连接池的配置和管理由JdbcDataSourceManager负责,确保连接的高效复用和资源管理。
+
+```mermaid
+sequenceDiagram
+participant Application
+participant DataSourceClient
+participant JdbcDataSourceManager
+participant ConnectionPool
+Application->>DataSourceClient : getConnection(config)
+DataSourceClient->>JdbcDataSourceManager : getDataSource(config)
+JdbcDataSourceManager->>ConnectionPool : 获取连接
+ConnectionPool-->>JdbcDataSourceManager : 返回连接
+JdbcDataSourceManager-->>DataSourceClient : 返回DataSource
+DataSourceClient-->>Application : 返回Connection
+```
+
+**实现来源**
+- [JdbcDataSourceClient.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDataSourceClient.java)
+- [JdbcDataSourceManager.java](file://datavines-common/src/main/java/io/datavines/common/datasource/jdbc/JdbcDataSourceManager.java)
+
+### 事务管理
+DataVines通过JdbcTemplate管理事务,利用Spring的事务管理机制确保数据操作的原子性和一致性。Executor实现类使用JdbcTemplate执行SQL,自动参与当前事务。
+
+```mermaid
+sequenceDiagram
+participant Service
+participant Executor
+participant JdbcTemplate
+participant Database
+Service->>Executor : queryForList(param)
+Executor->>JdbcTemplate : 执行查询
+JdbcTemplate->>Database : 执行SQL
+Database-->>JdbcTemplate : 返回结果
+JdbcTemplate-->>Executor : 返回结果集
+Executor-->>Service : 返回ConnectorResponse
+```
+
+**实现来源**
+- [BaseJdbcExecutor.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/BaseJdbcExecutor.java)
+
+## 错误恢复机制
+
+### 连接错误处理
+DataVines在连接失败时提供详细的错误日志和恢复机制。通过DataSourceClient的getConnection方法,捕获SQLException并记录错误信息,同时提供重试机制。
+
+```mermaid
+flowchart TD
+Start([开始连接]) --> GetConnection["获取连接"]
+GetConnection --> ConnectionValid{"连接有效?"}
+ConnectionValid --> |否| HandleError["处理连接错误"]
+HandleError --> LogError["记录错误日志"]
+LogError --> Retry{"是否重试?"}
+Retry --> |是| GetConnection
+Retry --> |否| ReturnError["返回错误"]
+ConnectionValid --> |是| ReturnSuccess["返回成功"]
+ReturnSuccess --> End([结束])
+ReturnError --> End
+```
+
+**实现来源**
+- [JdbcDataSourceClient.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/JdbcDataSourceClient.java)
+
+### 查询错误处理
+在执行查询时,DataVines捕获SQLException并返回适当的错误响应。通过ConnectorResponse的status和errorMsg字段,向调用方传递错误信息。
+
+```mermaid
+flowchart TD
+StartQuery([开始查询]) --> ExecuteSQL["执行SQL"]
+ExecuteSQL --> SQLSuccess{"执行成功?"}
+SQLSuccess --> |否| HandleQueryError["处理查询错误"]
+HandleQueryError --> LogQueryError["记录查询错误日志"]
+LogQueryError --> BuildErrorResponse["构建错误响应"]
+BuildErrorResponse --> ReturnErrorResponse["返回错误响应"]
+SQLSuccess --> |是| BuildSuccessResponse["构建成功响应"]
+BuildSuccessResponse --> ReturnSuccessResponse["返回成功响应"]
+ReturnErrorResponse --> EndQuery([结束])
+ReturnSuccessResponse --> EndQuery
+```
+
+**实现来源**
+- [BaseJdbcExecutor.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-jdbc/src/main/java/io/datavines/connector/plugin/BaseJdbcExecutor.java)
+
+## 插件测试指南
+
+### 单元测试
+为确保插件的正确性,需要编写全面的单元测试。测试应覆盖连接、元数据获取、查询执行等核心功能。
+
+```mermaid
+flowchart TD
+TestSuite([测试套件]) --> TestConnect["测试连接"]
+TestSuite --> TestGetDatabases["测试获取数据库"]
+TestSuite --> TestGetTables["测试获取表"]
+TestSuite --> TestGetColumns["测试获取列"]
+TestSuite --> TestQuery["测试查询"]
+TestConnect --> MockDataSource["模拟数据源"]
+MockDataSource --> ExecuteTest["执行连接测试"]
+ExecuteTest --> VerifyResult["验证结果"]
+TestGetDatabases --> MockConnection["模拟连接"]
+MockConnection --> ExecuteGetDatabases["执行获取数据库测试"]
+ExecuteGetDatabases --> VerifyDatabases["验证数据库列表"]
+TestGetTables --> ExecuteGetTables["执行获取表测试"]
+ExecuteGetTables --> VerifyTables["验证表列表"]
+TestGetColumns --> ExecuteGetColumns["执行获取列测试"]
+ExecuteGetColumns --> VerifyColumns["验证列信息"]
+TestQuery --> ExecuteQuery["执行查询测试"]
+ExecuteQuery --> VerifyQueryResult["验证查询结果"]
+```
+
+### 集成测试
+集成测试需要在真实环境中验证插件的功能,包括连接池管理、事务处理和错误恢复等。
+
+```mermaid
+sequenceDiagram
+participant Test
+participant Plugin
+participant Database
+Test->>Plugin : 初始化插件
+Plugin->>Database : 建立连接
+Database-->>Plugin : 返回连接
+Plugin-->>Test : 插件初始化完成
+Test->>Plugin : 获取数据库列表
+Plugin->>Database : 查询数据库
+Database-->>Plugin : 返回数据库列表
+Plugin-->>Test : 返回数据库列表
+Test->>Plugin : 执行查询
+Plugin->>Database : 执行SQL
+Database-->>Plugin : 返回查询结果
+Plugin-->>Test : 返回查询结果
+Test->>Plugin : 关闭连接
+Plugin->>Database : 关闭连接
+Database-->>Plugin : 连接关闭
+Plugin-->>Test : 插件关闭完成
+```
+
+## 插件打包与部署
+
+### Maven项目结构
+数据源插件通常作为Maven项目开发,需要遵循特定的目录结构和依赖配置。
+
+```mermaid
+graph TD
+ProjectRoot([项目根目录]) --> pom.xml
+ProjectRoot --> src
+src --> main
+main --> java
+java --> io.datavines.connector.plugin
+io.datavines.connector.plugin --> Connector.java
+io.datavines.connector.plugin --> Dialect.java
+io.datavines.connector.plugin --> ConnectorFactory.java
+main --> resources
+resources --> META-INF
+META-INF --> plugins
+plugins --> connector.factory
+```
+
+### 打包流程
+插件打包需要生成JAR文件,并包含必要的SPI配置。
+
+```mermaid
+flowchart TD
+StartBuild([开始构建]) --> Compile["编译Java源码"]
+Compile --> Package["打包JAR文件"]
+Package --> AddSPI["添加SPI配置"]
+AddSPI --> META-INF["创建META-INF目录"]
+META-INF --> plugins["创建plugins目录"]
+plugins --> factoryFile["创建connector.factory文件"]
+factoryFile --> WriteClassName["写入工厂类名"]
+WriteClassName --> CompleteBuild["构建完成"]
+```
+
+## SPI机制注册
+
+### SPI配置
+通过在META-INF/services目录下创建connector.factory文件,注册插件工厂类,实现SPI机制的自动发现。
+
+```mermaid
+flowchart TD
+SPIConfig([SPI配置]) --> CreateDirectory["创建META-INF/services目录"]
+CreateDirectory --> CreateFile["创建connector.factory文件"]
+CreateFile --> WriteClassName["写入工厂类全名"]
+WriteClassName --> Example["示例: io.datavines.connector.plugin.MysqlConnectorFactory"]
+Example --> Complete["配置完成"]
+```
+
+**实现来源**
+- [MysqlConnectorFactory.java](file://datavines-connector/datavines-connector-plugins/datavines-connector-mysql/src/main/java/io/datavines/connector/plugin/MysqlConnectorFactory.java)
+
+### 插件加载流程
+DataVines启动时通过SPI机制加载所有注册的插件工厂,实现插件的动态发现和注册。
+
+```mermaid
+sequenceDiagram
+participant DataVines
+participant SPI
+participant PluginFactory
+DataVines->>SPI : ServiceLoader.load(ConnectorFactory.class)
+SPI->>PluginFactory : 查找META-INF/services/connector.factory
+PluginFactory-->>SPI : 返回工厂类名
+SPI-->>DataVines : 返回工厂实例
+DataVines->>PluginFactory : 注册插件
+PluginFactory-->>DataVines : 插件注册完成
+```
\ No newline at end of file
diff --git "a/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\243\200\346\237\245\350\247\204\345\210\231\346\217\222\344\273\266\345\274\200\345\217\221.md" "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\243\200\346\237\245\350\247\204\345\210\231\346\217\222\344\273\266\345\274\200\345\217\221.md"
new file mode 100644
index 00000000..b03bbef6
--- /dev/null
+++ "b/.qoder/repowiki/zh/content/\346\217\222\344\273\266\345\274\200\345\217\221/\346\243\200\346\237\245\350\247\204\345\210\231\346\217\222\344\273\266\345\274\200\345\217\221.md"
@@ -0,0 +1,304 @@
+# 检查规则插件开发
+
+
+**本文档中引用的文件**
+- [SqlMetric.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/SqlMetric.java)
+- [ExpectedValue.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/ExpectedValue.java)
+- [ResultFormula.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/ResultFormula.java)
+- [MetricExecutionResult.java](file://datavines-metric/datavines-metric-api/src/main/java/io/datavines/metric/api/MetricExecutionResult.java)
+- [ColumnNotNull.java](file://datavines-metric/datavines-metric-plugins/datavines-metric-column-not-null/src/main/java/io/datavines/metric/plugin/ColumnNotNull.java)
+- [TableRowCount.java](file://datavines-metric/datavines-metric-plugins/datavines-metric-table-row-count/src/main/java/io/datavines/metric/plugin/TableRowCount.java)
+- [CustomAggregateSql.java](file://datavines-metric/datavines-metric-plugins/datavines-metric-custom-aggregate-sql/src/main/java/io/datavines/metric/plugin/CustomAggregateSql.java)
+- [MultiTableAccuracy.java](file://datavines-metric/datavines-metric-plugins/datavines-metric-multi-table-accuracy/src/main/java/io/datavines/metric/plugin/MultiTableAccuracy.java)
+- [BaseSingleTableColumnNotUseView.java](file://datavines-metric/datavines-metric-plugins/datavines-metric-base/src/main/java/io/datavines/metric/plugin/base/BaseSingleTableColumnNotUseView.java)
+
+
+## 目录
+1. [引言](#引言)
+2. [核心接口设计](#核心接口设计)
+3. [检查规则实现模式](#检查规则实现模式)
+4. [代码示例分析](#代码示例分析)
+5. [预期值计算策略](#预期值计算策略)
+6. [测试与性能优化](#测试与性能优化)
+7. [结论](#结论)
+
+## 引言
+DataVines是一个数据质量监控平台,支持通过插件化方式扩展数据质量检查规则。本文档旨在为开发者提供详细的检查规则插件开发指南,涵盖从接口设计到具体实现的各个方面。通过本指南,开发者可以了解如何创建自定义的数据质量检查规则,包括单表列检查、跨表准确性检查和自定义聚合SQL检查等不同类型。
+
+## 核心接口设计
+
+### SqlMetric接口设计原理
+`SqlMetric`接口是DataVines中所有数据质量检查规则的核心接口,定义了检查规则的基本行为和属性。该接口通过SPI(Service Provider Interface)机制实现插件化扩展,允许开发者通过实现该接口来创建自定义的检查规则。
+
+```mermaid
+classDiagram
+class SqlMetric {
+<>
++String getName()
++String getZhName()
++MetricDimension getDimension()
++MetricType getType()
++boolean isInvalidateItemsCanOutput()
++ExecuteSql getInvalidateItems(Map)
++ExecuteSql getActualValue(Map)
++ExecuteSql getDirectActualValue(Map)
++String getActualName()
++String getActualValueType()
++CheckResult validateConfig(Map)
++Map getConfigMap()
++void prepare(Map)
++String getIssue()
++List suitableType()
++boolean supportMultiple()
++List