Hospital Adapter Service
医院接口中转平台。第一版输出标准数据字段,不输出 YKT 字段。
技术栈
- Node.js
- Express
- CommonJS
- dotenv
- MongoDB
- esbuild
运行
cd hospital-adapter-service
npm install
npm run dev
默认端口: 8082
前置机轻量部署可以不安装 Mongo,只安装 Node.js 和 PM2。Mongo 默认关闭,查询接口仍可直接访问医院视图。
运行角色
standalone: 单机调试/院内直接部署,标准资源接口和 YKT 兼容接口都由本机查询 HIS。gateway: 中心网关,给ytk-customer-service调用,并通过 WebSocket 转发到院内 Agent。edge: 院内 Agent,主动连接中心网关,只负责访问院内 HIS。
关键配置:
CONFIG_ADAPTER_ROLE=standalone|gateway|edge
CONFIG_GATEWAY_URL=http://中心网关地址
CONFIG_EDGE_ID=zpfb-edge-1
CONFIG_EDGE_HOSPITAL_CODE=zpfb
CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"corpId":"zpfb"}
Windows 前置机部署
本机生成单文件 bundle:
cd /d C:\code\yk\ykt\hospital-adapter-service
npm install
npm run build
构建输出:
dist\bundle.js
构建时会把本机 .env.production 的变量直接写进 bundle。部署到前置机时只需要复制 bundle.js,不需要复制源码目录、node_modules、.env 或启动脚本。
node bundle.js
PM2 启动示例:
pm2 start bundle.js --name hospital-adapter-service
环境变量
CONFIG_NODE_PORT: 服务端口CONFIG_MONGO_ENABLED: 是否启用 Mongo,默认falseCONFIG_MONGO_OPTIONAL: Mongo 连接失败时是否允许服务继续启动,默认trueCONFIG_MONGO_URI: Mongo 连接串CONFIG_DB_NAME: 平台库名,默认hospital_adapterCONFIG_DEFAULT_PAGE_SIZE: 默认分页,默认20CONFIG_MAX_PAGE_SIZE: 最大分页,默认200CONFIG_HOSPITAL_ADAPTER_TIMEOUT_MS: 上游超时,默认15000
每家医院可配置:
CONFIG_<HOSPITAL>_SOURCE_TYPE:mock | view | http | webserviceCONFIG_<HOSPITAL>_BASE_URL: HTTP/WebService 上游地址CONFIG_<HOSPITAL>_DB_TYPE: 视图数据库类型,支持mssql | oracle | oracle_sqlplusCONFIG_<HOSPITAL>_DB_HOST: 视图数据库地址CONFIG_<HOSPITAL>_DB_PORT: 视图数据库端口,SQL Server 默认1433CONFIG_<HOSPITAL>_DB_NAME: 视图数据库名CONFIG_<HOSPITAL>_DB_USER: 视图数据库用户名CONFIG_<HOSPITAL>_DB_PASSWORD: 视图数据库密码CONFIG_<HOSPITAL>_<RESOURCE>_SOURCE_TYPE: 单资源数据源覆盖CONFIG_<HOSPITAL>_<RESOURCE>_VIEW_NAME: 单资源视图名覆盖CONFIG_<HOSPITAL>_<RESOURCE>_ENDPOINT: 单资源接口路径覆盖CONFIG_<HOSPITAL>_<RESOURCE>_ORDER_BY: view 分页排序字段CONFIG_<HOSPITAL>_<RESOURCE>_DATE_RANGE_FIELD:start_date/end_date对应的标准日期字段
查询接口
curl -X POST "http://127.0.0.1:8082/api/zpfb/patient/query" \
-H "Content-Type: application/json" \
-d '{"id_num":"110101199001011234","page":1,"pageSize":20}'
YKT HIS 兼容入口:
curl -X POST "http://127.0.0.1:8082/api/ykt/customerHisSync" \
-H "Content-Type: application/json" \
-d '{"hospitalCode":"zpfb","type":"getHisCustomerArchive","idCard":"身份证号"}'
返回:
{
"success": true,
"message": "获取成功",
"list": []
}
响应:
{
"status": "success",
"message": "查询成功",
"data": [],
"page": 1,
"pageSize": 20,
"total": 0
}
ytk-customer-service 接入
主服务保持旧 HIS 分支不变,新医院通过环境变量映射到本平台:
CONFIG_HOSPITAL_ADAPTER_GATEWAY_URL=http://127.0.0.1:8082
主服务收到 customerHisSync 后,如果未命中旧 HIS 分支,会转发到本平台的 /api/ykt/customerHisSync。本平台返回 YKT 兼容格式 { success, message, list }。
资源
patientoutpatientRecordorderInfopacsInfolisInfolisDetail
通用 View 数据源
view 数据源用于快速接入医院提供的数据库视图。每家医院在 adapter 配置里声明资源启停、视图名、排序字段和字段映射;查询仍然通过 HTTP 接口进入本服务。
邹平妇保示例:
CONFIG_ZPFB_SOURCE_TYPE=view
CONFIG_ZPFB_DB_TYPE=oracle_sqlplus
CONFIG_ZPFB_DB_HOST=172.16.1.116
CONFIG_ZPFB_DB_PORT=1521
CONFIG_ZPFB_DB_NAME=sknew
CONFIG_ZPFB_DB_USER=inte
CONFIG_ZPFB_DB_PASSWORD=<deploy-secret>
CONFIG_ZPFB_DB_ORACLE_CONNECT_MODE=service
CONFIG_ZPFB_DB_SQLPLUS_PATH=E:\oracle\product\10.2.0\client_1\BIN\sqlplus.exe
CONFIG_ZPFB_DB_SQLPLUS_ENCODING=gbk
前置机 CMD 临时启动示例仅用于未打包时排查。正常单文件部署时,相关变量应写入本机 .env.production 后重新 npm run build。
set CONFIG_NODE_PORT=8082
set CONFIG_MONGO_ENABLED=false
node index.js
邹平第一版默认只启用:
patient->v_youcan_patientoutpatientRecord->v_youcan_outpatient_record
如果医院视图字段不是标准字段,在对应 adapter 的 fieldMapping 中配置 标准字段 -> 视图字段。密码只放部署环境变量,不提交到代码。
同步标准快照
curl -X POST "http://127.0.0.1:8082/api/his/sync" \
-H "Content-Type: application/json" \
-d '{"hospitalCode":"zpfb","resource":"patient","maxPages":1,"pageSize":200}'
标准快照写入平台 Mongo 的 standard-snapshot,不写入 YKT 的 admin.member 等主业务集合。
如果 CONFIG_MONGO_ENABLED=false,同步标准快照接口会返回 MONGO_DISABLED;普通查询接口不受影响。