datai/docs/archive/REQ-006.md

210 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 需求: 元数据变更自动同步本地数据库
## 元数据 (Metadata)
- **需求编号**: REQ-006
- **需求标题**: 元数据变更自动同步本地数据库
- **需求类型**: 功能需求
- **优先级**: 高
- **状态**: Completed
- **创建日期**: 2026-01-16
- **最后更新**: 2026-01-16
- **创建人**: 用户
- **负责人**: AI Assistant
## 输入引用
- [DataiIntegrationMetadataChangeController](../../datai-salesforce-integration/src/main/java/com/datai/integration/controller/DataiIntegrationMetadataChangeController.java) - 对象元数据变更控制器
- [DataiIntegrationMetadataChange](../../datai-salesforce-integration/src/main/java/com/datai/integration/model/domain/DataiIntegrationMetadataChange.java) - 对象元数据变更实体
- [REQ-005](REQ-005.md) - 定时任务自动同步、插入和更新对象数据
## Context Maps
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: DataiIntegrationMetadataChangeController - 对象元数据变更控制器
- **相关节点**: DataiIntegrationMetadataChangeService - 对象元数据变更服务
- **相关节点**: DataiIntegrationObject - 对象同步控制实体
## 需求目标
在 task 目录下创建定时任务,实现元数据变更自动同步到本地数据库的功能。定时任务会扫描所有未同步的元数据变更记录,判断是否满足自动同步条件,并调用相应的同步方法执行同步操作。这样可以减少手动同步的工作量,提高元数据同步的及时性和自动化程度。
## 需求描述
### 概述
创建定时任务类,自动扫描未同步的元数据变更记录,根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步,并调用 DataiIntegrationMetadataChangeController 中的方法执行同步操作。
### 详细需求
#### 1. 元数据变更自动同步定时任务
- **需求描述**: 在 task 目录下创建定时任务类,自动扫描未同步的元数据变更记录,并执行同步操作
- **优先级**: 高
- **验收标准**:
- 能够正确扫描所有未同步的元数据变更记录syncStatus = false 或 null
- 能够根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步
- 能够调用 DataiIntegrationMetadataChangeService 的方法执行同步操作
- 能够记录详细的日志信息
- 能够正确处理同步过程中的异常
- **依赖关系**: 依赖 DataiIntegrationMetadataChangeService 的实现
- **实现建议**: 参考 ObjectSyncTask 的实现方式,使用 @Component、@Slf4j、@Autowired 注解
#### 2. 元数据变更自动同步条件判断
- **需求描述**: 根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步
- **优先级**: 高
- **验收标准**:
- 能够正确判断对象变更是否应该自动同步
- 能够正确判断字段变更是否应该自动同步
- 能够根据操作类型CREATE、UPDATE、DELETE判断是否应该自动同步
- 能够根据对象配置isWork、syncStatus 等)判断是否应该自动同步
- 能够根据是否自定义对象isCustom判断是否应该自动同步
- **依赖关系**: 依赖 DataiIntegrationObject 和 DataiIntegrationMetadataChange 的字段定义
- **实现建议**: 创建独立的条件判断方法,提高代码可读性和可维护性
#### 3. 元数据变更同步方法调用
- **需求描述**: 调用 DataiIntegrationMetadataChangeService 的方法执行同步操作
- **优先级**: 高
- **验收标准**:
- 能够正确调用 syncToLocalDatabase 方法同步单个元数据变更
- 能够正确调用 syncBatchToLocalDatabase 方法批量同步元数据变更
- 能够正确处理同步结果
- 能够更新元数据变更记录的同步状态
- **依赖关系**: 依赖 DataiIntegrationMetadataChangeService 的实现
- **实现建议**: 使用 try-catch 处理异常,单个元数据变更同步失败不影响其他元数据变更的同步
## 元数据变更自动同步条件判断规则
### 自动同步条件
元数据变更需要同时满足以下条件才会被自动同步:
#### 通用条件
1. `syncStatus = false``syncStatus = null`(未同步)
2. `retryCount < 3`重试次数小于3次避免无限重试
#### 对象变更条件changeType = OBJECT
1. 对象配置完整objectApi、objectLabel 不为空)
2. 对象启用同步DataiIntegrationObject.isWork = true
3. 对象当前没有正在执行的同步任务DataiIntegrationObject.syncStatus = false
4. 根据操作类型判断:
- CREATE总是允许自动同步
- UPDATE总是允许自动同步
- DELETE总是允许自动同步
#### 字段变更条件changeType = FIELD
1. 字段配置完整objectApi、fieldApi、fieldLabel 不为空)
2. 对象启用同步DataiIntegrationObject.isWork = true
3. 对象当前没有正在执行的同步任务DataiIntegrationObject.syncStatus = false
4. 根据操作类型判断:
- CREATE总是允许自动同步
- UPDATE总是允许自动同步
- DELETE总是允许自动同步
### 不自动同步的条件
元数据变更满足以下任一条件时不自动同步:
1. `syncStatus = true`(已同步)
2. `retryCount >= 3`重试次数大于等于3次避免无限重试
3. 对象未启用同步DataiIntegrationObject.isWork = false
4. 对象当前正在执行同步任务DataiIntegrationObject.syncStatus = true
5. 对象配置不完整objectApi、objectLabel 为空)
6. 字段配置不完整objectApi、fieldApi、fieldLabel 为空)
### 同步失败处理
如果元数据变更同步失败,需要:
1. 更新元数据变更记录的 `syncErrorMessage` 字段,记录失败原因
2. 增加元数据变更记录的 `retryCount` 字段
3. 更新元数据变更记录的 `lastRetryTime` 字段
4. 记录详细的错误日志
## 约束
- **技术栈限制**: 必须使用现有的 Quartz 框架datai-quartz 模块)
- **性能要求**: 定时任务执行时间不应过长,建议在业务低峰期执行
- **安全性要求**: 定时任务方法需要通过 JobInvokeUtil 工具调用,支持通过反射调用 Spring Bean 方法
- **兼容性要求**: 必须与现有的元数据变更同步功能兼容
- **时间限制**: 无
- **其他约束**: 必须参考 RateLimitResetTask 和 ObjectSyncTask 的代码风格
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用 Canvas 中定义的类名和方法名
- 必须遵循 Canvas 中定义的调用关系
- 必须参考 Canvas 中的流程图逻辑
- 必须使用 @Component 注解,指定 bean 名称
- 必须使用 @Slf4j 注解进行日志记录
- 必须使用 @Autowired 注入 DataiIntegrationMetadataChangeService
- 必须定义公共方法作为定时任务的执行方法
- 必须在方法内部有 try-catch 异常处理
- 必须记录详细的日志信息
## 验收标准
### 功能完整性
- 能够正确扫描所有未同步的元数据变更记录
- 能够根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步
- 能够调用 DataiIntegrationMetadataChangeService 的方法执行同步操作
- 能够更新元数据变更记录的同步状态
- 能够正确处理同步过程中的异常
### 性能指标
- 定时任务执行时间不应超过 10 分钟(假设有 100 条未同步的元数据变更记录)
- 单个元数据变更同步时间不应超过 30 秒
### 安全性要求
- 定时任务方法需要通过 JobInvokeUtil 工具调用
- 定时任务执行日志需要记录到 SysJobLog 表
### 用户体验
- 提供详细的日志信息,便于问题排查
- 单个元数据变更同步失败不影响其他元数据变更的同步
### 其他验收标准
- 代码风格与 RateLimitResetTask 和 ObjectSyncTask 保持一致
- 代码能够编译通过,无语法错误
## 风险
### 技术实现风险
- 定时任务执行时间可能与业务高峰期冲突,影响系统性能
- 元数据变更同步失败可能导致数据不一致
- 条件判断逻辑可能存在错误,导致元数据变更被错误地同步或遗漏
### 业务风险
- 定时任务执行时间配置不当,可能影响元数据同步的及时性
- 元数据变更同步失败,可能影响后续的数据同步操作
### 实施风险
- 开发人员对元数据变更同步逻辑不熟悉,可能需要一定的学习时间
- 定时任务的 Cron 表达式配置错误,可能导致任务不按预期执行
## 需求变更记录
| 日期 | 变更内容 | 变更原因 | 变更人 | 审核人 | 状态 |
|------|---------|---------|--------|--------|------|
| 2026-01-16 | 创建需求文档 | 用户提出元数据变更自动同步需求 | 用户 | 待审核 | 待审核 |
## 相关人员
- **需求提出人**: 用户 - 联系方式:待补充
- **需求负责人**: 待分配 - 联系方式:待补充
- **技术负责人**: 待分配 - 联系方式:待补充
- **测试负责人**: 待分配 - 联系方式:待补充
- **其他相关人员**: 待补充 - 联系方式:待补充
## 评审信息
- **评审日期**: 待定
- **评审人员**: 待定
- **评审结果**: 待定
- **评审意见**: 待定
- **修改建议**: 待定