4.5 KiB
4.5 KiB
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)。
已修复的对齐关系:
- Mapper Java (
InHospitalRegisterAppMapper.java:28-33):@Param("startTime"),@Param("endTime"),@Param("organizationId")已在queryWrapper之前 - AppService (
InHospitalRegisterAppServiceImpl.java:175-193):方法签名接收Date startTime, Date endTime, Long organizationId,调用 Mapper 时按正确顺序传入 - Controller (
InHospitalRegisterController.java:56-62):@RequestParam("startTime")/@RequestParam("endTime")/@RequestParam("organizationId")正确传递到 Service - Mapper XML:
<if test='startTime != null'>正确引用#{startTime}
结论:代码层面的修复已完成。需要:
- 重新部署编译后的应用(当前服务器运行的是修复前的版本)
- 验证部署后"待登记入院"和"已登记入院"两个列表页能正常加载数据
四、路由决策
FIXER: guanyu(后端开发)
REASON:这是纯后端 MyBatis Mapper 参数绑定问题,代码已修复但需确认部署和运行验证。如果需要额外的接口测试或边界情况验证,交由 guanyu 执行后端验证。
路由决策
- FIXER_ID: guanyu
- 修复 Agent: guanyu(后端)
- 原因: LLM 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。