3.7 KiB
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— 菜单查询 SQLsys_menu表 — 存储菜单数据(menu_id,menu_name,parent_id,path,component)
三、修复方案
方案:创建 Flyway 迁移脚本,删除 sys_menu 表中 menu_name = '住院医生增强' 的重复记录(保留 menu_id 最小的一条)。
步骤:
- 创建 Flyway 迁移文件
V45__fix_duplicate_menu_doctor_enhanced.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 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。