main
Co-Authored-By: Claude Code <noreply@anthropic.com>
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. 构建
mvn clean package -DskipTests
# 产出:target/hospital-front-1.0.0.jar
5. 启动(开发环境)
# 方式一:默认加载 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 追加加载,
修改数据库地址 / 鉴权等无需重新打包:
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:
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 健康长庆\医院前置机重构\
Languages
Java
100%