140 lines
5.4 KiB
Markdown
140 lines
5.4 KiB
Markdown
# Hospital Front — 医院前置机程序
|
||
|
||
> 基于 Java 17 + Solon 4.0.6 的医院前置机对接系统
|
||
>
|
||
> 重构源:hospitalmiddle(SpringBoot 2.7 + MyBatis-Plus + Oracle/SqlServer)
|
||
|
||
---
|
||
|
||
## 1. 项目简介
|
||
|
||
体检预约系统通过本程序与多家医院 HIS 系统对接,实现:
|
||
- 体检预约的提交、取消
|
||
- 体检项目 / 组合查询、体检状态查询
|
||
- 体检结果 / 结论 / 建议的获取
|
||
- 单位信息同步
|
||
|
||
**支持医院**(拼音编码,由 `hospital.active` 指定激活):
|
||
|
||
| 编码 | 医院名 | 数据库 | Adapter |
|
||
|---|---|---|---|
|
||
| `xinglongyuan` | 兴隆园医院 | Oracle | `XingLongYuanAdapter` |
|
||
| `qingyang` | 庆阳医院 | Oracle | `QingyangAdapter` |
|
||
| `ningxia` | 宁夏宝石花医院 | SqlServer | `NingxiaAdapter` |
|
||
| `yanan` | 延安医院 | SqlServer | `YananAdapter` |
|
||
| `jinghe` | 泾河医院 | Oracle | `JingheAdapter` |
|
||
|
||
医院通过 `HospitalAdapter` 接口 + `HospitalRouter` 路由(策略模式),方言基类:
|
||
- `BsmAdapterBase`:Oracle 方言(bsm Mapper)
|
||
- `NxAdapterBase`:SqlServer 方言(nx Mapper)
|
||
|
||
---
|
||
|
||
## 2. 技术栈
|
||
|
||
- **语言**:Java 17
|
||
- **框架**:Solon 4.0.6
|
||
- **ORM**:MyBatis-Plus 3.5.9
|
||
- **数据库**:Oracle(ojdbc11 + orai18n,ZHS16GBK 字符集支持)/ SqlServer(直连医院库,只读对接,不可修改表结构)
|
||
- **日志**:Logback(异步 appender,info.log / error.log 分文件滚动)
|
||
- **构建**:Maven 3.9+
|
||
|
||
---
|
||
|
||
## 3. 项目结构
|
||
|
||
```
|
||
hospital-front/
|
||
├── pom.xml
|
||
├── README.md
|
||
├── conf/ # 各医院外置配置(含生产凭据,不入 Git)
|
||
└── src/main/
|
||
├── java/com/hospital/front/
|
||
│ ├── HospitalFrontApp.java # 启动类
|
||
│ ├── adapter/ # 医院适配器(策略模式 + 方言基类)
|
||
│ ├── api/ # HTTP 接口(order / admin)
|
||
│ ├── service/ # 业务服务层
|
||
│ ├── mapper/bsm|nx/ # 数据访问层(按方言分包)
|
||
│ ├── vo/ dto/ # 值对象 / 传输对象
|
||
│ ├── infra/ # 基础设施(过滤器、异常处理、扫描器)
|
||
│ └── task/ # 定时任务(Uptime-Kuma 上报)
|
||
└── resources/
|
||
├── app.yml # 主配置(框架级 + 公共配置)
|
||
├── logback.xml # 日志配置
|
||
├── tls10.security # 延安专用 JDK 安全策略(放开 TLSv1/弱算法)
|
||
└── mapper/ # MyBatis XML
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 构建
|
||
|
||
```bash
|
||
mvn clean package -DskipTests
|
||
# 产出:target/hospital-front-1.0.0.jar
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 启动(开发环境)
|
||
|
||
```bash
|
||
# 方式一:默认加载 classpath 的 app.yml(hospital.active 默认 jinghe)
|
||
java -jar target/hospital-front-1.0.0.jar
|
||
```
|
||
|
||
数据源等医院差异配置在 `app-{医院}.yml` 中,开发期可用 `--solon.config.add` 外挂。
|
||
|
||
---
|
||
|
||
## 6. 生产部署注意事项(重要)
|
||
|
||
### 6.1 外挂医院配置
|
||
|
||
生产环境配置文件**外置于 jar 同级或 `conf/` 目录**,通过 `--solon.config.add` 追加加载,
|
||
修改数据库地址 / 鉴权等无需重新打包:
|
||
|
||
```bash
|
||
java -jar hospital-front.jar --solon.config.add=conf/app-yanan.yml --server.port=8003
|
||
```
|
||
|
||
- 配置模板见仓库 `conf/` 目录(app-jinghe / app-ningxia / app-yanan)
|
||
- `--server.port` 覆盖默认端口 8082
|
||
- 外挂文件中必须指定 `hospital.active` 与 `hm.type`(bsm / nx / ya),并定义 `solon.dataSources.db1`
|
||
|
||
### 6.2 延安医院:TLS 1.0 特殊处理
|
||
|
||
延安 SqlServer 为老版本(仅支持 TLS 1.0 / 弱加密算法),JDK 17 默认禁用,
|
||
必须外挂 JDK 安全属性文件启动,否则连接报 `handshake failure` / `No appropriate protocol`:
|
||
|
||
```bash
|
||
java -Dfile.encoding=UTF-8 -Djava.security.properties=tls10.security -jar hospital-front.jar --solon.config.add=conf/app-yanan.yml --server.port=8003
|
||
```
|
||
|
||
- `tls10.security` 已打包在 jar 内(`src/main/resources/`),上述命令按 classpath 加载,无需单独分发文件;也可用文件系统绝对路径覆盖
|
||
- `-Dfile.encoding=UTF-8`:Windows 服务器默认 GBK,防止日志与接口中文乱码
|
||
- 其余医院**不要**带 `tls10.security`(会全局放开弱算法,降低安全基线)
|
||
|
||
### 6.3 安全配置(生产必读)
|
||
|
||
`app.yml` 中以下配置生产环境必须核对(可在外挂配置中覆盖):
|
||
|
||
| 配置 | 说明 |
|
||
|---|---|
|
||
| `order.basic` | `/order/**` 的 HTTP Basic 认证(`user:password`),生产必须配置 |
|
||
| `admin.token` | `/api/admin/**` 的 `X-Admin-Token`,Agent 环回调用 |
|
||
| `security.ipWhitelistEnabled` / `ipWhitelist` | IP 白名单(支持精确 IP / 通配段 / CIDR),端口暴露公网时务必开启 |
|
||
| `security.trustProxy` | nginx 反代部署时开启,从 X-Forwarded-For 取真实客户端 IP |
|
||
|
||
### 6.4 日志
|
||
|
||
- 日志目录默认 `./log`(`-Dlog.path=xxx` 可覆盖)
|
||
- `info.log`(INFO 及以上)/ `error.log`(仅 ERROR)分文件,50MB 按天滚动,保留 30 天
|
||
- pattern 不含 `%file:%line`(AsyncAppender 下取不到调用者信息,会打成 `?:?`)
|
||
|
||
---
|
||
|
||
## 7. 文档
|
||
|
||
完整设计文档位于:`E:\data\ob_data\myob\11 健康长庆\医院前置机重构\`
|