From a721060894dddf99a254e875ff6a0e7507d6ff6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Sat, 13 Jun 2026 01:31:02 +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#723?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/bugs/BUG_723_ANALYSIS.md | 98 +++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 MD/bugs/BUG_723_ANALYSIS.md diff --git a/MD/bugs/BUG_723_ANALYSIS.md b/MD/bugs/BUG_723_ANALYSIS.md new file mode 100644 index 000000000..b313aaa70 --- /dev/null +++ b/MD/bugs/BUG_723_ANALYSIS.md @@ -0,0 +1,98 @@ +# 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 分析决策 + +> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。