proposal.md 11 KB

方案:增加HIS数据同步任务管理功能

概述

为HIS数据模块增加同步任务管理前端菜单,支持:

  1. 手动同步 - 立即执行增量/全量同步
  2. 自动同步配置 - 配置定时任务(每天0点、每小时等)
  3. 同步监控 - 查看同步状态、日志、执行历史

现有代码分析

后端已有能力

  • SyncEngine.cls 已实现:

    • IncrementalSync - 增量同步(回溯N天)
    • FullSync - 全量同步(指定日期范围)
    • GetLastSyncTime / UpdateLastSyncTime - 同步时间管理
    • SaveSyncLog - 同步日志保存
  • Interface.cls 已有接口:

    • 02010067 - 获取HIS住院患者数据
    • 02010075 - 查询已同步患者
    • 02010076 - 查询患者详情
    • 02010077 - 查询同步日志

前端已有页面

  • DataSync.tsx - 数据同步监控(基础的手动同步)
  • SyncedPatients.tsx - 已同步患者查询
  • SyncLog.tsx - 同步日志查询

新增/修改内容

1. 后端新增接口服务

新增接口类方法 (Interface.cls)

接口码 方法名 说明
02010078 ExecuteSyncTask 手动执行同步任务(增量/全量)
02010079 GetSyncConfig 查询同步配置
02010080 SaveSyncConfig 保存同步配置(频率、类型等)
02010081 GetSyncStatus 查询同步状态(最后同步时间、是否正在同步)

新增服务类 (SyncTaskService.cls)

Class src.DRG.HISData.SyncTaskService Extends (%RegisteredObject, %XML.Adaptor)
{
    /// 执行同步任务(接口02010078)
    /// pParams: {"syncType":"incremental|full", "startDate":"", "endDate":""}
    ClassMethod ExecuteSyncTask(jsonObj) As %Library.DynamicObject
    
    /// 查询同步配置(接口02010079)
    ClassMethod GetSyncConfig(jsonObj) As %Library.DynamicObject
    
    /// 保存同步配置(接口02010080)
    ClassMethod SaveSyncConfig(jsonObj) As %Library.DynamicObject
    
    /// 查询同步状态(接口02010081)
    ClassMethod GetSyncStatus(jsonObj) As %Library.DynamicObject
}

同步配置表 (BSHISSyncConfig)

Class User.BSHISSyncConfig Extends (%Persistent)
{
    Property HospID As %String;          // 医院ID
    Property SyncType As %String;      // 同步类型:incremental/full
    Property Frequency As %String;     // 频率:manual/hourly/daily/weekly
    Property ScheduledTime As %String; // 定时时间(daily: "00:00", weekly: "1,00:00")
    Property LookbackDays As %Integer; // 增量同步回溯天数
    Property Enabled As %Boolean;     // 是否启用
    Property LastSyncTime As %TimeStamp; // 最后同步时间
    Property Status As %String;      // 状态:idle/running/error
}

2. 前端新增/修改页面

修改 DataSync.tsx - 数据同步监控页面

现有功能:手动选择日期范围,调用02010067同步数据

扩展功能:

  1. 同步类型选择:增量同步 / 全量同步
  2. 增量同步:自动计算回溯日期
  3. 全量同步:选择日期范围
  4. 显示当前同步状态(正在同步/空闲/错误)
  5. 显示最后同步时间
  6. 同步进度显示

新增 SyncTaskConfig.tsx - 同步任务配置页面

功能:

  1. 同步类型配置:
    • 增量同步:配置回溯天数(默认3天)
    • 全量同步:配置日期范围(或手动指定)
  2. 同步频率配置:
    • 手动执行
    • 每小时
    • 每天0点
    • 每周(指定星期几)
    • 自定义Cron表达式
  3. 启用/禁用同步任务
  4. 保存配置

修改 SyncLog.tsx - 同步日志查询(已存在,无需修改)

3. 菜单配置

在 App.tsx 的"HIS数据"菜单下添加:

HIS数据
├── 数据同步监控 (已有)
├── 同步任务配置 (新增)
├── 已同步患者查询 (已有)
└── 同步日志查询 (已有)

实现步骤

步骤1:创建同步配置表

  • 创建 User.BSHISSyncConfig 类
  • 添加必要字段和索引
  • 编译表类

步骤2:开发后端服务类

  • 创建 src.DRG.HISData.SyncTaskService 类
  • 实现 ExecuteSyncTask 方法(调用SyncEngine)
  • 实现 GetSyncConfig / SaveSyncConfig 方法
  • 实现 GetSyncStatus 方法

步骤3:添加接口方法

  • 修改 src.DRG.HISData.Interface 类
  • 添加4个新接口方法(02010078-02010081)

步骤4:开发前端页面

  • 修改 DataSync.tsx 扩展同步功能
  • 新增 SyncTaskConfig.tsx 同步任务配置页面
  • 更新API定义 hisData.ts

步骤5:配置菜单和路由

  • 修改 App.tsx 添加菜单项
  • 添加路由配置

步骤6:编译和测试

  • 编译后端类
  • 测试手动同步功能
  • 测试同步配置保存
  • 测试同步状态查询

文件清单

新增文件

  1. src/src/User/BSHISSyncConfig.cls - 同步配置表类
  2. src/src/DRG/HISData/SyncTaskService.cls - 同步任务服务类
  3. frontend/src/pages/HIS/SyncTaskConfig.tsx - 同步任务配置页面
  4. frontend/src/api/hisData.ts - 添加新接口API定义(修改)

修改文件

  1. src/src/DRG/HISData/Interface.cls - 添加4个新接口方法
  2. frontend/src/pages/HIS/DataSync.tsx - 扩展同步功能
  3. frontend/src/App.tsx - 添加菜单和路由

接口设计

02010078 执行同步任务

请求:

{
    "code": "02010078",
    "params": [{
        "syncType": "incremental",
        "lookbackDays": 3,
        "startDate": "",
        "endDate": ""
    }],
    "session": [{"hospID": "13"}]
}

响应:

{
    "errorCode": "0",
    "errorMessage": "同步完成",
    "result": {
        "successCount": 10,
        "failedCount": 0,
        "totalCount": 10,
        "startTime": "2026-06-15 00:00:00",
        "endTime": "2026-06-16 11:58:00"
    }
}

02010079 查询同步配置

请求:

{
    "code": "02010079",
    "params": [{"hospID": "13"}],
    "session": [{"hospID": "13"}]
}

响应:

{
    "errorCode": "0",
    "errorMessage": "",
    "result": {
        "id": "1",
        "hospID": "13",
        "syncType": "incremental",
        "frequency": "daily",
        "scheduledTime": "00:00",
        "lookbackDays": 3,
        "enabled": true
    }
}

02010080 保存同步配置

请求:

{
    "code": "02010080",
    "params": [{
        "id": "",
        "syncType": "incremental",
        "frequency": "daily",
        "scheduledTime": "00:00",
        "lookbackDays": 3,
        "enabled": true
    }],
    "session": [{"userID": "158", "hospID": "13"}]
}

02010081 查询同步状态

请求:

{
    "code": "02010081",
    "params": [{"hospID": "13"}],
    "session": [{"hospID": "13"}]
}

响应:

{
    "errorCode": "0",
    "errorMessage": "",
    "result": {
        "status": "idle",
        "lastSyncTime": "2026-06-15 00:00:00",
        "lastSyncStatus": "success",
        "nextSyncTime": "2026-06-17 00:00:00"
    }
}

前端页面设计

DataSync.tsx(扩展后)

布局:

┌─────────────────────────────────────────────────────┐
│ 数据同步监控                                   │
├─────────────────────────────────────────────────────┤
│ [同步类型] 增量同步 ○  全量同步 ○          │
│ [增量选项] 回溯天数:[3] 天                      │
│ [全量选项] 开始日期:____  结束日期:____     │
│ [操作按钮] [立即同步] [刷新状态]               │
│ [状态显示] 最后同步:2026-06-15 00:00:00    │
│            当前状态:空闲                         │
│ [进度显示] █████████████░░ 80%                 │
│ [结果表格] 患者列表(调用02010067返回)      │
└─────────────────────────────────────────────────────┘

SyncTaskConfig.tsx(新增)

布局:

┌─────────────────────────────────────────────────────┐
│ 同步任务配置                                   │
├─────────────────────────────────────────────────────┤
│ 同步类型配置:                                 │
│   □ 增量同步                                   │
│     回溯天数:[3] 天                          │
│   □ 全量同步                                   │
│     开始日期:____  结束日期:____            │
│                                                  │
│ 同步频率配置:                                 │
│   ○ 手动执行                                   │
│   ○ 每小时                                     │
│   ○ 每天  [00:00 ▼]                         │
│   ○ 每周  [周一 ▼] [00:00 ▼]              │
│   ○ 自定义Cron:[输入框]                     │
│                                                  │
│ □ 启用同步任务                                │
│                                                  │
│ [保存配置] [重置]                            │
│                                                  │
│ 当前配置:                                    │
│   类型:增量同步 | 频率:每天0点 | 状态:已启用│
└─────────────────────────────────────────────────────┘

数据库设计

BS_HIS_SyncConfig 表

字段名 类型 说明
ID %String 主键
HospID %String 医院ID
SyncType %String 同步类型:incremental/full
Frequency %String 频率:manual/hourly/daily/weekly/custom
ScheduledTime %String 定时时间
LookbackDays %Integer 增量同步回溯天数
StartDate %Date 全量同步开始日期
EndDate %Date 全量同步结束日期
Enabled %Boolean 是否启用
LastSyncTime %TimeStamp 最后同步时间
Status %String 状态:idle/running/error
ErrorMessage %String 错误信息
CreateUserDr %String 创建用户
CreateDate %Date 创建日期
UpdateUserDr %String 更新用户
UpdateDate %Date 更新日期

后续扩展

  1. 定时任务执行器 - 使用IRIS Task Manager或Cron执行定时同步
  2. 同步通知 - 同步失败时发送通知
  3. 同步统计 - 统计同步成功率、数据量等
  4. 多医院支持 - 支持为不同医院配置不同同步策略

风险与注意事项

  1. 并发控制 - 防止同一医院同时执行多个同步任务
  2. 性能影响 - 全量同步可能大量调用HIS接口,需考虑限流
  3. 数据一致性 - 同步失败时的回滚策略
  4. 权限控制 - 同步配置需要管理员权限