# 定时任务自动同步、插入和更新对象数据实现提示词 ## 输入引用 引用相关的 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