15ab71731792909317731198908caeae640debe1
SQL 优化(结果契约不变,三方言真实测试库回归通过):
- 删除 bsm getTotalConclusion/getTotalSuggest 死代码(依赖 Oracle 18c
已移除的 wm_concat,接口未引用,汇总逻辑在应用层)
- SARG 优化 13 处:日期列函数包裹(to_char/CONVERT = 年份)改为
范围查询,使医院库日期索引可命中(体检结果表逐年增长,
按身份证查历史接口为主要受益者)
- bsm getResultByIdcardAndYearAll/getItemByPeIdAll:每行标量子查询
改 LEFT JOIN pe_unit_dict;逗号 join 改 ANSI 写法
- ya getPhyexamStatus/getPeStatusByIdnoAndYear:巨型 CASE 状态位
表达式从重复计算 6 次提为子查询 status_sum + ISNULL 防 NULL
改写过程修复:
- Oracle TO_DATE('2026','YYYY') 默认当前月首日陷阱(实测复现),
改拼接 '-01-01' 完整日期
- getResultByIdNoOrPeId 的可空参数在 Solon 下被当必填,
加 required=false
回归:bsm/nx/ya 三方言年份/日期查询族接口全部通过
Co-Authored-By: Claude <noreply@anthropic.com>
Hospital Front — 医院前置机程序
基于 Kotlin + Solon 4.0.6 重构的医院前置机对接系统
重构源:hospitalmiddle(SpringBoot 2.7 + MyBatis-Plus + Oracle/SqlServer)
完整方案:[E:\data\ob_data\myob\11 健康长庆\医院前置机重构](../ob_data)
1. 项目简介
体检预约系统通过本程序与多家医院 HIS 系统对接,实现:
- 体检预约的提交、取消
- 体检项目查询、状态查询
- 体检结果/结论/建议的获取
- 单位信息同步
支持 5 家医院(拼音编码):
| 编码 | 医院名 | 数据库 |
|---|---|---|
xinglongyuan |
兴隆园医院 | Oracle |
qingyang |
庆阳医院 | Oracle |
ningxia |
宁夏宝石花医院 | SqlServer |
yanan |
延安医院 | SqlServer |
jinghe |
泾河医院 | Oracle |
2. 技术栈
- 语言:Kotlin 2.0.21(
jvmTarget=17) - 框架:Solon 4.0.6(国产轻量级 Java 框架)
- JDK:17 LTS(推荐)或 21 LTS
- ORM:MyBatis-Plus 3.5.9
- 数据库:Oracle / SqlServer(直连医院库,不可修改)
- 日志:Logback 1.5.12
- HTTP/WS:OkHttp 4.12.0
- 构建:Maven 3.9+
✅ 依赖瘦身:不接入 Knife4j / Druid / Lombok / Jasypt(详见 01-技术栈选型.md)
3. 项目结构
hospital-front/
├── pom.xml
├── README.md
├── .gitignore
├── src/
│ ├── main/
│ │ ├── kotlin/com/hospital/front/
│ │ │ ├── HospitalFrontApp.kt # @SolonMain 启动类
│ │ │ ├── adapter/ # 医院适配器(策略模式)
│ │ │ ├── api/ # HTTP 接口层(按业务域)
│ │ │ ├── service/ # 业务服务层
│ │ │ ├── mapper/ # 数据访问层
│ │ │ ├── vo/ # 值对象
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── infra/ # 基础设施
│ │ │ └── task/ # 定时任务
│ │ └── resources/
│ │ ├── app.yml # Solon 主配置
│ │ ├── logback.xml # 日志配置
│ │ └── mapper/ # MyBatis XML
│ └── test/kotlin/ # 单元测试
└── pac/ # 部署包(运行时外置)
├── bin/ # 启动脚本
├── conf/ # 外置配置
├── backup/ # 历史版本
├── log/ # 日志
├── pid/ # PID 文件
└── tmp/ # 临时文件
4. 构建
mvn clean package -DskipTests
# 产出:target/hospital-front-1.0.0.jar
5. 启动(开发环境)
# 拷贝外置配置(首次启动)
cp -r pac/conf-example pac/conf
# 编辑配置
vim pac/conf/app-jinghe.yml
# 启动(默认加载 app.yml + conf/app-{HOSPITAL}.yml)
HOSPITAL=jinghe java -jar target/hospital-front-1.0.0.jar
6. 部署
详细部署、升级、回滚 SOP:05-部署运维.md
Windows Server 简版:
D:
cd D:\hospital-front\bin
call start.bat start
7. 文档
完整设计文档位于:E:\data\ob_data\myob\11 健康长庆\医院前置机重构\
| 文档 | 内容 |
|---|---|
| 00-总体方案.md | 整体方案 |
| 01-技术栈选型.md | Solon 选型、版本、注解对照 |
| 02-医院差异化矩阵.md | 5 家医院差异、Adapter 拆分 |
| 03-架构设计.md | 系统架构、模块、时序 |
| 04-数据流与接口契约.md | 接口清单、入参出参 |
| 05-部署运维.md | 部署、升级、回滚 SOP |
| 06-变更记录.md | 所有变更登记 |
8. 任务进度
| Step | 内容 | 状态 |
|---|---|---|
| 1 | 工程骨架 | ✅ |
| 2 | 5 医院配置中心 | ⏳ |
| 3 | 业务接口 Kotlin 重写 | ⏳ |
| 4 | 5 套 Mapper 适配 | ⏳ |
| 5 | 主程序被控端 API | ⏳ |
| 6 | Agent 工程 | ⏳ |
| 7 | 升级流程 | ⏳ |
| 8 | 日志推送 | ⏳ |
| 9 | B 端管理后台 | ⏳ |
| 10 | 联调 + 文档 | ⏳ |
Languages
Java
100%