proposal_updated.md 9.7 KB

方案:增加HIS数据同步任务管理功能(更新版)

修改说明

将所有 hospID 改为 hospCode,用于关联和记录同步HIS所属的医院信息, 通过 hospCode 与 CB_Hospital 表中的 Code 字段关联。

概述

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

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

数据库设计

1. BS_HIS_SyncConfig 表(新增)

字段名 类型 说明
ID %String 主键
HospCode %String 医院代码(关联CB_Hospital.Code)
SyncType %String 同步类型:incremental/full
Frequency %String 频率:manual/hourly/daily/weekly
ScheduledTime %String 定时时间(daily: "00:00", weekly: "1,00:00")
LookbackDays %Integer 增量同步回溯天数
Enabled %Boolean 是否启用
LastSyncTime %TimeStamp 最后同步时间
Status %String 状态:idle/running/error
ErrorMessage %String 错误信息
CreateUserDr %String 创建用户
CreateDate %Date 创建日期
UpdateUserDr %String 更新用户
UpdateDate %Date 更新日期

索引:

  • HospCodeIndex On HospCode As Exact
  • EnabledIndex On Enabled As Exact

2. BS_HIS_PatAdm 表(修改)

已添加字段:

  • FixmedinsCode - 医疗机构代码
  • FixmedinsName - 医疗机构名称

3. 关联说明

所有同步配置、日志、患者数据均通过 HospCode 关联所属医院:

  • BS_HIS_SyncConfig.HospCode → CB_Hospital.Code
  • BS_HIS_PatAdm.FixmedinsCode → CB_Hospital.Code

后端新增接口服务

Interface.cls 新增接口方法

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

新增服务类 (SyncTaskService.cls)

Class src.DRG.HISData.SyncTaskService Extends (%RegisteredObject, %XML.Adaptor)
{
    /// 执行同步任务(接口02010078)
    ClassMethod ExecuteSyncTask(jsonObj) As %Library.DynamicObject
    {
        // 从jsonObj.params获取:syncType, hospCode, lookbackDays, startDate, endDate
        // 调用 SyncEngine.IncrementalSync 或 FullSync
    }
    
    /// 查询同步配置(接口02010079)
    ClassMethod GetSyncConfig(jsonObj) As %Library.DynamicObject
    {
        // 从jsonObj.params获取:hospCode
        // 查询 BS_HIS_SyncConfig 表
    }
    
    /// 保存同步配置(接口02010080)
    ClassMethod SaveSyncConfig(jsonObj) As %Library.DynamicObject
    {
        // 从jsonObj.params获取配置信息
        // 保存到 BS_HIS_SyncConfig 表
    }
    
    /// 查询同步状态(接口02010081)
    ClassMethod GetSyncStatus(jsonObj) As %Library.DynamicObject
    {
        // 从jsonObj.params获取:hospCode
        // 查询最后同步时间、状态等
    }
}

前端新增/修改页面

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

扩展功能:

  1. 同步类型选择:增量同步 / 全量同步
  2. 增量同步:自动计算回溯日期(使用 hospCode 获取配置)
  3. 全量同步:选择日期范围
  4. 显示当前同步状态(正在同步/空闲/错误)
  5. 显示最后同步时间
  6. 同步进度显示
  7. 医院选择:下拉选择医院(从CB_Hospital表查询)

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

功能:

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

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

4. 修改 SyncedPatients.tsx - 已同步患者查询(已存在,添加医院筛选)

菜单配置

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

HIS数据
├── 数据同步监控 (已有,扩展功能)
├── 同步任务配置 (新增)
├── 已同步患者查询 (已有,添加医院筛选)
└── 同步日志查询 (已有)

实现步骤

步骤1:创建同步配置表

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

步骤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
  • 修改 SyncedPatients.tsx 添加医院筛选

步骤5:配置菜单和路由

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

步骤6:编译和测试

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

接口设计(更新后)

02010078 执行同步任务

请求:

{
    "code": "02010078",
    "params": [{
        "hospCode": "H34010400768",
        "syncType": "incremental",
        "lookbackDays": 3,
        "startDate": "",
        "endDate": ""
    }],
    "session": [{"userID": "158", "hospCode": "H34010400768"}]
}

02010079 查询同步配置

请求:

{
    "code": "02010079",
    "params": [{"hospCode": "H34010400768"}],
    "session": [{"hospCode": "H34010400768"}]
}

响应:

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

02010080 保存同步配置

请求:

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

02010081 查询同步状态

请求:

{
    "code": "02010081",
    "params": [{"hospCode": "H34010400768"}],
    "session": [{"hospCode": "H34010400768"}]
}

响应:

{
    "errorCode": "0",
    "errorMessage": "",
    "result": {
        "status": "idle",
        "lastSyncTime": "2026-06-15 00:00:00",
        "lastSyncStatus": "success",
        "nextSyncTime": "2026-06-17 00:00:00",
        "hospCode": "H34010400768",
        "hospName": "合肥普瑞眼科医院"
    }
}

关键修改点总结

  1. 所有 hospID → hospCode

    • 数据库表字段:HospID → HospCode
    • 接口参数:hospID → hospCode
    • 前端参数:hospID → hospCode
  2. 关联 CB_Hospital 表

    • 使用 HospCode 关联 CB_Hospital.Code
    • 查询医院信息时同时获取医院名称
  3. 前端医院选择

    • 添加医院下拉选择框
    • 从 CB_Hospital 表查询可用医院列表
    • 选择医院后,hospCode 自动填充

文件清单

新增文件

  1. src/src/User/BSHISSyncConfig.cls - 同步配置表类
  2. src/src/DRG/HISData/SyncTaskService.cls - 同步任务服务类
  3. frontend/src/pages/HIS/SyncTaskConfig.tsx - 同步任务配置页面

修改文件

  1. src/src/DRG/HISData/Interface.cls - 添加4个新接口方法
  2. src/src/User/BSHISPatAdm.cls - 已添加FixmedinsCode/Name字段
  3. frontend/src/pages/HIS/DataSync.tsx - 扩展同步功能(添加医院选择)
  4. frontend/src/pages/HIS/SyncedPatients.tsx - 添加医院筛选
  5. frontend/src/App.tsx - 添加菜单和路由
  6. frontend/src/api/hisData.ts - 添加新接口API定义

编译说明

后端编译

// 编译表类(添加新字段和表)
Do $System.OBJ.Compile("User.BSHISPatAdm,User.BSHISSyncConfig","ck")

// 编译服务类和接口类
Do $System.OBJ.Compile("src.DRG.HISData.HisDataService,src.DRG.HISData.SyncTaskService,src.DRG.HISData.Interface","ck")

前端启动

cd frontend
npm start

测试计划

  1. 测试医院关联:

    • 调用接口02010067,检查 BS_HIS_PatAdm 表是否保存了 FixmedinsCode 和 FixmedinsName
  2. 测试同步配置:

    • 保存同步配置(接口02010080)
    • 查询同步配置(接口02010079)
  3. 测试同步执行:

    • 手动执行增量同步(接口02010078)
    • 检查同步日志和患者数据是否正确保存
  4. 测试同步状态查询:

    • 查询同步状态(接口02010081)
    • 验证最后同步时间、状态等信息

注意事项

  1. 医院代码一致性:

    • 确保 session 中的 hospCode 与 CB_Hospital.Code 一致
    • 同步配置、日志、患者数据均使用 hospCode 关联
  2. 多医院支持:

    • 系统应支持为不同医院配置不同同步策略
    • 查询时需按 hospCode 过滤数据
  3. 权限控制:

    • 同步配置需要管理员权限
    • 普通用户只能查看自己医院的同步数据