datai/docs/archive/prompts/005-scheduled-tasks-implementation.md

192 lines
8.4 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.

# 定时任务自动同步、插入和更新对象数据实现提示词
## 输入引用
引用相关的 docs 文档链接:
- [REQ-005](../requirements/REQ-005.md) - 定时任务自动同步、插入和更新对象数据需求
- [0005-scheduled-tasks-implementation.md](../decisions/adr/0005-scheduled-tasks-implementation.md) - 定时任务自动同步、插入和更新对象数据架构决策
- [DataiIntegrationObjectController](../../datai-salesforce-integration/src/main/java/com/datai/integration/controller/DataiIntegrationObjectController.java) - 对象同步控制接口
- [DataiIntegrationObject](../../datai-salesforce-integration/src/main/java/com/datai/integration/model/domain/DataiIntegrationObject.java) - 对象同步控制实体
- [RateLimitResetTask](../../datai-salesforce-integration/src/main/java/com/datai/integration/task/RateLimitResetTask.java) - 每日限流重置任务(参考实现)
## Context Maps
强制列出本次 Prompt 依赖的 Canvas 文件:
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: DataiIntegrationObjectController - 对象同步控制接口
- **相关节点**: DataiIntegrationObjectService - 对象同步服务
## 目标
实现定时任务自动同步、插入和更新对象数据功能,包括:
1. 在 task 目录下创建三个定时任务类
2. 参考 RateLimitResetTask 的写法,使用 @Component、@Slf4j、@Autowired 注解
3. 实现对象自动同步任务,扫描满足条件的对象并调用同步方法
4. 实现对象自动插入任务,扫描满足条件的对象并调用插入方法
5. 实现对象自动更新任务,扫描满足条件的对象并调用更新方法
6. 每个任务都有详细的日志记录和异常处理
## 输出格式
输出以下 Java 代码文件:
1. **ObjectSyncTask.java** - 对象自动同步任务
- 路径:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectSyncTask.java`
- 类名ObjectSyncTask
- Bean 名称objectSyncTask
- 方法autoSyncObjects()
- 功能:扫描所有对象,判断是否满足同步条件,调用相应的同步方法
2. **ObjectInsertTask.java** - 对象自动插入任务
- 路径:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectInsertTask.java`
- 类名ObjectInsertTask
- Bean 名称objectInsertTask
- 方法autoInsertObjects()
- 功能:扫描所有对象,判断是否满足插入条件,调用相应的插入方法
3. **ObjectUpdateTask.java** - 对象自动更新任务
- 路径:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-integration\src\main\java\com\datai\integration\task\ObjectUpdateTask.java`
- 类名ObjectUpdateTask
- Bean 名称objectUpdateTask
- 方法autoUpdateObjects()
- 功能:扫描所有对象,判断是否满足更新条件,调用相应的更新方法
## 约束
列出使用此提示词时的约束条件,例如:
- 必须参考 RateLimitResetTask 的写法
- 必须使用 @Component 注解,指定 bean 名称
- 必须使用 @Slf4j 注解进行日志记录
- 必须使用 @Autowired 注入 IDataiIntegrationObjectService
- 必须定义公共方法作为定时任务的执行方法
- 必须在方法内部有 try-catch 异常处理
- 必须记录详细的日志信息
- 必须扫描所有对象,判断是否满足执行条件
- 必须根据对象的字段判断执行存量同步还是增量同步
- 必须调用 IDataiIntegrationObjectService 的方法,而不是 Controller 的方法
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用 Canvas 中定义的类名和方法名
- 必须遵循 Canvas 中定义的调用关系
- 必须参考 Canvas 中的流程图逻辑
- 必须参考 RateLimitResetTask 的代码风格
- 必须调用 IDataiIntegrationObjectService 的方法,而不是 Controller 的方法
- 必须通过扫描对象字段来判断是否满足条件
## Prompt Content
请根据以下要求生成三个定时任务类的代码:
### 1. ObjectSyncTask.java - 对象自动同步任务
**要求**
- 参考 RateLimitResetTask 的代码风格
- 使用 @Component("objectSyncTask") 注解
- 使用 @Slf4j 注解
- 使用 @Autowired 注入 IDataiIntegrationObjectService
- 定义 public void autoSyncObjects() 方法
- 方法功能:
1. 查询所有对象
2. 遍历每个对象,判断是否满足同步条件:
- isWork = true启用同步
- syncStatus = false当前没有正在执行的同步任务
- 对象配置完整api、label 等关键字段不为空)
3. 对于满足条件的对象:
- 如果 isIncremental = false调用 syncSingleObjectData(id) 执行存量同步
- 如果 isIncremental = true调用 syncSingleObjectData(id) 执行增量同步
4. 记录详细的日志信息
5. 使用 try-catch 处理异常
### 2. ObjectInsertTask.java - 对象自动插入任务
**要求**
- 参考 RateLimitResetTask 的代码风格
- 使用 @Component("objectInsertTask") 注解
- 使用 @Slf4j 注解
- 使用 @Autowired 注入 IDataiIntegrationObjectService
- 定义 public void autoInsertObjects() 方法
- 方法功能:
1. 查询所有对象
2. 遍历每个对象,判断是否满足插入条件:
- isCreateable = true可创建
- totalRows > 0对象有本地数据
- 对象配置完整api、label 等关键字段不为空)
3. 对于满足条件的对象:
- 调用 insertObjectDataToTarget(id, targetOrgType) 方法执行插入操作
- targetOrgType 可以从配置中读取或使用默认值
4. 记录详细的日志信息
5. 使用 try-catch 处理异常
### 3. ObjectUpdateTask.java - 对象自动更新任务
**要求**
- 参考 RateLimitResetTask 的代码风格
- 使用 @Component("objectUpdateTask") 注解
- 使用 @Slf4j 注解
- 使用 @Autowired 注入 IDataiIntegrationObjectService
- 定义 public void autoUpdateObjects() 方法
- 方法功能:
1. 查询所有对象
2. 遍历每个对象,判断是否满足更新条件:
- isUpdateable = true可更新
- totalRows > 0对象有本地数据
- 对象配置完整api、label 等关键字段不为空)
3. 对于满足条件的对象:
- 调用 updateObjectDataToTarget(id, targetOrgType) 方法执行更新操作
- targetOrgType 可以从配置中读取或使用默认值
4. 记录详细的日志信息
5. 使用 try-catch 处理异常
### 通用要求
1. 日志格式:
- 开始执行时log.info("开始执行对象自动同步任务")
- 执行成功时log.info("对象自动同步任务完成,共处理 {} 个对象", count)
- 执行失败时log.error("执行对象自动同步任务失败", e)
2. 异常处理:
- 每个对象的操作都应该有独立的 try-catch
- 单个对象操作失败不应该影响其他对象的处理
- 记录失败的对象ID和错误信息
3. 性能考虑:
- 可以考虑批量处理,减少数据库查询次数
- 可以考虑异步处理,提高执行效率
## 验收标准
定义验证输出质量的具体标准,例如:
- 功能完整性:三个定时任务类都能正确实现
- 代码正确性:代码能够编译通过,无语法错误
- 代码风格:符合 RateLimitResetTask 的代码风格
- 日志完整性:每个任务都有详细的日志记录
- 异常处理:每个任务都有完善的异常处理
- 条件判断准确性:能够准确判断对象是否满足执行条件
## 风险
识别使用此提示词可能带来的风险,例如:
- 输出质量风险:生成的代码可能存在逻辑错误
- 技术实现风险:定时任务的执行时间可能与业务高峰期冲突
- 时间成本风险:生成代码可能需要一定时间
- 其他潜在风险:条件判断逻辑可能存在错误
## 使用记录
| 日期 | 使用场景 | 输入参数 | 输出结果 | 反馈 | 改进措施 |
|------|---------|---------|---------|------|----------|
| 2026-01-16 | 实现定时任务自动同步、插入和更新对象数据 | REQ-005, 0005-scheduled-tasks-implementation.md | 三个定时任务类的 Java 代码 | 待反馈 | 待改进 |
## 版本
- **版本号**: v1.0.0
- **创建日期**: 2026-01-16
- **创建人**: 用户
- **最后更新**: 2026-01-16