# 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终端中执行: ```objectscript // 方法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 ```objectscript 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) ```objectscript 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_WithinTwoMinuteTolerance` 与 `TestShouldRunNow_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`。 ### 验证 ```objectscript // 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) ```json { "code": "02010075", "params": [{}], "session": [{"userID": "158", "hospID": "13"}], "pagination": [{"pageSize": 20, "currentPage": 1}] } ``` ### 2. 测试查询患者详情(02010076) ```json { "code": "02010076", "params": [{"admID": "测试就诊ID"}], "session": [{"userID": "158", "hospID": "13"}] } ``` ### 3. 测试查询同步日志(02010077) ```json { "code": "02010077", "params": [{}], "session": [{"userID": "158", "hospID": "13"}], "pagination": [{"pageSize": 20, "currentPage": 1}] } ``` ## 前端测试 1. 启动前端开发服务器:`npm start` 或 `yarn 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支持 `LIMIT` 和 `OFFSET` 语法(IRIS 2019+) 3. **字段名拼写**:代码中可能有拼写错误(如 `Deleted` 误写为 `Deleted`),需要检查并修复 ## 后续工作 1. 编译后端类 2. 测试接口功能 3. 根据测试结果修复问题 4. 完善前端页面功能