---
frontend_status: "implemented"
frontend_owner: "hl-ui-codex"
frontend_ref: "mmg/hl-ui@06f9d4dce58ef64c3e5de96e44754c0793286d06"
updated_at: "2026-07-24T07:15:17.169Z"
---
# 车务：派单通知预览补齐接送与行程数据

> **服务**: hl-fleet-service（8087/8187）  
> **PR**: #5213  
> **Issue**: #5211  
> **日期**: 2026-07-24  
> **影响范围**: 管理后台派车弹窗“排车待确认”通知预览

---

## ⚠️ 关键变化

原预览接口只读取订单主表基础字段，导致已有大交通和行程的订单仍把“接团、送团、行程链接、有效期”渲染为空。现在预览与 HOLD 实际发送共用接送口径，并在不创建派单、不写短链记录的前提下补齐行程长链和有效期。

## 一、变更接口

| 接口 | 方法 | 路径 | 变更类型 |
|------|------|------|----------|
| 微信通知模板预览 | POST | `/admin/fleet/message-templates/{templateId}/render` | 响应内容修正，结构不变 |

### 入参

请求体字段、类型和必填规则均不变：

```json
{
  "orderId": "订单雪花 ID",
  "vehicleId": "车辆雪花 ID",
  "driverId": "司机雪花 ID",
  "serviceDates": ["2026-07-29", "2026-07-30", "2026-07-31"],
  "chargeableServiceDates": ["2026-07-29", "2026-07-30", "2026-07-31"],
  "vehicleFeeWaiverReason": null
}
```

### 出参

`MessageTemplateRenderRespVO` 结构仍为：

| 字段 | 类型 | 说明 |
|------|------|------|
| `renderedBody` | String | 已替换变量的完整通知正文 |
| `variablesUsed` | String[] | 模板实际引用的变量 key |

本次修正以下既有变量在 `renderedBody` 中的取值：

| 变量 | 新口径 |
|------|--------|
| `order.pickupInfo` | 从订单到达方向大交通格式化；无需平台接送或资料缺失时输出明确文案 |
| `order.dropoffInfo` | 从订单返程方向大交通格式化；单方向缺失不再留空 |
| `itinerary.url` | 使用 `orderId + 行程结束日` 无副作用现签订单级长链；签发失败时输出明确不可用文案 |
| `itinerary.expireAt` | 与行程链接签发口径同源计算；无法计算时输出“待确认” |

## 二、前端调用约束

- 前端无需新增请求字段，也无需自行拼接接送或行程文案。
- 继续直接展示后端返回的 `renderedBody`。
- 预览中的行程链接不会提前创建派单、派单短链或通知记录；真实发送仍由 HOLD 冻结链路生成稳定短链。
- 数据不可用时后端返回明确降级文案，前端不要再把这些文案转换为空串。

## 三、不影响范围

- 不修改模板、派单和通知接口的 JSON 结构。
- 不修改订单、大交通或行程数据。
- 不改变 HOLD 通知冻结、Outbox 投递和真实短链幂等规则。
- 不涉及 `hl-ui` 代码修改。

## 四、验证

- 定向测试：`MessageTemplateRenderServiceTest` + `AssignmentHoldNotificationSnapshotFactoryTest`，22/22 通过。
- 全量验证：`mvn -pl hl-fleet-service -am verify`，14 个 reactor 模块通过。
- Spotless：598 files clean。
- 测试环境网关验收将在 PR 合并并部署后补录到 Issue #5211。

## 五、相关文档

- [后端 Issue #5211](https://git.1814.love:8443/wx/HL/issues/5211)
- [后端 PR #5213](https://git.1814.love:8443/wx/HL/pulls/5213)
