Files
hospital-front/README.md
T

140 lines
5.4 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 Front — 医院前置机程序
> 基于 Java 17 + Solon 4.0.6 的医院前置机对接系统
>
> 重构源:hospitalmiddleSpringBoot 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
- **数据库**Oracleojdbc11 + orai18nZHS16GBK 字符集支持)/ SqlServer(直连医院库,只读对接,不可修改表结构)
- **日志**Logback(异步 appenderinfo.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.ymlhospital.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 健康长庆\医院前置机重构\`