4de1ea5209
1) **车牌匹配漏了规范化兜底(最严重)** DriverWaybillServiceImpl.assertCertified 把 splitPlates 返回的**规范化**车牌 直接与 plate_no 原始列做精确 IN。库中存在带间隔符/横线/大小写差异的车牌时 会命中 0 行,导致「名下无可用车辆」→ **已认证的司机被误判为未认证而拒绝接单**, 与本次改造的核心验收「已认证的车重新提交后仍可正常接单」相悖。 DriverCertServiceImpl.findByPlateWithinBound 同样问题:先精确 IN 取候选再规范化 filter,而 filter 只能收窄不能放宽,漏掉的候选永远找不回来(等于没做规范化匹配)。 改法:把「精确 IN 或 规范化后相等」抽成 VehiclePlateSupport.applyPlateMatch, 三处调用点(含原先自己实现的 DriverAppServiceImpl.myVehicles)统一使用。 并加测试断言 SQL 表达式覆盖 Java 侧剔除的全部字符、且必须带 OR 兜底, 防止两边日后悄悄分叉。 2) **审核详情的提交人姓名恒为空**:CertAuditDetailVO.submitUserName 声明了却从未赋值, 违反「VO 展示字段须由服务端用 UserCache 填好」的规范。已补。 3) **分页未走项目统一写法**:原用 Page.of 手搓,全模块无先例。改为 Controller 收 Query + Condition.getPage(query),与 AccidentRecordController 等一致。 Query 绑定的正是 current/size,故三端契约不受影响。 顺带删除无任何调用者的 ICertAuditService.getRecordOrNull(推测性抽象 + 纯转发)。 82 个测试通过。