200 lines
5.5 KiB
Markdown
200 lines
5.5 KiB
Markdown
|
|
# 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`;普通查询接口不受影响。
|