compile_instructions.md 4.6 KB

HIS数据查询接口 - 编译和测试说明

已修复的问题

1. Interface.cls 重写

  • 参考 src.DRG.BasicData.InterFace 的模式
  • 接口方法直接传递 jsonObj 到服务类
  • 添加了3个新接口:02010075、02010076、02010077

2. HisDataService.cls 更新

  • 服务方法接受 jsonObj 参数
  • jsonObj.params 提取查询参数
  • jsonObj.pagination 提取分页参数
  • 修复了 new (jsonObj) 导致的参数被清空问题

3. 前端开发

  • SyncedPatients.tsx - 详情弹窗使用Tabs展示
  • SyncLog.tsx - 新建同步日志查询页面
  • App.tsx - 添加路由和菜单配置

编译步骤

在IRIS终端中执行:

// 方法1:编译单个类
Do $System.OBJ.Compile("src.DRG.HISData.HisDataService","ck")
Do $System.OBJ.Compile("src.DRG.HISData.InterFace","ck")

// 方法2:同时编译多个类
Do $System.OBJ.Compile("src.DRG.HISData.HisDataService,src.DRG.HISData.InterFace","ck")

HIS 同步任务调度器(自动同步,2026-07-26 修订)

编译 SyncTaskService / SyncSchedulerTask

Do $System.OBJ.Compile("src.DRG.HISData.SyncTaskService","ck")
Do $System.OBJ.Compile("src.DRG.HISData.SyncSchedulerTask","ck")
// 或一并:
Do $System.OBJ.Compile("src.DRG.HISData.SyncTaskService,src.DRG.HISData.SyncSchedulerTask","ck")

单元测试(覆盖 ShouldRunNow / RunScheduledTasks / UpdateConfigStatus)

Do $System.OBJ.Compile("src.DRG.HISData.Tests.SyncTaskServiceTest","ck")
Do ##class(%UnitTest.Manager).RunTest("src.DRG.HISData.Tests")

预期:22 个用例全部 PASS。重点验证:

  • TestShouldRunNow_Hourly_CrossDaySameTimeExecutes:原 hourly 跨天去重 bug 已修复(昨天 14:00 跑过、今天 14:00 应执行)。
  • TestShouldRunNow_Daily_WithinTwoMinuteToleranceTestShouldRunNow_Daily_OutsideTolerance:±2 分钟容错窗口生效。

本次修订要点(change: his-sync-auto-trigger)

  1. 修复 ShouldRunNow 的 hourly 跨天去重 bug:原本比较"一天内秒数",导致昨天整点跑过则今天同一整点被跳过;改为直接比较完整 $h 时间戳。
  2. daily / weekly 增加 ±2 分钟容错窗口:避免外部触发器整点抖动漏跑。
  3. 关闭 RunScheduledTasks 诊断日志硬编码:原本 debugOn=1,每次扫描写 ^DRG.HIS.SyncConfig.Debug;现改为 $g(^DRG.HIS.SyncConfig.DebugOn, 0),生产默认关闭。排错期可手动 Set ^DRG.HIS.SyncConfig.DebugOn=1,完成后 Kill ^DRG.HIS.SyncConfig.DebugOn

验证

// 1. 直接调用扫描入口(模拟外部触发器)
Set rtn = ##class(src.DRG.HISData.SyncTaskService).RunScheduledTasks({})
// rtn.scannedCount 应大于 0;若有 enabled 配置且频率到点,executedCount 应 = 1

// 2. 验证 hourly 跨天去重(手动注入 LastRunTime)
Set ^DRG.HIS.SyncConfig.LastRunTime("hourly","H03") = $h - 1   // 模拟昨天已跑
Set rtn = ##class(src.DRG.HISData.SyncTaskService).RunScheduledTasks({})
// 修复后 today 14:00 应正常执行一次(executedCount = 1)

测试接口

1. 测试查询已同步患者(02010075)

{
    "code": "02010075",
    "params": [{}],
    "session": [{"userID": "158", "hospID": "13"}],
    "pagination": [{"pageSize": 20, "currentPage": 1}]
}

2. 测试查询患者详情(02010076)

{
    "code": "02010076",
    "params": [{"admID": "测试就诊ID"}],
    "session": [{"userID": "158", "hospID": "13"}]
}

3. 测试查询同步日志(02010077)

{
    "code": "02010077",
    "params": [{}],
    "session": [{"userID": "158", "hospID": "13"}],
    "pagination": [{"pageSize": 20, "currentPage": 1}]
}

前端测试

  1. 启动前端开发服务器:npm startyarn start
  2. 访问"已同步患者查询"页面,测试查询和详情功能
  3. 访问"同步日志查询"页面,测试查询和筛选功能

注意事项

  1. SQL表名:确认SQL中使用的表名与类定义中的 SqlTableName 一致

    • BS_HIS_PatAdm - 对应 User.BSHISPatAdm
    • BS_HIS_DiseInfo - 对应 User.BSHISDiseInfo
    • BS_HIS_OprnInfo - 对应 User.BSHISOprnInfo
    • BS_HIS_SyncLog - 对应 User.BSHISSyncLog
    • BS_HISDRGParams - 对应 User.BSHISDRGParams
  2. 分页语法:IRIS支持 LIMITOFFSET 语法(IRIS 2019+)

  3. 字段名拼写:代码中可能有拼写错误(如 Deleted 误写为 Deleted),需要检查并修复

后续工作

  1. 编译后端类
  2. 测试接口功能
  3. 根据测试结果修复问题
  4. 完善前端页面功能