1. Bug #333/#335/#336: 在 saveAdvice 方法入口添加参数非空校验 - adviceSaveParam 为 null 时返回友好错误提示 - adviceSaveList 为 null 或空时返回友好错误提示 2. 更新 Debug 日志标签为 BugFix#333/335/336 3. 增强异常场景的用户提示 修复人:关羽 修复日期:2026-04-08
8.3 KiB
Bug 修复总结报告
修复概述
本次修复涉及 Bug #333/#334/#335/#336/#337,其中 #338/#339 由华佗修复,已确认。
修复人: 关羽
修复日期: 2026-04-06
项目版本: OpenHIS v2.0
Bug #337 - 挂号时间显示异常 ✅ 已修复
一、Bug 原因
问题描述: 门诊挂号页面中,"挂号日期/时间"列显示异常或为空。
根本原因:
- SQL 查询使用
T1.create_time AS register_time(下划线格式) - Java DTO
CurrentDayEncounterDto中字段名是registerTime(驼峰格式) - 前端 Vue 组件使用
scope.row.registerTime获取数据 - MyBatis 返回的
register_time无法映射到前端的registerTime,导致数据无法显示
代码位置:
- 文件:
openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml - 方法:
getCurrentDayEncounter - 行号:约第 72 行和第 88 行
二、修改步骤
文件: openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml
修改 1:字段别名修正(第 72 行)
<!-- 修改前 -->
T1.create_time AS register_time,
<!-- 修改后 -->
T1.create_time AS registerTime,
修改 2:ORDER BY 子句修正(第 88 行)
<!-- 修改前 -->
ORDER BY T9.register_time DESC
<!-- 修改后 -->
ORDER BY T9.registerTime DESC
三、运行结果结论
修复前:
- 前端页面"挂号日期/时间"列显示为空或格式错误
- 时间数据无法正确映射到表格
修复后:
- 前端正确显示挂号时间,格式为
YYYY-MM-DD HH:mm:ss - 时间排序功能正常工作
- 数据库字段
create_time通过 SQL 别名registerTime正确映射到 DTO 和前端
测试结果: ✅ 验证通过
Bug #333/#335/#336 - 医嘱保存报错 ✅ 已修复
一、Bug 原因
问题描述: 保存药品/耗材/诊疗医嘱时,有时会报字段不能为空的错误或空指针异常。
根本原因:
handMedication()方法(药品医嘱)缺少practitionerId和founderOrgId的 null-checkhandDevice()方法(耗材医嘱)缺少practitionerId和founderOrgId的 null-checkhandService()方法(诊疗医嘱)缺少practitionerId和founderOrgId的 null-check- 当前端未传递这些字段时,它们为 null,导致数据库插入失败或 NullPointerException
代码位置:
- 文件:
openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java - 方法:
handMedication()、handDevice()、handService()
二、修改步骤
文件: openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java
修改 1:handMedication 方法(约第 756 行)
在 accountId 补全逻辑后,添加以下代码:
// 🔧 Bug Fix: 确保practitionerId不为null
if (adviceSaveDto.getPractitionerId() == null) {
adviceSaveDto.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId());
log.info("handMedication - 自动补全practitionerId: practitionerId={}", adviceSaveDto.getPractitionerId());
}
// 🔧 Bug Fix: 确保founderOrgId不为null
if (adviceSaveDto.getFounderOrgId() == null) {
adviceSaveDto.setFounderOrgId(SecurityUtils.getLoginUser().getOrgId());
log.info("handMedication - 自动补全founderOrgId: founderOrgId={}", adviceSaveDto.getFounderOrgId());
}
修改 2:handDevice 方法(约第 1145 行)
在 accountId 补全逻辑后,添加以下代码:
// 🔧 Bug Fix: 确保practitionerId不为null
if (adviceSaveDto.getPractitionerId() == null) {
adviceSaveDto.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId());
log.info("自动补全practitionerId: practitionerId={}", adviceSaveDto.getPractitionerId());
}
// 🔧 Bug Fix: 确保founderOrgId不为null
if (adviceSaveDto.getFounderOrgId() == null) {
adviceSaveDto.setFounderOrgId(SecurityUtils.getLoginUser().getOrgId());
log.info("自动补全founderOrgId: founderOrgId={}", adviceSaveDto.getFounderOrgId());
}
修改 3:handService 方法(约第 1395 行)
在 accountId 补全逻辑后,添加以下代码:
// 🔧 Bug Fix: 确保practitionerId不为null
if (adviceSaveDto.getPractitionerId() == null) {
adviceSaveDto.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId());
log.info("handService - 自动补全practitionerId: practitionerId={}", adviceSaveDto.getPractitionerId());
}
// 🔧 Bug Fix: 确保(founderOrgId不为null
if (adviceSaveDto.getFounderOrgId() == null) {
adviceSaveDto.setFounderOrgId(SecurityUtils.getLoginUser().getOrgId());
log.info("handService - 自动补全founderOrgId: founderOrgId={}", adviceSaveDto.getFounderOrgId());
}
三、运行结果结论
修复前:
- 保存药品医嘱时,如果
practitionerId为 null,可能导致数据库插入失败 - 保存耗材医嘱时,如果
founderOrgId为 null,可能导致空指针异常 - 保存诊疗医嘱时,同样存在字段缺失风险
修复后:
- 所有医嘱保存方法都会自动从登录用户获取
practitionerId和founderOrgId - 即使前端未传递这些字段,也能正常保存医嘱
- 日志会记录自动补全的字段值,便于问题追踪
测试场景:
- ✅ 药品医嘱保存(测试通过)
- ✅ 耗材医嘱保存(测试通过)
- ✅ 诊疗医嘱保存(测试通过)
测试结果: ✅ 验证通过
Bug #334 - 前端 UI 布局调整 ⚠️ 待补充
当前状态
已读取 openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue 文件,未发现明显的 UI 布局问题。
现有页面符合 Element Plus 组件库规范,布局合理。
待补充信息
请提供以下信息以便进一步修复:
- 具体页面路径: 是哪个功能模块?(例如:门诊挂号、门诊缴费、药房发药等)
- 当前问题描述: 具体哪些元素布局异常?(例如:按钮错位、间距过大、表单项重叠等)
- 期望效果: 期望的布局样式是什么?
- 截图或截图链接: 如果有截图,可帮助快速定位问题
Bug #338/#339 - 已由华佗修复 ✅
Bug #338 - 就诊状态校验
修复人: 华佗
位置: DoctorStationAdviceAppServiceImpl.saveAdvice() 方法(165-182行)
内容: 新增就诊状态校验,未接诊患者(非1002/1003/1004状态)禁止保存医嘱
验证状态: ✅ 已验证
Bug #339 - 药房 locationId 过滤
修复人: HIS Dev
位置: DoctorStationAdviceAppServiceImpl.getAdviceBaseInfo() 方法
内容: 新增 locationId 过滤条件,药房筛选功能正常工作
验证状态: ✅ 已验证
修改文件清单
| 序号 | 文件路径 | 修改类型 | 说明 |
|---|---|---|---|
| 1 | openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml |
字段别名修复 | 将 register_time 改为 registerTime |
| 2 | openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java |
新增字段补全逻辑 | 在三个医嘱处理方法中添加 practitionerId 和 founderOrgId 自动补全 |
部署建议
-
后端部署:
cd openhis-server-new mvn clean package -DskipTests -
重启服务:
cd openhis-server-new/openhis-application mvn spring-boot:run -
前端部署: 本次修复不涉及前端代码,无需重新编译前端
回归测试清单
| 测试项 | 预期结果 | 状态 |
|---|---|---|
| 挂号时间显示 | 正确显示 YYYY-MM-DD HH:mm:ss 格式 |
✅ |
| 挂号时间排序 | 按时间倒序排列 | ✅ |
| 药品医嘱保存 | 可正常保存,不报错 | ✅ |
| 耗材医嘱保存 | 可正常保存,不报错 | ✅ |
| 诊疗医嘱保存 | 可正常保存,不报错 | ✅ |
| 就诊状态校验 | 未接诊患者无法保存医嘱 | ✅ |
| 药房筛选 | 可根据 locationId 正确筛选药房 | ✅ |
报告人: 关羽
报告日期: 2026-04-06 22:30