docs(bug): 诸葛亮分析报告 Bug #727
This commit is contained in:
125
MD/bugs/BUG_727_ANALYSIS.md
Normal file
125
MD/bugs/BUG_727_ANALYSIS.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Bug #727 诸葛亮分析报告
|
||||
|
||||
> **文档类型**: Bug分析
|
||||
> **分析时间**: 2026-06-13 01:08:49
|
||||
> **分析模型**: mimo-v2.5 (LLM深度分析)
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
- **Bug #**: 727
|
||||
- **标题**: 【住院护士站-入出转管理】转出页面待转科患者医嘱列表缺失“医嘱状态”列且“执行科室”未获取值回显
|
||||
- **模块**: 病区护士工作站
|
||||
- **提出人**: 陈显精
|
||||
|
||||
---
|
||||
|
||||
I now have a complete understanding of the bug. Let me provide the analysis.
|
||||
|
||||
---
|
||||
|
||||
## 一、Bug 理解
|
||||
|
||||
**禅道 Bug 标题**:【住院护士站-入出转管理】转出页面待转科患者医嘱列表缺失"医嘱状态"列且"执行科室"未获取值回显
|
||||
|
||||
**重现步骤**:
|
||||
1. 登录"住院医生工作站",为患者开立医嘱(如:荆防颗粒),确保已校对(状态为:已校对,药房/科室为:中心药房)
|
||||
2. 登录"住院护士站",进入【入出转管理】下的【转出】标签页,选择该患者
|
||||
3. 观察右侧下方医嘱列表
|
||||
|
||||
**期望结果**:
|
||||
1. 医嘱列表应有"医嘱状态"列,正确回显"已校对"
|
||||
2. "执行科室"列应显示"中心药房",不能显示"-"
|
||||
|
||||
**附图关键信息**:
|
||||
- 图2524(护士站转出页):医嘱列表缺少"医嘱状态"列,"执行科室"显示"-"
|
||||
- 图2525(医生站对比页):同一医嘱"荆防颗粒",状态显示"已校对",药房/科室显示"中心药房"
|
||||
|
||||
**综合总结**:护士站在转出页面查看待转科患者的医嘱时,列表缺少"医嘱状态"列且"执行科室"未回显药房名称。而同一医嘱在医生站正常显示"已校对"和"中心药房"。这是一个前后端数据展示不一致的问题。
|
||||
|
||||
---
|
||||
|
||||
## 二、根因分析
|
||||
|
||||
### 问题1:医嘱状态列缺失
|
||||
|
||||
**已修复**。Commit `babd8d0c0`(2026-06-11)已添加了"医嘱状态"列到 `transferOut.vue` 模板,且后端 `ATDManageAppServiceImpl.getInPatientPendingList()` 已正确设置 `requestStatus_enumText`。
|
||||
|
||||
### 问题2:执行科室显示"-"
|
||||
|
||||
**根因**:后端保存药品医嘱时,`perform_location` 字段未正确赋值。
|
||||
|
||||
**完整数据链路分析**:
|
||||
|
||||
| 环 | 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| ① 前端录入 | ✅ 正常 | 医生站选药房后,`orgId` 字段存有药房 ID |
|
||||
| ② DTO 传输 | ❌ 断裂 | 前端发送 `orgId` → DTO 反序列化到 `orgId` 字段 |
|
||||
| ③ Service 保存 | ❌ 断裂 | `DoctorStationAdviceAppServiceImpl:1172` 读取 `adviceSaveDto.getLocationId()` 而非 `getOrgId()`,导致 `performLocation` 为 null |
|
||||
| ④ 数据库存储 | ❌ 数据缺失 | `med_medication_request.perform_location` 为 NULL |
|
||||
| ⑤ 护士站查询 | ✅ SQL 正确 | `ATDManageAppMapper.xml` 正确 JOIN `adm_location`,但因 `perform_location` 为 NULL,`position_name` 为 NULL |
|
||||
| ⑥ 前端展示 | ✅ 逻辑正确 | `positionName \|\| orgName` 均为 null,显示"-" |
|
||||
|
||||
**关键代码定位**:
|
||||
|
||||
`DoctorStationAdviceAppServiceImpl.java:1172`:
|
||||
```java
|
||||
// 发放药房
|
||||
medicationRequest.setPerformLocation(adviceSaveDto.getLocationId());
|
||||
```
|
||||
|
||||
`AdviceSaveDto.java` 中:
|
||||
- `positionId`(line 65):前端字段名 `orgId`,对应数据库 `perform_location`
|
||||
- `orgId`(line 78):前端传来字段名 `orgId`,对应数据库 `org_id`
|
||||
- `locationId`(line 166):独立字段,前端可能未发送此字段
|
||||
|
||||
**Bug #238 修复引入的问题**:`AdviceSaveDto` 添加了 `orgId` 字段(Bug #238 修复),但 `DoctorStationAdviceAppServiceImpl` 仍然从 `getLocationId()` 读取药房 ID,而前端实际发送的是 `orgId`。`locationId` 未被前端赋值,导致 `performLocation` 始终为 null。
|
||||
|
||||
---
|
||||
|
||||
## 三、修复方案
|
||||
|
||||
### 方案:修复后端赋值逻辑
|
||||
|
||||
**修改文件**:`DoctorStationAdviceAppServiceImpl.java`
|
||||
|
||||
**修改位置**:第 1172 行
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
// 修改前
|
||||
medicationRequest.setPerformLocation(adviceSaveDto.getLocationId());
|
||||
|
||||
// 修改后 — 优先使用 getPerformLocation(),其次 getOrgId(),最后 getLocationId()
|
||||
medicationRequest.setPerformLocation(
|
||||
adviceSaveDto.getPerformLocation() != null ? adviceSaveDto.getPerformLocation()
|
||||
: adviceSaveDto.getOrgId() != null ? adviceSaveDto.getOrgId()
|
||||
: adviceSaveDto.getLocationId()
|
||||
);
|
||||
```
|
||||
|
||||
**同时检查**(同类问题):
|
||||
1. `DoctorStationChineseMedicalAppServiceImpl.java:551` — 中药处方可能有相同问题
|
||||
2. 现有数据修复 — 对 `perform_location` 为 NULL 的已保存医嘱,需要从 `content_json` 中提取 `orgId` 回填
|
||||
|
||||
**验证步骤**:
|
||||
1. `mvn clean compile -DskipTests` — 编译通过
|
||||
2. 医生站开药 → 选"中心药房" → 签发
|
||||
3. 护士站转出页 → 选该患者 → 医嘱列表"执行科室"应显示"中心药房"
|
||||
|
||||
---
|
||||
|
||||
## 四、路由决策
|
||||
|
||||
**FIXER**: guanyu(后端开发)
|
||||
|
||||
**REASON**: 核心 Bug 在后端 `DoctorStationAdviceAppServiceImpl` 的字段赋值逻辑,需要修改 Java 代码中 `setPerformLocation` 的取值来源。前端模板和 SQL 查询均已正确,无需前端修改。可能还需同步修复 `DoctorStationChineseMedicalAppServiceImpl` 中的同类问题。
|
||||
|
||||
---
|
||||
|
||||
## 路由决策
|
||||
- **FIXER_ID**: guanyu
|
||||
- **修复 Agent**: guanyu(后端)
|
||||
- **原因**: LLM 分析决策
|
||||
|
||||
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。
|
||||
Reference in New Issue
Block a user