docs(changelog): #8228 HOLD 派单降级车务站内信补齐跳转链接,指向车务看板
changelog-filename-gate / validate (push) Failing after 2s
changelog-filename-gate / validate (push) Failing after 2s
Refs #8228 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cfipfut7pN3pLCRibrYygP
这个提交包含在:
@@ -0,0 +1,93 @@
|
||||
---
|
||||
schema: "hl-changelog/v2"
|
||||
ticket: "8228"
|
||||
title: "HOLD 派单降级车务站内信补齐跳转链接,指向车务看板"
|
||||
consumer: "admin"
|
||||
author: "wx(GIT)"
|
||||
change_type: "修复"
|
||||
backend_status: "deployed"
|
||||
gateway_status: "not_required"
|
||||
frontend_status: "not_required"
|
||||
frontend_owner: ""
|
||||
frontend_ref: ""
|
||||
target_release: ""
|
||||
verified_at: ""
|
||||
status_note: "接口路径、请求参数、响应字段均未变,变的是 admin_message 表里这一类消息 link 字段的取值。事件识别特征为 event_code=FLEET_DISPATCH_CREATED、biz_type=FLEET_ASSIGNMENT_HOLD、category_code=SYSTEM,触发条件是 fleet 派单进 HOLD 且给司机的短信通道返回 SKIP_NO_TEMPLATE(HOLD 占位无行程短链 code,或短信模板未配置),这条降级分支不看该事件的 inapp_enabled 开关。user-service 用 Flyway V20260923_001 给该事件补上链接模板 /fleet/board?orderId=${orderId},fleet 发出的 HOLD 通知在能确定唯一订单时于 extras 里带 orderId。PR #8299 已合并(3227d495c),user-service 与 fleet 均已部署测试服,测试服实测该事件配置已是该模板。backend_status=deployed。gateway_status=not_required,无新增路由,消息仍走既有列表接口读取。frontend_status=not_required,前端零改动,link 走既有 resolveJumpLink 逻辑;车务看板当前不读取 orderId 这个 query,两种取值均落在看板首页;存量消息不回填,link 仍为空。"
|
||||
updated_at: "2026-09-23"
|
||||
base: "dev-v3"
|
||||
---
|
||||
|
||||
# 车务通知: HOLD 派单降级车务站内信补齐跳转链接
|
||||
|
||||
> **存放目录**: 二期(order-v3)→ `changelogs-v2/2026-09/`
|
||||
>
|
||||
> **服务**: hl-user-service(通知配置)+ hl-fleet-service(消息 extras)
|
||||
> **PR**: [#8299](https://git.1814.love:8443/wx/HL/pulls/8299)
|
||||
> **Issue**: [#8228](https://git.1814.love:8443/wx/HL/issues/8228)
|
||||
> **日期**: 2026-09-23
|
||||
> **影响范围**: 站内信列表中 `event_code=FLEET_DISPATCH_CREATED` 且 `biz_type=FLEET_ASSIGNMENT_HOLD` 的记录的 `link` 字段取值;读取这些消息的接口本身未变
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 关键变化
|
||||
|
||||
**这一类“HOLD 派单降级车务”站内信的 `link` 字段现在有值了。** 消息的识别特征、触发条件都没变;变的只是这一类消息的跳转地址:本次上线之前发出的消息 `link` 为空,之后新产生的按下文规则带跳转链接。
|
||||
|
||||
---
|
||||
|
||||
## 一、触发条件与消息识别(未变)
|
||||
|
||||
fleet 派单进入 HOLD 状态、给司机的短信通道返回 `SKIP_NO_TEMPLATE`(HOLD 占位没有行程短链 code,或短信模板未配置)时,通知中心按既有规则降级为给车务角色(`VEHICLE_MANAGER`)的后台管理员发一条站内信。这条消息在 `admin_message` 表里的识别特征:
|
||||
|
||||
- `event_code = FLEET_DISPATCH_CREATED`
|
||||
- `biz_type = FLEET_ASSIGNMENT_HOLD`
|
||||
- `category_code = SYSTEM`
|
||||
|
||||
以上触发条件和识别特征本次**都没有变**。这条降级分支也**不看**该事件的 `inapp_enabled` 开关——测试服上这个开关当前是 0,降级站内信照样会发,不受它影响。
|
||||
|
||||
---
|
||||
|
||||
## 二、`link` 取值规则(本次新增)
|
||||
|
||||
| 场景 | `link` 取值 |
|
||||
|---|---|
|
||||
| fleet 能确定唯一订单 | `/fleet/board?orderId=<订单ID>` |
|
||||
| fleet 确定不了唯一订单(同一派车组的行跨了两张订单,或行上缺订单 ID) | `/fleet/board?orderId=`(query 值为空,不会报错) |
|
||||
|
||||
实现方式:user-service 用 Flyway `V20260923_001` 给该事件的通知配置补上链接模板 `/fleet/board?orderId=${orderId}`;fleet 发出的 HOLD 通知在能确定唯一订单时于 extras 里带上 `orderId`,通知中心降级为站内信时用它渲染出最终链接。
|
||||
|
||||
---
|
||||
|
||||
## 三、边界
|
||||
|
||||
1. **存量消息不回填**:本次只改配置和消息生成逻辑,不动已经发出的历史消息。测试服上 2026-08-05 至 2026-08-08 期间发出的 234 条这类站内信 `link` 仍为空,前端 `resolveJumpLink` 对空 link 返回 `null`,这些消息依旧没有跳转入口;只有之后新产生的才带链接。
|
||||
2. **车务看板当前不读取 `orderId` 这个 query**:`hl-ui`(`origin/v2.1` @ `31a198613`)的车务看板 `src/views/fleet/board/**` 目前不读取 `route.query`(对该目录 86 个文件检索 `route.query` / `useRoute` / `$route` 均为 0 命中;同一检索在兄弟目录 `src/views/fleet/matrix/` 有命中,检索本身有效)。带 `orderId` 与不带 `orderId` 的两种链接点开后都落在看板首页,不会按订单定位。
|
||||
3. **`link` 走既有跳转逻辑,前端无需新增处理**:`link` 是后台相对路由,前端现有的 `resolveJumpLink`(`src/views/notification/MyMessages/jumpBiz.js:22-32`)直接把它交给 `router.push`;`kv.endsWith('=')` 时会把整段 query 砍掉(`:27-31`),所以 `/fleet/board?orderId=` 实际会跳到 `/fleet/board`,`/fleet/board?orderId=123` 原样跳转,两种情形都不会报错。
|
||||
4. **生产环境没有这类消息**:二期(order-v3、fleet)尚未上生产,本次改动目前只在测试服可见。
|
||||
|
||||
---
|
||||
|
||||
## 四、测试环境已验证
|
||||
|
||||
- PR [#8299](https://git.1814.love:8443/wx/HL/pulls/8299),合并提交 [`3227d495c`](https://git.1814.love:8443/wx/HL/commit/3227d495c),user-service、fleet 均已部署到测试服。
|
||||
- 测试服上 `notification_event_config` 中 `event_code=FLEET_DISPATCH_CREATED` 那一行的 `inapp_link_template` 实测已是 `/fleet/board?orderId=${orderId}`。
|
||||
|
||||
---
|
||||
|
||||
## 五、可选增强(非必须,供参考)
|
||||
|
||||
如果车务看板以后想按订单定位,query 参数名已经固定是 `orderId`,值是订单 ID 字符串,直接读取即可,不需要另外跟后端约定参数名。这是可选增强,不是必须动作。
|
||||
|
||||
---
|
||||
|
||||
## 关联 / 联系人
|
||||
|
||||
### 链接
|
||||
|
||||
- **Issue**: [#8228](https://git.1814.love:8443/wx/HL/issues/8228)
|
||||
- **PR**: [#8299](https://git.1814.love:8443/wx/HL/pulls/8299)
|
||||
- **Merge commit**: [`3227d495c`](https://git.1814.love:8443/wx/HL/commit/3227d495c)
|
||||
|
||||
### 联系人
|
||||
|
||||
- **后端负责人**: @wx
|
||||
在新工单中引用
屏蔽一个用户