2026-06-18 16:10:40 +08:00

200 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Hospital Adapter Service
医院接口中转平台。第一版输出标准数据字段,不输出 YKT 字段。
## 技术栈
- Node.js
- Express
- CommonJS
- dotenv
- MongoDB
- esbuild
## 运行
```bash
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。
关键配置:
```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"}
```
## Windows 前置机部署
本机生成单文件 bundle:
```cmd
cd /d C:\code\yk\ykt\hospital-adapter-service
npm install
npm run build
```
构建输出:
```text
dist\bundle.js
```
构建时会把本机 `.env.production` 的变量直接写进 bundle。部署到前置机时只需要复制 `bundle.js`,不需要复制源码目录、`node_modules``.env` 或启动脚本。
```cmd
node bundle.js
```
PM2 启动示例:
```cmd
pm2 start bundle.js --name hospital-adapter-service
```
## 环境变量
- `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_<HOSPITAL>_SOURCE_TYPE`: `mock | view | http | webservice`
- `CONFIG_<HOSPITAL>_BASE_URL`: HTTP/WebService 上游地址
- `CONFIG_<HOSPITAL>_DB_TYPE`: 视图数据库类型,支持 `mssql | oracle | oracle_sqlplus`
- `CONFIG_<HOSPITAL>_DB_HOST`: 视图数据库地址
- `CONFIG_<HOSPITAL>_DB_PORT`: 视图数据库端口SQL Server 默认 `1433`
- `CONFIG_<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` 对应的标准日期字段
## 查询接口
```bash
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 兼容入口:
```bash
curl -X POST "http://127.0.0.1:8082/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:8082
```
主服务收到 `customerHisSync` 后,如果未命中旧 HIS 分支,会转发到本平台的 `/api/ykt/customerHisSync`。本平台返回 YKT 兼容格式 `{ success, message, list }`
## 资源
- `patient`
- `outpatientRecord`
- `orderInfo`
- `pacsInfo`
- `lisInfo`
- `lisDetail`
## 通用 View 数据源
`view` 数据源用于快速接入医院提供的数据库视图。每家医院在 adapter 配置里声明资源启停、视图名、排序字段和字段映射;查询仍然通过 HTTP 接口进入本服务。
邹平妇保示例:
```bash
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`
```cmd
set CONFIG_NODE_PORT=8082
set CONFIG_MONGO_ENABLED=false
node index.js
```
邹平第一版默认只启用:
- `patient` -> `v_youcan_patient`
- `outpatientRecord` -> `v_youcan_outpatient_record`
如果医院视图字段不是标准字段,在对应 adapter 的 `fieldMapping` 中配置 `标准字段 -> 视图字段`。密码只放部署环境变量,不提交到代码。
## 同步标准快照
```bash
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`;普通查询接口不受影响。