# 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 健康长庆\医院前置机重构\`