datai/docs/archive/prompts/006-metadata-change-auto-sync.md

156 lines
7.5 KiB
Markdown
Raw Permalink 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.

# Prompt First - 元数据变更自动同步本地数据库实现
## 输入引用
引用相关的 docs 文档链接:
- [REQ-006](../requirements/REQ-006.md) - 元数据变更自动同步本地数据库需求
- [0006-metadata-change-auto-sync](../decisions/adr/0006-metadata-change-auto-sync.md) - 元数据变更自动同步本地数据库架构决策
## Context Maps
强制列出本次 Prompt 依赖的 Canvas 文件:
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: DataiIntegrationMetadataChangeController - 对象元数据变更控制器
- **相关节点**: DataiIntegrationMetadataChangeService - 对象元数据变更服务
- **相关节点**: DataiIntegrationObject - 对象同步控制实体
- **相关节点**: DataiIntegrationMetadataChange - 对象元数据变更实体
## 目标
实现元数据变更自动同步的定时任务类,自动扫描未同步的元数据变更记录,根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步,并调用 DataiIntegrationMetadataChangeService 的方法执行同步操作。
## 输出格式
**MetadataChangeAutoSyncTask.java** - 元数据变更自动同步任务
- 路径:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\MetadataChangeAutoSyncTask.java`
- 类名MetadataChangeAutoSyncTask
- Bean 名称metadataChangeAutoSyncTask
- 方法autoSyncMetadataChanges()
- 功能:扫描所有未同步的元数据变更记录,判断是否满足自动同步条件,调用相应的同步方法
## 约束
- 必须参考 ObjectSyncTask 的代码风格
- 必须使用 @Component 注解,指定 bean 名称
- 必须使用 @Slf4j 注解进行日志记录
- 必须使用 @Autowired 注入 DataiIntegrationMetadataChangeService 和 DataiIntegrationObjectService
- 必须定义公共方法作为定时任务的执行方法
- 必须在方法内部有 try-catch 异常处理
- 必须记录详细的日志信息
- 必须扫描所有未同步的元数据变更记录syncStatus = false 或 null
- 必须根据元数据变更的类型、操作类型、对象配置等信息判断是否应该自动同步
- 必须调用 DataiIntegrationMetadataChangeService 的方法,而不是 Controller 的方法
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用 Canvas 中定义的类名和方法名
- 必须遵循 Canvas 中定义的调用关系
- 必须参考 Canvas 中的流程图逻辑
- 必须参考 ObjectSyncTask 的代码风格
## Prompt Content 详细要求
### 1. MetadataChangeAutoSyncTask.java - 元数据变更自动同步任务
- 参考 ObjectSyncTask 的代码风格
- 使用 @Component("metadataChangeAutoSyncTask") 注解
- 使用 @Slf4j 注解
- 使用 @Autowired 注入 DataiIntegrationMetadataChangeService 和 DataiIntegrationObjectService
- 定义 public void autoSyncMetadataChanges() 方法
- 方法功能:
1. 查询所有未同步的元数据变更记录syncStatus = false 或 null
2. 遍历每个元数据变更记录,判断是否满足自动同步条件
3. 对于满足条件的元数据变更记录,调用相应的同步方法
4. 记录详细的日志信息
5. 使用 try-catch 处理异常
### 2. 元数据变更自动同步条件判断
- 通用条件:
- syncStatus = false 或 null未同步
- retryCount < 3重试次数小于3次
- 对象变更条件changeType = OBJECT
- 对象配置完整objectApiobjectLabel 不为空
- 对象启用同步DataiIntegrationObject.isWork = true
- 对象当前没有正在执行的同步任务DataiIntegrationObject.syncStatus = false
- 所有操作类型CREATEUPDATEDELETE都允许自动同步
- 字段变更条件changeType = FIELD
- 字段配置完整objectApifieldApifieldLabel 不为空
- 对象启用同步DataiIntegrationObject.isWork = true
- 对象当前没有正在执行的同步任务DataiIntegrationObject.syncStatus = false
- 所有操作类型CREATEUPDATEDELETE都允许自动同步
### 3. 同步方法调用
- 调用 DataiIntegrationMetadataChangeService.syncToLocalDatabase(Long id) 方法同步单个元数据变更
- 处理同步结果更新元数据变更记录的同步状态
- 使用 try-catch 处理异常单个元数据变更同步失败不影响其他元数据变更的同步
### 4. 同步失败处理
- 如果同步失败需要
- 更新元数据变更记录的 syncErrorMessage 字段记录失败原因
- 增加元数据变更记录的 retryCount 字段
- 更新元数据变更记录的 lastRetryTime 字段
- 记录详细的错误日志
### 5. 日志格式
- 开始执行时log.info("开始执行元数据变更自动同步任务")
- 查询未同步的元数据变更记录时log.info("查询到 {} 条未同步的元数据变更记录", count)
- 开始同步元数据变更时log.info("开始同步元数据变更变更ID: {}, 变更类型: {}, 操作类型: {}, 对象API: {}", id, changeType, operationType, objectApi)
- 元数据变更同步成功时log.info("元数据变更同步成功变更ID: {}", id)
- 元数据变更同步失败时log.error("元数据变更同步失败变更ID: {}", id, e)
- 元数据变更不满足同步条件时log.debug("元数据变更不满足同步条件跳过同步变更ID: {}, 变更类型: {}, 操作类型: {}", id, changeType, operationType)
- 任务完成时log.info("元数据变更自动同步任务完成共扫描 {} 条记录成功同步 {} 跳过 {} 失败 {} ", totalCount, syncCount, skipCount, failCount)
### 6. 条件判断方法
- 创建独立的条件判断方法
- isAutoSyncConditionMet(DataiIntegrationMetadataChange metadataChange, DataiIntegrationObject object)判断元数据变更是否满足自动同步条件
- 该方法需要查询对象配置DataiIntegrationObject根据对象配置判断是否满足自动同步条件
- 该方法需要详细列出判断条件确保条件判断逻辑准确
### 7. 异常处理
- 外层 try-catch 处理任务级别的异常
- 内层 try-catch 处理单个元数据变更级别的异常
- 单个元数据变更同步失败不影响其他元数据变更的同步
- 记录详细的错误日志便于问题排查
### 8. 性能考虑
- 可以考虑批量处理减少数据库查询次数
- 可以考虑异步处理提高执行效率
- 可以考虑缓存对象配置减少重复查询
## 验收标准
- 功能完整性定时任务类能够正确实现
- 代码正确性代码能够编译通过无语法错误
- 代码风格符合 ObjectSyncTask 的代码风格
- 日志完整性每个任务都有详细的日志记录
- 异常处理每个任务都有完善的异常处理
- 条件判断准确性能够准确判断元数据变更是否满足自动同步条件
## 风险
- 输出质量风险生成的代码可能存在逻辑错误
- 技术实现风险条件判断逻辑可能存在错误导致元数据变更被错误地同步或遗漏
- 时间成本风险生成代码可能需要一定时间
- 其他潜在风险对象配置查询可能存在性能问题
## 使用记录
| 日期 | 使用场景 | 输入参数 | 输出结果 | 反馈 | 改进措施 |
|------|---------|---------|---------|------|----------|
| 2026-01-16 | 实现元数据变更自动同步本地数据库 | REQ-006, 0006-metadata-change-auto-sync.md | MetadataChangeAutoSyncTask.java Java 代码 | 待反馈 | 待改进 |