# 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}` 的 `` 条件 | ⚠️ 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**:`` 正确引用 `#{startTime}` **结论**:代码层面的修复已完成。需要: - 重新部署编译后的应用(当前服务器运行的是修复前的版本) - 验证部署后"待登记入院"和"已登记入院"两个列表页能正常加载数据 --- ### 四、路由决策 **FIXER**: `guanyu`(后端开发) **REASON**:这是纯后端 MyBatis Mapper 参数绑定问题,代码已修复但需确认部署和运行验证。如果需要额外的接口测试或边界情况验证,交由 `guanyu` 执行后端验证。 --- ## 路由决策 - **FIXER_ID**: guanyu - **修复 Agent**: guanyu(后端) - **原因**: LLM 分析决策 > ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。