3.1 KiB
3.1 KiB
Bug #318 修复总结 - 手术医嘱类型冲突解决
问题描述
手术医嘱的 adviceType=4 与耗材类型冲突,导致保存手术医嘱时被错误归类为耗材,进而引发 device_def_id 为 null 的数据库错误。
解决方案
引入新的手术类型值 6,避免与耗材类型(4)冲突。
类型映射表
| 类型 | 前端 adviceType | 后端 ItemType | 数据库 category_enum |
|---|---|---|---|
| 药品 | 1 | MEDICINE(1) | 1 |
| 耗材 | 4 | DEVICE(2) | 2 |
| 诊疗 | 3 | ACTIVITY(3) | 3 |
| 会诊 | 5 | - | 31 |
| 手术 | 6 | SURGERY(6) | 6 |
修改的文件
1. 后端 - 枚举定义
文件: openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ItemType.java
- 添加
SURGERY(6, "6", "手术")枚举值
2. 后端 - SQL Mapper(医生站)
文件: openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml
- 修改 SQL:将
category_enum=4映射为advice_type=6 - 修改前:
COALESCE(T1.category_enum, 3) AS advice_type - 修改后:
CASE WHEN T1.category_enum = 4 THEN 6 ELSE COALESCE(T1.category_enum, 3) END AS advice_type
3. 后端 - SQL Mapper(住院医生站)
文件: openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml
- 同上修改
4. 后端 - 分类逻辑
文件: openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java
- 更新
deviceList筛选条件:处理adviceType=4(耗材) - 更新
activityList筛选条件:处理adviceType=6(手术)
5. 前端 - 医嘱类型选项
文件: openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue
- 修改手术类型值从 4 改为 6
数据迁移
历史数据更新脚本
文件: sql/迁移记录-DB变更记录/20260401_update_surgery_advice_type.sql
-- 更新历史手术医嘱的 category_enum 从 4 改为 6
UPDATE wor_service_request
SET category_enum = 6
WHERE category_enum = 4
AND delete_flag = '0';
执行步骤
- 备份数据库(重要!)
- 执行上述 UPDATE 语句
- 重启后端服务
- 清除前端缓存
验证方法
1. 后端日志验证
保存手术申请单后,检查日志:
BugFix#219: 医嘱分类完成 - 药品:{}, 耗材:{}, 诊疗:{}
手术医嘱应该被归类到"诊疗"中。
2. 数据库验证
-- 检查手术医嘱的 category_enum 是否为 6
SELECT id, bus_no, category_enum, content_json::jsonb->>'surgeryName'
FROM wor_service_request
WHERE category_enum = 6;
3. 前端验证
- 医嘱列表中手术医嘱显示正常
- 手术医嘱的 adviceType 为 6
- 耗材医嘱的 adviceType 为 4
注意事项
- 部署前必须执行数据迁移脚本,否则历史手术医嘱无法正确显示
- 修改后需要重新编译部署后端和前端
- 建议先在测试环境验证后再部署到生产环境