hl-api-changelog/changelogs/2026-04/2026-04-21_mp_today-dashboard-full-aggregation.md
yaosutu 75b2033fa3 changelog(trip): 行程中当前行程页聚合 3 连 (PR #1123/#1124/#1125)
- order-v2: TripDetailVO itineraryDays/dailyItinerary/hotelArrangements 强类型化 (#1119/#1123)
- mp+order-v2: today-dashboard 聚合扩展 DAY 导航/时间线/今晚住宿/明日预告 + 领队车牌 (#1120/#1124)
- resource: Hotel 表新增 WiFi SSID/密码字段 (#1121/#1125)
2026-04-21 20:46:19 +08:00

147 行
5.7 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 行程中今日页聚合接口扩展DAY 导航 / 时间线 / 今晚住宿 / 明日预告 — 2026-04-21
> **服务** hl-mp-service端口 8085+ hl-order-service-v2端口 8094· **类型** feat · **关联** Issue #1120 / PR #1124
> **原型 Node IDs**aufKi / NTzWR / JZcMi / 1ne4B / oVfPB / OwsOd"行程中 · 当前行程"页)
> **依赖**PR #1123TripDetailVO 强类型化、PR #1121Hotel WiFi 字段,WiFi 数据视其落地情况)
---
## 一、影响接口
### `GET /mp/trip/today-dashboard` — 行程中今日页聚合
既有字段 `today` / `leader` / `weather` / `sosContact` 保持不变,**新增 5 字段**。
## 二、新增字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `todayProgressPercent` | `Integer` | 今日进度0~100;无行程中订单时 null |
| `dayNav` | `List<MpTripDayNavVO>` | DAY Tab 导航列表(原型 `dayNavV2` |
| `todayTimeline` | `MpTodayTimelineVO` | 今日时间线(原型 `timelineV2`;无行程中订单时 null |
| `todayHotel` | `MpTripHotelArrangementVO` | 今晚住宿(原型 `hotelSection` / `hotelCard` |
| `tomorrow` | `MpTomorrowPreviewVO` | 明日预告(原型 `tmr` |
### `MpTripDayNavVO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `dayNumber` | `Integer` | 第几天 |
| `date` | `LocalDate` | 日期 |
| `dayStatus` | `String` | `DONE` / `CURRENT` / `PENDING` |
### `MpTodayTimelineVO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `completed` | `List<MpTripItineraryNodeVO>` | 已完成节点(灰色简版行) |
| `current` | `MpTripItineraryNodeVO` | 当前节点(今日全部完成则为 null |
| `next` | `MpTripItineraryNodeVO` | 下一节点(今日全部完成则为 null |
**节点状态推导规则**:按 `plannedTime` 升序排序,取第一个 `plannedTime >= 当前时间` 的节点为 `current`,前面为 `completed`,下一个为 `next`
### `MpTripItineraryNodeVO`(时间线节点精简版)
```
nodeSeq, nodeType, nodeTypeLabel, title, subtitle,
plannedTime(HH:mm), durationMinutes, distanceKm
```
### `MpTripHotelArrangementVO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `dayNumber` / `date` / `hotelId` / `hotelName` | — | 基本 |
| `checkInTime` / `checkOutTime` | `String` | `HH:mm` |
| `longitude` / `latitude` / `address` | — | 导航坐标 |
| `photoUrls` | `List<String>` | 酒店照片 |
| `rooms` | `List<MpTripHotelRoomVO>` | 房型roomType / quantity / areaSqm / amenities |
| `wifi` | `MpTripHotelWifiVO` | WiFi `{ ssid, password }`(酒店未录入时为 null |
| `changedFromYesterday` | `Boolean` | 与前一晚 `hotelId` 不同时为 `true`(前端据此展示"已换酒店·带好行李" |
### `MpTomorrowPreviewVO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `dayNumber` | `Integer` | 明日 `DAY+1` |
| `routeSummary` | `String` | `"景点1 → 景点2 → 景点3"`(仅取 SCENIC/ACTIVITY 节点) |
| `distanceKm` | `Integer` | 明日总里程 |
| `plannedDepartureTime` | `String` | `HH:mm` |
| `reminderText` | `String` | 后端模板化 `"明早 {plannedDepartureTime} 出发,请提前收拾行李"` |
## 三、联系领队补字段
### `MpGuideInfoVO` 新增
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `plateNumber` | `String` | 领队随行车辆车牌号(取 `order_vehicle_assignment` 第一条;未分配为 null |
影响接口:`GET /mp/order/{orderId}/guide` + `GET /mp/trip/today-dashboard` 里的 `leader`
## 四、空态行为
| 场景 | 行为 |
| --- | --- |
| 无行程中订单 | `today` / `leader` / `todayTimeline` / `todayHotel` / `tomorrow` 均为 null;`dayNav = []``todayProgressPercent = null``sosContact` 仍有客服电话 |
| 今天是最后一天 | `tomorrow = null` |
| 今晚无住宿 | `todayHotel = null` |
| 今日节点全部完成 | `todayTimeline.current` / `next` 为 null,`completed` 为全部节点 |
| 酒店未录入 WiFi | `todayHotel.wifi = null`Issue #1121 落地后自动有值) |
## 五、响应示例(部分)
```json
{
"code": 200,
"data": {
"today": { "...": "(保持不变)" },
"leader": {
"staffId": 9001, "name": "巴图",
"phone": "138****5678",
"plateNumber": "蒙E·8A66",
"assigned": true
},
"todayProgressPercent": 40,
"dayNav": [
{ "dayNumber": 1, "date": "2026-07-01", "dayStatus": "DONE" },
{ "dayNumber": 2, "date": "2026-07-02", "dayStatus": "CURRENT" },
{ "dayNumber": 3, "date": "2026-07-03", "dayStatus": "PENDING" }
],
"todayTimeline": {
"completed": [
{ "nodeSeq": 1, "nodeType": "SCENIC", "title": "海拉尔出发", "plannedTime": "08:00" }
],
"current": {
"nodeSeq": 2, "nodeType": "SCENIC", "title": "莫日格勒河",
"subtitle": "九曲十八弯", "plannedTime": "10:00",
"durationMinutes": 40, "distanceKm": 50
},
"next": { "nodeSeq": 3, "nodeType": "MEAL", "title": "蒙式午餐", "plannedTime": "12:00" }
},
"todayHotel": {
"dayNumber": 2, "date": "2026-07-02",
"hotelId": 500002, "hotelName": "额尔古纳大酒店",
"checkInTime": "14:00", "checkOutTime": "12:00",
"rooms": [{ "roomType": "大床房", "quantity": 1 }],
"wifi": null,
"changedFromYesterday": true
},
"tomorrow": {
"dayNumber": 3,
"routeSummary": "根河湿地 → 白桦林",
"distanceKm": 180,
"plannedDepartureTime": "08:00",
"reminderText": "明早 08:00 出发,请提前收拾行李"
}
}
}
```
## 六、关联
- Issue: [wx/HL#1120](https://git.1814.love:8443/wx/HL/issues/1120)
- PR: [wx/HL#1124](https://git.1814.love:8443/wx/HL/pulls/1124)(已合并到 dev
- 前置:`2026-04-21_order-v2_trip-detail-vo-typed.md`
- 后续:`2026-04-21_resource_hotel-wifi-fields.md`