docs(bug): 诸葛亮分析报告 Bug #742
This commit is contained in:
91
MD/bugs/BUG_742_ANALYSIS.md
Normal file
91
MD/bugs/BUG_742_ANALYSIS.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Bug #742 诸葛亮分析报告
|
||||
|
||||
> **文档类型**: Bug分析
|
||||
> **分析时间**: 2026-06-12 23:08:48
|
||||
> **分析模型**: mimo-v2.5 (LLM深度分析)
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
- **Bug #**: 742
|
||||
- **标题**: 【收费工作站-住院登记】待登记入院和已登记入院出现查找数据库的报错
|
||||
- **模块**: 收费工作站
|
||||
- **提出人**: 王栩坤
|
||||
|
||||
---
|
||||
|
||||
编译通过。现在我已完整理解了 Bug 的根因和修复历史。
|
||||
|
||||
---
|
||||
|
||||
### 一、Bug 理解
|
||||
|
||||
**禅道 Bug #742 原文引用:**
|
||||
|
||||
- **标题**:【收费工作站-住院登记】待登记入院和已登记入院出现查找数据库的报错
|
||||
- **严重程度**:2 (严重)
|
||||
- **重现步骤**:登录内科医生1账号 → 收费工作站 → 住院登记 → 打开"待登记入院"和"已登记入院"标签页
|
||||
- **实际结果**:两个页面均出现红色报错:`BindingException: Parameter 'startTime' not found. Available parameters are [formEnum, param5, ew, encounterStatus, param6, page, registeredFlag, param3, param4, param1, encounterClass, param2]`
|
||||
- **期望结果**:进入住院登记模块,能正常打开"待登记入院"和"已登记入院"板块并显示数据
|
||||
|
||||
**附图关键信息**:截图显示两个标签页均为空白/暂无数据,顶部红色错误提示 MyBatis `BindingException`——`startTime` 参数在 Mapper 可用参数列表中不存在。
|
||||
|
||||
**综合总结**:用户在"收费工作站→住院登记"模块中,两个核心列表页(待登记入院、已登记入院)均因后端 MyBatis 参数绑定错误而无法加载任何数据,功能完全中断。根本原因是 Mapper XML 引用了 `#{startTime}` 等参数,但 Mapper Java 接口中缺少对应的 `@Param("startTime")` 注解。
|
||||
|
||||
---
|
||||
|
||||
### 二、根因分析
|
||||
|
||||
**根因**:Mapper XML 与 Mapper Java 接口参数不匹配。
|
||||
|
||||
**时间线追溯**:
|
||||
|
||||
| 时间 | 操作 | 影响 |
|
||||
|------|------|------|
|
||||
| Jun 10 (commit `8c42cf11b`) | 华佗更新 Mapper XML,新增 `#{startTime}`、`#{endTime}`、`#{organizationId}` 的 `<if>` 条件 | ⚠️ XML 引用了 3 个新参数,但**未同步更新 Mapper Java 接口** |
|
||||
| Jun 11 01:42 UTC | 王栩坤报告 Bug #742 | 此时 Mapper Java 仍缺少 `@Param("startTime")` |
|
||||
| Jun 11 10:05 (commit `defab36cc`) | 冉芸侨添加 `@Param` 注解,但放在 `queryWrapper` 之后 | 部分修复,参数顺序与 AppService 调用不一致 |
|
||||
| Jun 11 17:30 (commit `babd8d0c0`) | 华佗重排 Mapper 参数顺序,AppService 改为从方法参数取值 | ✅ 修复完成,三层对齐 |
|
||||
|
||||
**涉及文件**:
|
||||
|
||||
| 文件 | 问题 |
|
||||
|------|------|
|
||||
| `InHospitalRegisterAppMapper.xml` | 新增 `#{startTime}` 等引用(Jun 10),但 Mapper Java 未同步 |
|
||||
| `InHospitalRegisterAppMapper.java` | 缺少 `@Param("startTime")` / `@Param("endTime")` / `@Param("organizationId")` |
|
||||
| `InHospitalRegisterAppServiceImpl.java` | 调用 Mapper 时参数顺序与 Mapper 签名不匹配 |
|
||||
|
||||
**铁律违反**:违反铁律 4(前后端 API 路径/参数对齐)和铁律 19(编译错误不区分来源)——XML 更新后必须同步更新 Mapper Java 接口。
|
||||
|
||||
---
|
||||
|
||||
### 三、修复方案
|
||||
|
||||
**当前代码状态**:经 `defab36cc` + `babd8d0c0` 两次提交,修复已完成,编译通过(已验证 `mvn clean compile -DskipTests` BUILD SUCCESS)。
|
||||
|
||||
**已修复的对齐关系**:
|
||||
|
||||
1. **Mapper Java** (`InHospitalRegisterAppMapper.java:28-33`):`@Param("startTime")`, `@Param("endTime")`, `@Param("organizationId")` 已在 `queryWrapper` 之前
|
||||
2. **AppService** (`InHospitalRegisterAppServiceImpl.java:175-193`):方法签名接收 `Date startTime, Date endTime, Long organizationId`,调用 Mapper 时按正确顺序传入
|
||||
3. **Controller** (`InHospitalRegisterController.java:56-62`):`@RequestParam("startTime")` / `@RequestParam("endTime")` / `@RequestParam("organizationId")` 正确传递到 Service
|
||||
4. **Mapper XML**:`<if test='startTime != null'>` 正确引用 `#{startTime}`
|
||||
|
||||
**结论**:代码层面的修复已完成。需要:
|
||||
- 重新部署编译后的应用(当前服务器运行的是修复前的版本)
|
||||
- 验证部署后"待登记入院"和"已登记入院"两个列表页能正常加载数据
|
||||
|
||||
---
|
||||
|
||||
### 四、路由决策
|
||||
|
||||
**FIXER**: `guanyu`(后端开发)
|
||||
**REASON**:这是纯后端 MyBatis Mapper 参数绑定问题,代码已修复但需确认部署和运行验证。如果需要额外的接口测试或边界情况验证,交由 `guanyu` 执行后端验证。
|
||||
|
||||
---
|
||||
|
||||
## 路由决策
|
||||
- **FIXER_ID**: guanyu
|
||||
- **修复 Agent**: guanyu(后端)
|
||||
- **原因**: LLM 分析决策
|
||||
|
||||
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。
|
||||
Reference in New Issue
Block a user