From ec1e3deb0fda76826a95205fb137fa743d58d2f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Sat, 13 Jun 2026 02:42:58 +0800 Subject: [PATCH] =?UTF-8?q?docs(bug):=20=E8=AF=B8=E8=91=9B=E4=BA=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8A=A5=E5=91=8A=20Bug=20#714?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/bugs/BUG_714_ANALYSIS.md | 127 ++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 MD/bugs/BUG_714_ANALYSIS.md diff --git a/MD/bugs/BUG_714_ANALYSIS.md b/MD/bugs/BUG_714_ANALYSIS.md new file mode 100644 index 000000000..15264d5b1 --- /dev/null +++ b/MD/bugs/BUG_714_ANALYSIS.md @@ -0,0 +1,127 @@ +# Bug #714 诸葛亮分析报告 + +> **文档类型**: Bug分析 +> **分析时间**: 2026-06-13 02:42:58 +> **分析模型**: mimo-v2.5 (LLM深度分析) + +--- + +## 基本信息 +- **Bug #**: 714 +- **标题**: 【住院护士站-医嘱校对】住院护士站-医嘱核对界面:缺少“截止时间”过滤条件且默认单选未选中“全部” +- **模块**: 病区护士工作站 +- **提出人**: 陈显精 + +--- + +分析完毕。以下是完整输出。 + +--- + +## 一、Bug 理解 + +**Bug 标题**:【住院护士站-医嘱校对】住院护士站-医嘱核对界面:缺少"截止时间"过滤条件且默认单选未选中"全部" + +**重现步骤**: +1. 登录系统,进入"住院护士站"菜单 +2. 点击进入"医嘱核对"页面,选中左侧"在科"列表中的某位患者 +3. 观察右侧查询条件区域(包含"未校对/已校对/已停止/已退回"四个标签页) + +**结果**: +1. 过滤条件中缺少"截止时间"时间控件,无法限制截止时间进行医嘱筛选 +2. 医嘱分类单选框默认未自动选中"全部" +3. 切换到"已校对/已停止/已退回"标签页时,同样缺失截止时间字段 + +**期望**: +1. 四个标签页均应增加"截止时间"查询条件 +2. "截止时间"默认显示为系统当前时间,且支持手动编辑/选择 +3. 页面初始化默认选中"全部"单项 + +**附图关键信息**:截图清晰显示查询条件区域仅有"医嘱分类"(全部/长期/临时)单选框和"查询"按钮,无截止时间DatePicker控件;且"全部"选项未处于选中状态。 + +**综合总结**:用户在住院护士站医嘱核对界面无法按时间节点批量筛选医嘱,因为查询区域缺少截止时间过滤条件。同时初始化时医嘱分类默认未选中"全部",不利于日常操作。这是一个典型的设计缺陷——查询条件不完整影响护士工作效率。 + +--- + +## 二、根因分析 + +经代码全链路追踪,Bug 涉及前端组件 + 后端 DTO + Service + Mapper 四层: + +**前端层**(`medicalOrderProofread/components/prescriptionList.vue`): +1. `` 中"全部"选项的 `:value` 原为 `null`(commit `376ddd46f` 中添加),导致 `type` 初始值为 `null`,UI 上无选项被选中 +2. 组件中完全没有 `` 日期选择控件,无法选择截止时间 +3. `handleGetPrescription()` 构造请求参数时未传递 `deadline` 字段 + +**后端 DTO 层**(`InpatientAdviceParam.java`): +- `deadline` 字段已存在(在初始重构中引入),但此前未被 Service 层实际使用 + +**Service 层**(`AdviceProcessAppServiceImpl.java` → `getInpatientAdvicePage()`): +- 未提取 `deadline` 参数,未在 `QueryWrapper` 中拼接时间范围条件 + +**Mapper 层**(`AdviceProcessAppMapper.xml`): +- SQL 使用 `${ew.customSqlSegment}` 拼接条件,Service 未设置条件则 SQL 无截止时间过滤 + +**根因总结**:前端查询组件设计时遗漏了截止时间控件,且默认值设置不当;后端虽然 DTO 有字段但 Service 层未处理该参数,导致整条链路断裂。 + +--- + +## 三、修复方案(⚠️ 已在 `ca812421d` 中修复) + +> **注意**:经过 git 历史追踪,此 Bug 的修复已作为 Bug #665 的附带修复在 commit `ca812421d` 中完成。以下是修复内容详解: + +### 3.1 前端修复(`prescriptionList.vue`) + +| 修改点 | 修改前 | 修改后 | +|--------|--------|--------| +| Radio 默认值 | `:value="null"` | `:value="0"` | +| type 初始值 | `ref(null)` | `ref(0)` | +| 截止时间控件 | 无 | 新增 `` (datetime类型) | +| deadline 初始值 | 无 | `ref(formatDateStr(new Date(), 'YYYY-MM-DD') + ' 23:59:59')` | +| 查询参数 | 无 deadline | `...(deadline.value ? { deadline: deadline.value } : {})` | +| therapyEnum 条件 | `type.value != null` | `type.value !== 0`(仅非"全部"时传递) | + +### 3.2 后端修复(`AdviceProcessAppServiceImpl.java` → `getInpatientAdvicePage()`) + +新增代码逻辑: +```java +// 提取 deadline 手动处理 +String deadline = inpatientAdviceParam.getDeadline(); +inpatientAdviceParam.setDeadline(null); +// ... +// 手动拼接 deadline 条件,按医嘱截止时间筛选 +if (deadline != null && !deadline.isEmpty()) { + LocalDateTime deadlineTime = LocalDateTime.parse(deadline, + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + queryWrapper.le("end_time", deadlineTime); // ≤ 截止时间 +} +``` + +### 3.3 四标签页覆盖机制 + +`index.vue` 中四个 tab 各创建独立的 `PrescriptionList` 实例,每个实例维护独立的 `type` 和 `deadline` ref。切换 tab 时通过 `provide/inject` + `ref` 调用目标 tab 组件的 `handleGetPrescription()`,四标签页均能独立使用截止时间过滤。 + +### 3.4 验证检查项 + +- [ ] 前端编译通过(`npm run build:dev`) +- [ ] 后端编译通过(`mvn clean compile -DskipTests`) +- [ ] "未校对" tab:截止时间默认为当日 23:59:59,可编辑 +- [ ] "全部" radio 默认选中,查询结果包含长期+临时 +- [ ] "已校对/已停止/已退回" tab 同样有截止时间控件 +- [ ] 修改截止时间后点"查询",结果正确过滤 + +--- + +## 四、路由决策 + +**FIXER**: zhaoyun(前端为主)+ guanyu(后端 Service 层配合) + +**REASON**: Bug 涉及前端 UI 组件(DatePicker 控件新增 + Radio 默认值修正)占主要工作量,交赵云处理;后端 Service 层 deadline 条件拼接需关羽配合验证 SQL 正确性。**但此 Bug 已在 `ca812421d` commit 中修复完成**,若禅道状态仍为 active,建议直接关闭并更新禅道状态为"已解决"。 + +--- + +## 路由决策 +- **FIXER_ID**: guanyu +- **修复 Agent**: guanyu(后端) +- **原因**: LLM 分析决策 + +> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。