# DRGInterfaceClient(DRG 接口客户端小程序) 独立的 Windows 桌面小程序(.NET Framework 4.8 WinForms,无第三方 NuGet 包),用于按机构 + 按配置调用 DRG 平台接口完成住院数据同步。它取代了原 `HISAutoSyncService` 程序。 ## 功能 1. **系统托盘**:最小化/关闭收起到托盘,双击还原,右键菜单(打开主界面 / 立即执行一次 / 打开日志 / 退出)。 2. **本地日志**:`DRGInterfaceClient.log`(程序目录,超 `MaxLogSizeMB` 滚动),记录每次调用的接口码 / HTTP 状态码 / 耗时 / 响应摘要;界面内嵌面板可查看,并可「打开日志」「清空日志」。 3. **接口地址可编辑**:主界面顶部「接口地址」输入框,初始值取自 `appsettings.json` 的 `Endpoint`,可随时修改;为空时调用会提示"接口地址不能为空"并中断。 4. **机构多选**:调 `01010064` 填充机构勾选列表(`CheckedListBox`,支持**多选**、`CheckOnClick` 直接勾选),并提供「全选 / 全否」按钮与「已选 N 家」计数;勾选状态在「设为定时机构」后会持久化,下次「加载机构」自动恢复勾选。选中机构后 session 机构字段来自该机构。 5. **同步配置(预览)**:勾选机构后,配置面板展示**最后勾选**那家机构的 `02010079` 配置(`syncType/frequency/scheduledTime/lookbackDays/enabled/synFlag/warningFlag/status`,中文显示);实际批量同步时每家机构各自实时取自己的配置。 6. **业务调用**:「立即执行一次」对**所有勾选机构顺序**执行——逐家带完整 session 调 `02010079` 取配置 → 按 `syncType`+`lookbackDays` 计算日期区间 → 调 `02010067`(`GetInpatientData`);逐家写日志,结束汇总"成功 X 家 / 失败 Y 家"。**未勾选任何机构会提示"请至少勾选一家医疗机构"**。 7. **定时调度**:点「开始调度」启动程序内**整点轮询,覆盖所有勾选机构**(常驻托盘,内部定时器每小时整点触发一次 `02010067`);`daily`/`weekly` 外部定时请用「注册任务计划」。「停止调度」停止轮询并删除已注册的计划任务。 8. **无头模式**:`DRGInterfaceClient.exe --sync` 由 Windows 任务计划程序触发;读取 `ScheduledHospCodes`(按机构 `code` 医保编码匹配),**遍历所有勾选机构**各完成一次同步后退出(退出码:全部成功 0,有失败 1)。 9. **设为定时机构**:将当前**所有勾选**机构的 `code` 写入 `appsettings.json` 的 `ScheduledHospCodes`,供 `--sync` 及任务计划使用。 ## 运行 - **GUI 模式**:双击 `DRGInterfaceClient.exe`。 - **无头定时模式**:`DRGInterfaceClient.exe --sync`(建议由 Windows 任务计划程序调用,配合「设为定时机构」+「开始调度(daily/weekly)」注册的任务)。 > 生产端点如需指向 `172.16.2.15:52773`,在窗体「接口地址」中修改,或改 `appsettings.json` 的 `Endpoint`。 ## 配置项(appsettings.json) | 项 | 说明 | |---|---| | `Endpoint` | DRG 平台 CSP 地址 | | `AuthToken` | Basic 鉴权令牌(`_SYSTEM:pryk@2020` 的 base64) | | `ScheduledHospCodes` | `--sync` 模式匹配的机构 `code`(医保编码)列表,支持多机构 | | `TaskName` | 注册的计划任务名 | | `MaxLogSizeMB` | 日志滚动阈值 | | `FullSyncStartDays` | `syncType=full` 时 `stDate = 今天 - N` 天 | | `SessionDefaults` | session 非机构字段默认值 | ## 接口与 session 映射 - `01010064` `QueryHospitalInfo` → 机构列表(首次加载,带默认空 session)。 - `02010079` `GetSyncConfig(hospCode)` → 同步配置(带机构 session)。 - `02010067` `GetInpatientData(admID,hospID,stDate,endDate,SynFlag)` → 住院数据同步(带机构 session)。 - session 机构映射:`hospYBCode=code`、`hospCode=hospCode`、`hospDesc=descripts`、`hospID=id`、`medinsLv=MedinsLv`;其余字段取 `SessionDefaults`。 - 请求体:`{ "code", "params":[{}], "session":[{}] }`,Header `Authorization: Basic `。