# Hospital Adapter Service 医院接口中转平台。第一版输出标准数据字段,不输出 YKT 字段。 ## 技术栈 - Node.js - Express - CommonJS - dotenv - MongoDB - esbuild ## 运行 ```bash cd hospital-adapter-service npm install npm run dev ``` 未配置 `CONFIG_NODE_PORT` 时默认端口是 `8082`;当前 gateway 和邹平子程序 bundle 都配置为 `18082`。 测试 gateway 本地启动: ```cmd npm run gateway ``` 邹平子程序本地启动。默认按 `standalone` 模式启动,内部监听 `18082`;gateway 通过前置机/Nginx 暴露的地址访问,例如 `http://120.224.145.13:8082`: ```cmd npm run zp ``` 前置机轻量部署可以不安装 Mongo,只安装 Node.js 和 PM2。Mongo 默认关闭,查询接口仍可直接访问医院视图。 ## 运行角色 - `standalone`: 单机调试/院内直接部署,标准资源接口和 YKT 兼容接口都由本机查询 HIS。 - `gateway`: 中心网关,给 `ytk-customer-service` 调用,并按医院配置选择 `local`、`direct` 或 `edge` 路由。 - `edge`: 院内 Agent,主动连接中心网关,只负责访问院内 HIS,适合医院不开放入站端口的场景。 关键配置: ```text 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"} CONFIG_HOSPITAL_ADAPTER_ROUTE_MODE_MAP={"zpfb":"direct"} CONFIG_HOSPITAL_ADAPTER_DIRECT_URL_MAP={"zpfb":"http://120.224.145.13:8082"} ``` ## Windows 前置机部署 本机生成单文件 bundle。建议一个医院一个 env 文件,例如 `.env.zpfb`、`.env.gateway`: ```cmd cd /d C:\code\yk\ykt\hospital-adapter-service npm install npm run build:zp ``` 构建输出: ```text dist\bundle.zpfb.js ``` 构建时会把指定 env 文件的变量直接写进 bundle。部署到前置机时只需要复制对应 bundle,不需要复制源码目录、`node_modules`、`.env` 或启动脚本。 如果希望输出文件固定叫 `bundle.js`: ```cmd npm run build -- --env zpfb --out dist\bundle.js ``` ```cmd node bundle.js ``` PM2 启动示例: ```cmd pm2 start bundle.js --name hospital-adapter-service ``` 邹平子程序 bundle 也是同一个构建命令,只是每家医院用自己的 env 文件。比如 `.env.zpfb`: ```bash CONFIG_NODE_PORT=18082 CONFIG_ADAPTER_ROLE=standalone CONFIG_MONGO_ENABLED=false ``` 然后重新构建: ```cmd npm run build:zp ``` 把生成的 `dist\bundle.zpfb.js` 复制到前置机后启动,可以复制时改名为 `bundle.js`: ```cmd pm2 start bundle.js --name hospital-adapter-zpfb ``` 也可以不改名直接启动: ```cmd pm2 start bundle.zpfb.js --name hospital-adapter-zpfb ``` 中心 gateway 用自己的 env,例如 `.env.gateway`: ```cmd npm run build:gateway ``` 构建输出: ```text dist\bundle.gateway.js ``` 当前 `.env.gateway` 用 `gateway` 模式,前端 HIS 选项会传固定 `corpId`,网关按 `corpId` 路由医院编码,再按医院编码选择调用模式。广口走本地 `gk` adapter,邹平走 `direct` 访问前置机公网地址: ```bash CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk","wpLgjyawAAEqxCUmBMjLo8CnXdDuQoeg":"zpfb"} CONFIG_HOSPITAL_ADAPTER_ROUTE_MODE_MAP={"gk":"local","zpfb":"direct"} CONFIG_HOSPITAL_ADAPTER_DIRECT_URL_MAP={"zpfb":"http://120.224.145.13:8082"} CONFIG_GK_JHIDS_PROXY_URL=https://crm.gykqyy.com/ykt/getYoucanData/gkJhids ``` 如果后续要直接连接嘉和 JHIDS,再使用 `gk` 或 `gk-standalone` env: ```cmd npm run build -- --env gk-standalone --out dist\bundle.gk-standalone.js ``` 也可以直接指定 env 文件路径: ```cmd npm run build -- --env-file .env.zpfb --out dist\bundle.zpfb.js ``` ## 环境变量 - `CONFIG_NODE_PORT`: 服务端口 - `CONFIG_MONGO_ENABLED`: 是否启用 Mongo,默认 `false` - `CONFIG_MONGO_OPTIONAL`: Mongo 连接失败时是否允许服务继续启动,默认 `true` - `CONFIG_MONGO_URI`: Mongo 连接串 - `CONFIG_DB_NAME`: 平台库名,默认 `hospital_adapter` - `CONFIG_DEFAULT_PAGE_SIZE`: 默认分页,默认 `20` - `CONFIG_MAX_PAGE_SIZE`: 最大分页,默认 `200` - `CONFIG_HOSPITAL_ADAPTER_TIMEOUT_MS`: 上游超时,默认 `15000` 每家医院可配置: - `CONFIG__SOURCE_TYPE`: `view | http | webservice` - `CONFIG__BASE_URL`: HTTP/WebService 上游地址 - `CONFIG__DB_TYPE`: 视图数据库类型,支持 `mssql | oracle | oracle_sqlplus` - `CONFIG__DB_HOST`: 视图数据库地址 - `CONFIG__DB_PORT`: 视图数据库端口,SQL Server 默认 `1433` - `CONFIG__DB_NAME`: 视图数据库名 - `CONFIG__DB_USER`: 视图数据库用户名 - `CONFIG__DB_PASSWORD`: 视图数据库密码 - `CONFIG___SOURCE_TYPE`: 单资源数据源覆盖 - `CONFIG___VIEW_NAME`: 单资源视图名覆盖 - `CONFIG___ENDPOINT`: 单资源接口路径覆盖 - `CONFIG___ORDER_BY`: view 分页排序字段 - `CONFIG___DATE_RANGE_FIELD`: `start_date/end_date` 对应的标准日期字段 广医口腔嘉和模块固定医院编码为 `gk`。gateway 路由到该模块时配置: ```bash CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk"} ``` 测试环境前端可通过 HIS 选项传固定广口 `corpId`,网关仍按 `corpId` 路由: ```bash CONFIG_HOSPITAL_ADAPTER_CORP_MAP={"wwa54dfba0b5441ef1":"gk"} ``` `gk` 模块使用嘉和 JHIDS 配置: ```bash CONFIG_GK_JHIDS_PROXY_URL= CONFIG_GK_JHIDS_DATA_QUERY_URL= CONFIG_GK_JHIDS_TOKEN_URL= CONFIG_GK_JHIDS_CLIENT_ID= CONFIG_GK_JHIDS_CLIENT_SECRET= CONFIG_GK_JHIDS_SYS_CODE=GKDW CONFIG_GK_JHIDS_PAGE_SIZE=1000 CONFIG_GK_JHIDS_TIMEOUT_MS=15000 CONFIG_GK_JHIDS_TLS_REJECT_UNAUTHORIZED=true ``` 测试环境使用现有 dev-jcpt 服务时,只需要配置 `CONFIG_GK_JHIDS_PROXY_URL`;中继平台会请求 dev-jcpt 的 `queryJhidsData` 原始能力,再执行本地 `gk` 字段映射。 兼容旧变量名 `CONFIG_JHIDS_*`,但新部署建议使用 `CONFIG_GK_JHIDS_*`。 ## 查询接口 以下 curl 用于 `standalone` 或院内直连调试。邹平正式接中心网关时使用 `direct` 模式:邹平子程序内部监听 `18082`,前置机/Nginx 对外暴露 `http://120.224.145.13:8082`,gateway 主动访问这个对外地址。 ```bash curl -X POST "http://127.0.0.1:18082/api/zpfb/patient/query" \ -H "Content-Type: application/json" \ -d '{"id_num":"110101199001011234","page":1,"pageSize":20}' ``` YKT HIS 兼容入口: ```bash curl -X POST "http://127.0.0.1:18082/api/ykt/customerHisSync" \ -H "Content-Type: application/json" \ -d '{"hospitalCode":"zpfb","type":"getHisCustomerArchive","idCard":"身份证号"}' ``` 返回: ```json { "success": true, "message": "获取成功", "list": [] } ``` 响应: ```json { "status": "success", "message": "查询成功", "data": [], "page": 1, "pageSize": 20, "total": 0 } ``` ## ytk-customer-service 接入 主服务保持旧 HIS 分支不变,新医院通过环境变量映射到本平台: ```bash CONFIG_HOSPITAL_ADAPTER_GATEWAY_URL=http://127.0.0.1:18082 ``` 主服务收到 `customerHisSync` 后,如果未命中旧 HIS 分支,会转发到本平台的 `/api/ykt/customerHisSync`。本平台返回 YKT 兼容格式 `{ success, message, list }`。 ## 资源 - `patient` - `outpatientRecord` - `orderInfo` - `pacsInfo` - `lisInfo` - `lisDetail` ## 通用 View 数据源 `view` 数据源用于快速接入医院提供的数据库视图。每家医院在 adapter 配置里声明资源启停、视图名、排序字段和字段映射;查询仍然通过 HTTP 接口进入本服务。 邹平妇保示例: ```bash CONFIG_NODE_PORT=18082 CONFIG_ADAPTER_ROLE=standalone CONFIG_MONGO_ENABLED=false CONFIG_ZPFB_SOURCE_TYPE=view CONFIG_ZPFB_DB_TYPE=oracle_sqlplus CONFIG_ZPFB_DB_HOST= CONFIG_ZPFB_DB_PORT=1521 CONFIG_ZPFB_DB_NAME= CONFIG_ZPFB_DB_USER= CONFIG_ZPFB_DB_PASSWORD= CONFIG_ZPFB_DB_ORACLE_CONNECT_MODE=service CONFIG_ZPFB_DB_SQLPLUS_PATH= CONFIG_ZPFB_DB_SQLPLUS_ENCODING=gbk ``` 前置机 CMD 临时启动示例仅用于未打包时排查。正常单文件部署时,相关变量应写入本机 `.env.zpfb` 后重新 `npm run build:zp`。 ```cmd set CONFIG_NODE_PORT=18082 set CONFIG_ADAPTER_ROLE=standalone set CONFIG_MONGO_ENABLED=false node index.js ``` 说明: 邹平正式接中心网关时使用 `direct`,由 gateway 主动访问 `http://120.224.145.13:8082`;前置机内部子程序仍监听 `18082`。 邹平第一版默认只启用: - `patient` -> `v_youcan_patient` - `outpatientRecord` -> `v_youcan_outpatient_record` 如果医院视图字段不是标准字段,在对应 adapter 的 `fieldMapping` 中配置 `标准字段 -> 视图字段`。密码只放部署环境变量,不提交到代码。 ## 同步标准快照 ```bash curl -X POST "http://127.0.0.1:18082/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`;普通查询接口不受影响。