Files
his/Bug318_修复总结.md

3.1 KiB
Raw Blame History

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

  • 修改 SQLcategory_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';

执行步骤

  1. 备份数据库(重要!)
  2. 执行上述 UPDATE 语句
  3. 重启后端服务
  4. 清除前端缓存

验证方法

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

注意事项

  1. 部署前必须执行数据迁移脚本,否则历史手术医嘱无法正确显示
  2. 修改后需要重新编译部署后端和前端
  3. 建议先在测试环境验证后再部署到生产环境