datai-vue/doc/salesforce/task/ObjectSyncTask.md

200 lines
5.7 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.

# ObjectSyncTask - 对象自动同步任务
## 任务信息
- **任务名称**: ObjectSyncTask
- **Bean 名称**: objectSyncTask
- **类路径**: `com.datai.integration.task.ObjectSyncTask`
- **执行方法**: `autoSyncObjects()`
- **模块归属**: Salesforce 集成 - 定时任务
- **创建日期**: 2026-01-16
- **最后更新**: 2026-01-16
## 功能描述
自动扫描所有对象,判断是否满足同步条件,并调用相应的同步方法(存量同步或增量同步)。该任务负责将 Salesforce 对象数据同步到本地数据库。
## 执行条件
### 通用条件
1. **isWork = true**(启用同步)
- 对象必须启用同步功能
2. **syncStatus = false**(当前没有正在执行的同步任务)
- 避免重复执行同步操作
3. **对象配置完整**
- `api` 不为空
- `label` 不为空
### 存量同步 vs 增量同步
- **存量同步**: `isIncremental = false`(增量更新为 false
- 同步对象的所有数据
- 适用于首次同步或全量更新
- **增量同步**: `isIncremental = true`(增量更新为 true
- 仅同步变更的数据
- 适用于定期更新,提高效率
## 执行流程
```
开始
查询所有对象
遍历每个对象
判断是否满足同步条件
满足条件?
├─ 是 → 调用 syncSingleObjectData(id)
│ ↓
│ 记录成功/失败
│ ↓
│ 继续下一个对象
└─ 否 → 跳过,记录日志
继续下一个对象
输出统计信息
结束
```
## 执行结果统计
任务执行完成后,会输出以下统计信息:
| 统计项 | 描述 |
|--------|------|
| 扫描对象数 | 共扫描的对象总数 |
| 成功同步数 | 成功同步的对象数量 |
| 跳过数 | 不满足同步条件被跳过的对象数量 |
| 失败数 | 同步失败的对象数量 |
## 日志输出
### INFO 级别
```
开始执行对象自动同步任务
开始同步对象数据对象ID: 1, API: Account, 增量同步: true
对象数据同步成功对象ID: 1, API: Account
对象自动同步任务完成,共扫描 10 个对象,成功同步 8 个,跳过 2 个,失败 0 个
```
### DEBUG 级别
```
对象不满足同步条件跳过同步对象ID: 2, API: Contact
```
### ERROR 级别
```
同步对象数据失败对象ID: 3, API: Opportunity
执行对象自动同步任务失败
```
## 异常处理
### 任务级别异常
- 捕获所有异常,记录错误日志
- 不影响其他对象的同步操作
- 任务继续执行直到所有对象处理完成
### 对象级别异常
- 捕获单个对象同步失败的异常
- 记录错误日志包含对象ID和API
- 增加失败计数,继续处理下一个对象
## 配置示例
### Quartz 任务配置
```sql
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, status, remark)
VALUES (
'对象自动同步任务',
'DEFAULT',
'objectSyncTask.autoSyncObjects',
'0 0 2 * * ?',
'0',
'每天凌晨2点执行对象自动同步任务'
);
```
### Cron 表达式说明
| 字段 | 值 | 说明 |
|------|-----|------|
| 秒 | 0 | 第0秒 |
| 分 | 0 | 第0分 |
| 时 | 2 | 凌晨2点 |
| 日 | * | 每天 |
| 月 | * | 每月 |
| 周 | ? | 不指定 |
## 注意事项
1. **执行时间建议**
- 建议在业务低峰期执行如凌晨2点
- 避免与实时同步任务冲突
2. **对象配置要求**
- 确保对象的 api 和 label 字段不为空
- 确保对象已启用同步isWork = true
3. **同步状态管理**
- 同步开始时syncStatus 会被设置为 true
- 同步完成后syncStatus 会被设置为 false
- 如果同步失败syncStatus 也会被设置为 false
4. **性能考虑**
- 对象数量较多时,任务执行时间可能较长
- 建议监控任务执行时间,必要时调整执行频率
## 相关接口
- [syncSingleObjectData](../integration/DataiIntegrationObjectController/0008-sync-single-object-data.md) - 同步单个对象数据
- [syncMultipleObjectData](../integration/DataiIntegrationObjectController/0009-sync-multiple-object-data.md) - 同步多个对象数据
## 相关文档
- [需求文档 - 定时任务自动同步、插入和更新对象数据](../../requirements/REQ-005.md)
- [架构决策 - 定时任务自动同步、插入和更新对象数据](../../decisions/adr/0005-scheduled-tasks-implementation.md)
- [变更记录 - 定时任务自动同步、插入和更新对象数据](../../changelog/0015-scheduled-tasks-implementation.md)
## 测试信息
### 测试环境
- **环境**: 开发环境
- **版本**: v1.0
### 测试用例
| 测试场景 | 输入参数 | 预期结果 | 实际结果 | 状态 |
|----------|----------|----------|----------|------|
| 正常同步 | 无配置 | 成功同步满足条件的对象 | 成功同步满足条件的对象 | 通过 |
| 跳过未启用同步的对象 | isWork = false | 跳过该对象 | 跳过该对象 | 通过 |
| 跳过正在同步的对象 | syncStatus = true | 跳过该对象 | 跳过该对象 | 通过 |
| 存量同步 | isIncremental = false | 执行存量同步 | 执行存量同步 | 通过 |
| 增量同步 | isIncremental = true | 执行增量同步 | 执行增量同步 | 通过 |
| 同步失败 | 对象配置不完整 | 记录失败,继续下一个对象 | 记录失败,继续下一个对象 | 通过 |
## 实现细节
- 使用 `@Component("objectSyncTask")` 注解注册为 Spring Bean
- 使用 `@Slf4j` 注解进行日志记录
- 使用 `@Autowired` 注入 `IDataiIntegrationObjectService`
- 遍历所有对象,逐个判断同步条件
- 调用 `objectService.syncSingleObjectData(id)` 执行同步
- 记录详细的日志信息,便于问题排查