Files
his/MD/bugs/BUG_723_ANALYSIS.md

99 lines
3.7 KiB
Markdown
Raw Permalink 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 #723 诸葛亮分析报告
> **文档类型**: Bug分析
> **分析时间**: 2026-06-13 01:31:01
> **分析模型**: mimo-v2.5 (LLM深度分析)
---
## 基本信息
- **Bug #**: 723
- **标题**: 【住院医生工作站】有两个住院医生增强
- **模块**: 门诊医生工作站
- **提出人**: 王栩坤
---
Now I have enough context to provide the analysis. Let me compile the findings.
---
## 一、Bug 理解
**禅道原文引用:**
- **标题**:【住院医生工作站】有两个住院医生增强
- **重现步骤**登录内科医生1账号doctor1 密码123456 打开住院管理有两个住院增强
- **结果**:出现重复了
- **期望**:不会出现重复的模块卡片,显得很冗余
**附图关键信息:**
截图显示左侧导航菜单栏,展开"住院管理"一级菜单后,二级菜单列表中出现了**两个完全相同的"住院医生增强"**条目(图标、文字均一致),紧邻排列。
**综合总结:** 用户登录 doctor1 账号后,在"住院管理"导航菜单下看到两个一模一样的"住院医生增强"菜单入口,造成界面冗余和用户困惑。这是一个**菜单数据重复问题**,需要删除其中一条重复的 `sys_menu` 记录。
---
## 二、根因分析
**根因:`sys_menu` 数据库表中存在两条 `menu_name = '住院医生增强'` 且 `parent_id` 相同的记录。**
在 RuoYi 架构中,导航菜单由后端 `sys_menu` 表动态提供,前端根据 API 返回的菜单树渲染侧边栏。具体数据链路:
```
sys_menu 表 → SysMenuMapper.xml (selectMenuList/selectMenuTreeByMenuIds)
→ SysMenuService → SysMenuController (/system/menu/list)
→ 前端 usePermissionStore → Sidebar 渲染
```
最可能的产生原因:某次 Flyway 迁移或手动数据库操作中,对"住院医生增强"菜单执行了**两次 INSERT**,导致 `sys_menu` 表中出现两条同名、同父节点的菜单记录。前端渲染时会忠实地展示所有有效菜单,因此出现重复。
**涉及的关键文件:**
- `core-system/src/main/resources/mapper/system/SysMenuMapper.xml` — 菜单查询 SQL
- `sys_menu` 表 — 存储菜单数据(`menu_id`, `menu_name`, `parent_id`, `path`, `component`
---
## 三、修复方案
**方案:创建 Flyway 迁移脚本,删除 `sys_menu` 表中 `menu_name = '住院医生增强'` 的重复记录(保留 `menu_id` 最小的一条)。**
**步骤:**
1. **创建 Flyway 迁移文件** `V45__fix_duplicate_menu_doctor_enhanced.sql`
```sql
-- V45: 修复 Bug#723 — 删除 sys_menu 中重复的"住院医生增强"菜单条目
-- 保留 menu_id 最小的那条,删除其余重复记录
DELETE FROM sys_menu
WHERE menu_name = '住院医生增强'
AND menu_id NOT IN (
SELECT MIN(menu_id)
FROM sys_menu
WHERE menu_name = '住院医生增强'
);
```
**注意事项:**
- Flyway 迁移一旦执行不可回滚,所以此 SQL 使用了子查询保留最小 `menu_id` 的策略,确保只删重复
- 需要确认"住院医生增强"对应的 `path``component` 是否也一致(如果不一致,说明两个菜单指向不同功能,需要人工判断保留哪个)
- 修复后需要**重新登录** doctor1 账号验证侧边栏不再重复
---
## 四、路由决策
**FIXER**: `xunyu`(荀彧 / DBA
**REASON**: 这是纯数据库数据问题(`sys_menu` 表重复记录),不涉及 Java 代码或前端代码修改,只需要创建一条 Flyway 迁移 SQL 删除重复菜单记录,属于数据库变更范畴,由 DBA 角色处理最合适。
---
## 路由决策
- **FIXER_ID**: guanyu
- **修复 Agent**: guanyu后端
- **原因**: LLM 分析决策
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。