Files
his/Bug318_修复总结.md

90 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`
```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. 数据库验证
```sql
-- 检查手术医嘱的 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. 建议先在测试环境验证后再部署到生产环境