proposal.md 5.5 KB

Why

原有的自动同步仅依赖后端 SyncTaskService(02010083)的"敲门式"触发:它只周期性调用 02010083(RunScheduledTasks),由 IRIS 后端根据 BS_HISSyncConfig 判定并执行同步。它本身不构建业务 session、不调用具体业务接口 02010067、不感知机构与同步配置。原先配套的桌面触发程序 HISAutoSyncService 已从本项目移除,现由本方案小程序承担业务侧同步。

业务侧现在需要一个独立的小程序(桌面端),直接面向 DRG 平台做"按机构 + 按配置"的数据同步,并具备可运维的托盘与日志能力:

  1. 必须先拉 01010064(医疗机构信息)拿到机构主数据,并据此构建 session(session 中的医疗机构字段全部来自 01010064 返回值)。
  2. 再拉 02010079(GetSyncConfig)拿到该机构的同步配置(syncType/frequency/scheduledTime/lookbackDays/enabled)。
  3. 按需(手动或经外部 Windows 任务计划)调用 02010067(GetInpatientData 住院数据同步),调用时必须带 session。
  4. 程序最小化到托盘、本地记录每次接口调用日志并可查看。

What Changes

  • 新建独立 C# 项目 DRGInterfaceClient/(.NET Framework 4.8 WinForms,无第三方 NuGet 包,作为已移除的 HISAutoSyncService 的替代程序):
    • 系统托盘 NotifyIcon:最小化到托盘、双击还原、右键菜单(打开主界面 / 立即执行一次 / 打开日志 / 退出)。
    • 主界面:顶部「接口地址」输入框(TextBox,初始值取自 appsettings.json 的 Endpoint,操作员可随时修改;每次调用前校验非空,空则提示"接口地址不能为空"并中断)+ 机构下拉框(来自 01010064)+ 配置展示区(来自 02010079)+「加载机构」「加载配置」「立即执行一次」「开始调度」「停止调度」「注册任务计划」按钮 + 内嵌日志面板。
    • 本地滚动日志 DRGInterfaceClient.log,记录每次接口调用的接口码、HTTP 状态码、耗时(ms)、返回摘要/错误,支持界面内查看与打开日志文件。
  • 接口客户端(新建 DrgApiClient.cs):
    • 01010064 QueryHospitalInfo:拉机构列表,填充下拉框;返回项含 id/hospCode/code/descripts/MedinsLv。
    • 02010079 GetSyncConfig:按 hospCode 拉同步配置并展示。
    • 02010067 GetInpatientData:带完整 session 调用,参数 admID=''、hospID=hospCode、stDate/endDate(按 syncType+lookbackDays 计算)、SynFlag。
    • 统一 CallAsync(code, params, session):POST http://127.0.0.1:52773/csp/drg/sysInternalMutiple,Header Authorization: Basic X1NZU1RFTTpwcnlrQDIwMjA= + Content-Type: application/json,请求体 {"code","params":[{}],"session":[{}]}。
  • Session 构建(SessionBuilder.cs):
    • 机构字段来自 01010064:hospYBCode=code、hospCode=hospCode、hospDesc=descripts、hospID=id、medinsLv=MedinsLv。
    • 非机构字段(userID/userName/locID/locDesc/sessionID/...)来自 appsettings.json 的系统默认值。
    • 机构字段必填:未选中机构时,任何业务接口(02010079/02010067)调用均被拦截并提示"请先选择医疗机构"。
  • 业务调用与定时:
    • 手动模式:选机构 → 点「加载配置」→ 点「立即执行一次」→ 调 02010067(按 02010079 配置计算日期区间)。
    • 点「开始调度」按 02010079 的 frequency 启用调度(满足"根据 02010079 配置设置定时调用任务"):
    • hourly:程序内整点轮询——程序常驻托盘,内部定时器在下一个整点首次触发、之后每小时整点调一次 02010067(不注册 Windows 任务)。
    • daily/weekly:外部 Windows 任务计划——以 schtasks 注册计划任务,操作为以 --sync 无头参数重新启动本程序。
    • manual:不启用自动调度,仅手动「立即执行一次」。
    • 无头 --sync 模式:供 daily/weekly 计划任务触发;读取 appsettings.ScheduledHospCode(按机构 code 医保编码匹配),完成"加载机构→构建 session→加载配置→调 02010067"一次后退出(退出码 0/1)。
    • 启动默认行为:需手动开始,不自动执行同步(首屏仅加载机构下拉,需人工选机构并点按钮)。

Capabilities

New Capabilities

  • drg-interface-client:DRG 接口客户端小程序(桌面托盘程序)。负责从 01010064 加载机构、02010079 加载同步配置、构建业务 session,并按需调用 02010067 完成住院数据同步;支持托盘驻留、本地日志查看,以及经 Windows 任务计划程序驱动的外部定时调用。

Modified Capabilities

  • 无。本方案不修改任何后端接口、表结构或前端页面。

Impact

  • 新增 C# 项目:DRGInterfaceClient/(约 1 个 .csproj + 6~8 个 .cs 文件),依赖 .NET Framework 4.8(Windows 系统自带,免安装运行时),无第三方 NuGet 包。本项目原 HISAutoSyncService 已移除,本程序为其替代。
  • 后端:无改动(复用 01010064/02010079/02010067 三个既有接口)。
  • 前端:无改动。
  • 部署:独立部署;若启用外部定时,需在被部署机器上用 schtasks 注册计划任务(程序内「注册任务计划」按钮自动完成)。
  • 运维:生产端点默认 127.0.0.1:52773(可改 appsettings.json 指向 172.16.2.15:52773);本地日志位于程序目录 DRGInterfaceClient.log。