4.8 KiB
4.8 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base, generated
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base | generated |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | 5689 | 派单通知模板加载失败修复(短链业务不匹配降级 + 全程行结束日口径统一 + 拆箱 NPE) | admin | wx | 修复 | deployed | verified | not_required | 后端完成:PR #5692+#5694 已合并 dev-v3(089d1a7e0)并部署 TEST(hl-fleet-service 双实例 UP)。根因两层:①冻结链/预览链对全程行(service_date NULL)结束日口径不一致(startDate vs endDate)→ 短链 tripEndDate 漂移 → matchesBusiness 不匹配抛 605308 冒泡;②确认执行中间态(ASSIGNED+dispatchPlan 未冻结)ItineraryTokenService 三元 long?Long 拆箱 NPE 500。修复:预览链 605308/身份未就绪统一降级「行程链接暂不可用,请联系车务确认」不再 500 阻塞整条模板渲染;SnapshotFactory endDateOf 口径统一;三元装箱 null 安全。网关验证 26-8778(实证单)6/6:render 200 正文完整、render-batch item success=true。 | 2026-08-08 | dev-v3 | 2026-08-08T12:40:00+08:00 |
派单通知模板加载失败修复(#5689)
背景
派单页消息预览区「通知模板加载失败,请重试」+「派车前先选择并成功渲染通知模板」(实证 26-8778)。
根因(网关 + 库表 + 日志定位)
- 短链业务不匹配 605308:
MessageTemplateRenderService(预览链)对全程行(service_date NULL)结束日取endDate(#5562 口径),而AssignmentHoldNotificationSnapshotFactory(冻结链)取startDate——同一派车组两条链算出不同 tripEndDate →createOrGet命中已存在短链但matchesBusiness(tripEndDate)不匹配 →requireSameBusiness抛 605308 冒泡 → 渲染接口失败。 - 拆箱 NPE 500:确认执行后派车行处于 ASSIGNED + dispatchPlan 未冻结(finalized=0、generation=null)中间态,
ItineraryTokenService三元holdPendingIdentity ? long常量 : Long字段被强制按 long 求值 → false 分支对 null 拆箱 → NPE 500(在既有 fail-closed 检查之前)。 - render-batch 单项失败被容错吞掉(success=false)→ 前端只看到「加载失败」更隐蔽。
修复(PR #5692 + #5694)
- 预览容错:
resolveItineraryShortLink捕获 BusinessException 605308 + IllegalStateException 身份未就绪(#5675 白名单)→ 统一降级为「行程链接暂不可用,请联系车务确认」,不再 500 阻塞整条模板渲染;短链配置/落库等非业务异常仍 fail-fast(#5461 不变)。通知发送链(SnapshotFactory/EffectService)不走本方法,保持 fail-closed。 - 口径统一:
AssignmentHoldNotificationSnapshotFactory新增endDateOf(serviceDate NULL → endDate),冻结链与预览链 tripEndDate 一致,根除短链日期漂移。 - NPE 修复:
ItineraryTokenService三元改Long.valueOf(PENDING_DISPATCH_PLAN_GENERATION),null 不拆箱 → 正常走「派车组身份不完整或已失效」fail-closed → 预览降级。
行为变化
- 模板渲染接口不再因短链中间态/业务不匹配而 500;预览区模板正常加载渲染,行程链接不可用时显示人工介入文案(而非加载失败)。
- 派车组确认执行后(dispatchPlan 未冻结窗口)预览行程链接显示「行程链接暂不可用,请联系车务确认」,dispatchPlan 冻结后自动恢复可点链接。
- 错误码 605308/600801/600800 口径不变;非业务异常(如短链配置缺失)仍按原样上抛。
前端动作
- 预览区「通知模板加载失败,请重试」为后端 500 的兜底文案;本次修复后正常场景不再出现。若仍出现,请按响应 code/message 反馈后端(600800 模板变量缺失 / 600801 模板不存在 / 605308 短链业务不匹配)。
- 无需字段适配;渲染正文中的行程链接可能为「行程链接暂不可用,请联系车务确认」占位文案(属正常业务态)。
验证证据
- 定向 64/64(render 605308 降级、非业务异常上抛、全程行冻结 endDate 口径、ASSIGNED 中间态不 NPE、预览降级);spotless:check 通过。
- 全量 verify 3287+(另一会话并行占用 3306 测试容器导致 MySQL8033 固定端口类竞争失败——基线脆弱项,主工作区干净基线同失败已证;错峰重跑补录)。
- 网关实测(TEST,26-8778 实证单)6/6:单渲染 200 + 正文完整(呼伦旅行—订车单/请确认以下订车信息)+ itinerary.url 降级文案 + 有效期正常计算;render-batch 200 + item success=true(修复前 NPE 500 / success=false)。
- 部署:hl-fleet-service dev-v3=089d1a7e0 双实例 UP(PR #5692+#5694)。