90 lines
3.1 KiB
Markdown
90 lines
3.1 KiB
Markdown
# 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. 建议先在测试环境验证后再部署到生产环境
|