datai/datai-scenes/datai-scene-salesforce/docs/sessions/20260116-scheduled-tasks-implementation.md

212 lines
8.1 KiB
Markdown
Raw Normal View History

feat: 添加定时任务功能和文档 - 新增 4 个定时任务类: - ObjectSyncTask: 对象自动同步任务 - ObjectInsertTask: 对象自动插入任务 - ObjectUpdateTask: 对象自动更新任务 - MetadataChangeAutoSyncTask: 元数据变更自动同步任务 - 新增 2 个多对象操作接口: - insertMultipleObjectDataToTarget: 批量插入对象数据到目标系统 - updateMultipleObjectDataToTarget: 批量更新对象数据到目标系统 - 新增完整的定时任务文档: - task/index.md: 定时任务文档索引 - ObjectSyncTask.md: 对象自动同步任务文档 - ObjectInsertTask.md: 对象自动插入任务文档 - ObjectUpdateTask.md: 对象自动更新任务文档 - MetadataChangeAutoSyncTask.md: 元数据变更自动同步任务文档 - RateLimitResetTask.md: 每日限流重置任务文档 - 新增 API 文档索引:api-docs/index.md - 更新唯一真源文档中心:docs/index.md - 新增完整的项目文档: - REQ-005.md: 定时任务自动同步、插入和更新对象数据需求 - REQ-006.md: 元数据变更自动同步本地数据库需求 - 0005-scheduled-tasks-implementation.md: 定时任务架构决策 - 0006-metadata-change-auto-sync.md: 元数据变更自动同步架构决策 - 005-scheduled-tasks-implementation.md: 定时任务实现提示词 - 006-metadata-change-auto-sync.md: 元数据变更自动同步实现提示词 - 20260116-scheduled-tasks-implementation.md: 定时任务实现会话记录 - 20260116-metadata-change-auto-sync.md: 元数据变更自动同步实现会话记录 - 20260116-scheduled-tasks-implementation-retro.md: 定时任务实现复盘 - 20260116-metadata-change-auto-sync-retro.md: 元数据变更自动同步实现复盘 - 0015-scheduled-tasks-implementation.md: 定时任务变更记录 - 0016-metadata-change-auto-sync.md: 元数据变更自动同步变更记录 - 更新 CHANGELOG.md 和 README.md
2026-01-16 16:38:35 +08:00
# 会话记录:定时任务自动同步、插入和更新对象数据
## 元数据 (Metadata)
- **会话编号**: SESSION-20260116-005
- **会话标题**: 定时任务自动同步、插入和更新对象数据实现
- **触发需求**: [REQ-005](../requirements/REQ-005.md)
- **创建日期**: 2026-01-16
- **开始时间**: 2026-01-16 14:00:00
- **结束时间**: 2026-01-16 15:00:00
- **执行人**: AI Assistant
- **状态**: Completed
## 触发原因
用户需要实现定时任务自动同步、插入和更新对象数据功能,具体需求详见 [REQ-005](../requirements/REQ-005.md)。
## 使用提示词
- [005-scheduled-tasks-implementation.md](../prompts/005-scheduled-tasks-implementation.md) - 定时任务自动同步、插入和更新对象数据实现提示词
## 架构决策
- [0005-scheduled-tasks-implementation.md](../decisions/adr/0005-scheduled-tasks-implementation.md) - 定时任务自动同步、插入和更新对象数据架构决策
## 执行过程
### 现状
当前项目中已经存在 datai-quartz 模块,提供了完整的定时任务管理功能。项目中已经有 RateLimitResetTask 这样的定时任务实现,可以作为参考。
需要实现的功能:
1. 在 task 目录下创建三个定时任务类
2. 参考 RateLimitResetTask 的写法
3. 实现对象自动同步任务
4. 实现对象自动插入任务
5. 实现对象自动更新任务
### 目标
生成三个定时任务类的完整代码:
1. ObjectSyncTask.java - 对象自动同步任务
2. ObjectInsertTask.java - 对象自动插入任务
3. ObjectUpdateTask.java - 对象自动更新任务
### 执行步骤
#### 步骤 1查看 RateLimitResetTask 参考实现
- 查看 RateLimitResetTask 的代码风格和实现方式
- 理解注解的使用方式(@Component、@Slf4j、@Autowired
- 理解日志记录的方式
#### 步骤 2查看 DataiIntegrationObject 实体类
- 查看对象的字段定义
- 理解判断条件的字段isWork、syncStatus、isIncremental、isCreateable、isUpdateable、totalRows 等)
#### 步骤 3查看 IDataiIntegrationObjectService 接口
- 查看可用的方法
- 理解方法参数和返回值
#### 步骤 4生成 ObjectSyncTask.java
- 参考 RateLimitResetTask 的代码风格
- 实现对象自动同步逻辑
- 判断是否满足同步条件
- 调用相应的同步方法
#### 步骤 5生成 ObjectInsertTask.java
- 参考 RateLimitResetTask 的代码风格
- 实现对象自动插入逻辑
- 判断是否满足插入条件
- 调用相应的插入方法
#### 步骤 6生成 ObjectUpdateTask.java
- 参考 RateLimitResetTask 的代码风格
- 实现对象自动更新逻辑
- 判断是否满足更新条件
- 调用相应的更新方法
#### 步骤 7验证代码
- 检查代码语法是否正确
- 检查代码风格是否符合要求
- 检查日志记录是否完整
- 检查异常处理是否完善
## 执行结果
### 代码变更
- 新增文件:
- `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectSyncTask.java`
- `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectInsertTask.java`
- `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectUpdateTask.java`
### 代码摘要
#### ObjectSyncTask.java
- 类名ObjectSyncTask
- Bean 名称objectSyncTask
- 方法autoSyncObjects()
- 功能:扫描所有对象,判断是否满足同步条件,调用相应的同步方法
- 同步条件:
- isWork = true启用同步
- syncStatus = false当前没有正在执行的同步任务
- 对象配置完整api、label 等关键字段不为空)
- 存量同步 vs 增量同步:
- 存量同步isIncremental = false增量更新为 false
- 增量同步isIncremental = true增量更新为 true
#### ObjectInsertTask.java
- 类名ObjectInsertTask
- Bean 名称objectInsertTask
- 方法autoInsertObjects() / autoInsertObjects(String targetOrgType)
- 功能:扫描所有对象,判断是否满足插入条件,调用相应的插入方法
- 插入条件:
- isCreateable = true可创建
- totalRows > 0对象有本地数据
- 对象配置完整api、label 等关键字段不为空)
- 默认目标ORG类型Sandbox
#### ObjectUpdateTask.java
- 类名ObjectUpdateTask
- Bean 名称objectUpdateTask
- 方法autoUpdateObjects() / autoUpdateObjects(String targetOrgType)
- 功能:扫描所有对象,判断是否满足更新条件,调用相应的更新方法
- 更新条件:
- isUpdateable = true可更新
- totalRows > 0对象有本地数据
- 对象配置完整api、label 等关键字段不为空)
- 默认目标ORG类型Sandbox
### 代码特点
1. **参考 RateLimitResetTask 的代码风格**
- 使用 @Component 注解,指定 bean 名称
- 使用 @Slf4j 注解进行日志记录
- 使用 @Autowired 注入 IDataiIntegrationObjectService
- 定义公共方法作为定时任务的执行方法
- 方法内部有 try-catch 异常处理
- 记录详细的日志信息
2. **完善的日志记录**
- 开始执行时记录日志
- 每个对象操作前记录日志
- 每个对象操作成功后记录日志
- 每个对象操作失败时记录错误日志
- 任务完成时记录统计信息
3. **完善的异常处理**
- 外层 try-catch 处理任务级别的异常
- 内层 try-catch 处理单个对象级别的异常
- 单个对象操作失败不影响其他对象的处理
4. **灵活的参数设计**
- ObjectInsertTask 和 ObjectUpdateTask 提供了两个方法:
- autoInsertObjects() / autoUpdateObjects()使用默认目标ORG类型
- autoInsertObjects(String targetOrgType) / autoUpdateObjects(String targetOrgType)自定义目标ORG类型
## AI 质疑
### 质疑 1targetOrgType 参数的处理
- **问题**:在 ObjectInsertTask 和 ObjectUpdateTask 中,需要调用 insertObjectDataToTarget 和 updateObjectDataToTarget 方法,这两个方法需要 targetOrgType 参数。如何获取 targetOrgType
- **解决方案**:提供了两个方法:
- autoInsertObjects() / autoUpdateObjects():使用默认值 "Sandbox"
- autoInsertObjects(String targetOrgType) / autoUpdateObjects(String targetOrgType):允许自定义 targetOrgType
- 这样既提供了默认值,又允许灵活配置
### 质疑 2定时任务的执行时间
- **问题**:定时任务的执行时间应该如何配置?
- **解决方案**:通过 datai-quartz 模块的 SysJob 实体配置,使用 Cron 表达式。可以在 SysJobController 中配置定时任务的执行时间、启用状态等。
### 质疑 3并发执行的问题
- **问题**:如果多个对象同时满足条件,是否需要并发执行?
- **解决方案**:采用串行执行的方式,实现简单,避免并发问题。单个对象操作失败不影响其他对象的处理。
## 替代方案
### 方案 1串行执行
- 优点:简单易实现,避免并发问题
- 缺点:执行时间较长
### 方案 2并发执行
- 优点:执行时间短,性能高
- 缺点:需要处理并发问题,实现复杂
### 方案 3批量执行
- 优点:减少数据库查询次数,性能适中
- 缺点:实现复杂度中等
## 最终方案
采用串行执行的方式,实现简单,避免并发问题。
## 复现步骤
1. 查看 RateLimitResetTask 的代码实现
2. 查看 DataiIntegrationObject 实体类的字段定义
3. 查看 IDataiIntegrationObjectService 接口的方法定义
4. 生成 ObjectSyncTask.java
5. 生成 ObjectInsertTask.java
6. 生成 ObjectUpdateTask.java
7. 验证代码
## Commit Hash
待定
## 相关文档
- [REQ-005](../requirements/REQ-005.md) - 定时任务自动同步、插入和更新对象数据需求
- [0005-scheduled-tasks-implementation.md](../decisions/adr/0005-scheduled-tasks-implementation.md) - 定时任务自动同步、插入和更新对象数据架构决策
- [005-scheduled-tasks-implementation.md](../prompts/005-scheduled-tasks-implementation.md) - 定时任务自动同步、插入和更新对象数据实现提示词