## ADDED Requirements ### Requirement: 数据同步引擎支持增量同步模式 系统SHALL提供增量同步功能,通过时间窗口(`stDate`到`endDate`)从HIS系统拉取新增或更新的患者就诊数据。增量同步SHALL: - 使用上次同步时间作为`stDate`,当前时间作为`endDate` - 支持配置「回溯天数」(默认3天),即将`stDate`向前回溯N天,避免遗漏延迟更新数据 - 对于每条返回数据,使用`admID`作为唯一键进行UPSERT(存在则更新,不存在则插入) #### Scenario: 正常执行增量同步 - **WHEN** 同步引擎触发增量同步任务,上次同步时间为`2026-06-13 08:00`,回溯天数配置为1天 - **THEN** 引擎SHALL以`stDate: "2026-06-12", endDate: "2026-06-14"`调用HIS接口,并将返回的数据逐条UPSERT到`DRG_HIS_PatientAdm`表 --- #### Scenario: 增量同步时发现已存在的admID - **WHEN** HIS接口返回的数据中,某条记录的`admID: 5999886`已存在于`DRG_HIS_PatientAdm`表中 - **THEN** 引擎SHALL更新该记录的所有字段(除主键外),而不是插入新记录 --- #### Scenario: 增量同步成功完成后更新最后同步时间 - **WHEN** 增量同步任务成功完成(所有数据写入成功) - **THEN** 引擎SHALL将最后同步时间更新为本次同步的结束时间,并记录同步日志(状态:success) --- ### Requirement: 数据同步引擎支持全量同步模式 系统SHALL提供全量同步功能,用于初始化或历史数据补录。全量同步SHALL: - 接收起始日期和结束日期作为参数 - 按日期分段拉取数据(每段7天),避免单次请求数据量过大 - 清空或忽略已存在的数据(可选择覆盖或跳过) #### Scenario: 执行全量同步并覆盖已存在数据 - **WHEN** 用户触发全量同步,指定日期范围为`2026-01-01`到`2026-06-14` - **THEN** 引擎SHALL按7天为一段分批调用HIS接口,对返回的数据执行UPSERT操作,并记录同步日志 --- #### Scenario: 全量同步过程中某段日期接口调用失败 - **WHEN** 全量同步进行中,某一段日期的接口调用失败(如网络超时) - **THEN** 引擎SHALL记录该段日期为失败,继续处理下一段日期,最终同步状态标记为`partial`,并在日志中记录失败的日期段 --- ### Requirement: 数据同步引擎支持定时自动同步 系统SHALL支持配置定时同步任务,按照Cron表达式或固定间隔自动触发增量同步。 #### Scenario: 定时同步任务按配置间隔自动执行 - **WHEN** 系统配置定时同步间隔为30分钟,且同步服务处于运行状态 - **THEN** 系统SHALL每隔30分钟自动触发一次增量同步任务,无需人工干预 --- #### Scenario: 定时同步任务执行时前一次任务尚未完成 - **WHEN** 定时同步触发时,前一次同步任务仍在运行中 - **THEN** 系统SHALL跳过本次定时触发,避免并发同步导致数据冲突,并在日志中记录跳过事件 --- ### Requirement: 数据同步引擎记录同步日志 系统SHALL在每次同步任务执行后,向`DRG_HIS_SyncLog`表写入一条同步日志,包含: - 同步类型(full/incremental/manual) - 开始时间、结束时间 - 状态(success/failed/partial) - 总记录数、成功记录数、失败记录数 - 错误信息(如有) #### Scenario: 同步任务完成后写入日志 - **WHEN** 增量同步任务执行完成,成功写入50条数据,失败0条 - **THEN** 系统SHALL向`DRG_HIS_SyncLog`表写入一条日志,状态为`success`,`TotalCount=50, SuccessCount=50, FailedCount=0`