From 75b2033fa37a50c2b4f12da80972935a94a456df Mon Sep 17 00:00:00 2001 From: yaosutu <770858045@qq.com> Date: Tue, 21 Apr 2026 20:46:19 +0800 Subject: [PATCH] =?UTF-8?q?changelog(trip):=20=E8=A1=8C=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=A1=8C=E7=A8=8B=E9=A1=B5=E8=81=9A=E5=90=88?= =?UTF-8?q?=203=20=E8=BF=9E=20(PR=20#1123/#1124/#1125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - order-v2: TripDetailVO itineraryDays/dailyItinerary/hotelArrangements 强类型化 (#1119/#1123) - mp+order-v2: today-dashboard 聚合扩展 DAY 导航/时间线/今晚住宿/明日预告 + 领队车牌 (#1120/#1124) - resource: Hotel 表新增 WiFi SSID/密码字段 (#1121/#1125) --- ...-21_mp_today-dashboard-full-aggregation.md | 146 ++++++++++++++++++ ...026-04-21_order-v2_trip-detail-vo-typed.md | 88 +++++++++++ .../2026-04-21_resource_hotel-wifi-fields.md | 48 ++++++ 3 files changed, 282 insertions(+) create mode 100644 changelogs/2026-04/2026-04-21_mp_today-dashboard-full-aggregation.md create mode 100644 changelogs/2026-04/2026-04-21_order-v2_trip-detail-vo-typed.md create mode 100644 changelogs/2026-04/2026-04-21_resource_hotel-wifi-fields.md diff --git a/changelogs/2026-04/2026-04-21_mp_today-dashboard-full-aggregation.md b/changelogs/2026-04/2026-04-21_mp_today-dashboard-full-aggregation.md new file mode 100644 index 0000000..c37d72b --- /dev/null +++ b/changelogs/2026-04/2026-04-21_mp_today-dashboard-full-aggregation.md @@ -0,0 +1,146 @@ +# 行程中今日页聚合接口扩展: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 #1123(TripDetailVO 强类型化)、PR #1121(Hotel WiFi 字段,WiFi 数据视其落地情况) + +--- + +## 一、影响接口 + +### `GET /mp/trip/today-dashboard` — 行程中今日页聚合 + +既有字段 `today` / `leader` / `weather` / `sosContact` 保持不变,**新增 5 字段**。 + +## 二、新增字段 + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `todayProgressPercent` | `Integer` | 今日进度(0~100;无行程中订单时 null) | +| `dayNav` | `List` | 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` | 已完成节点(灰色简版行) | +| `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` | 酒店照片 | +| `rooms` | `List` | 房型(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` diff --git a/changelogs/2026-04/2026-04-21_order-v2_trip-detail-vo-typed.md b/changelogs/2026-04/2026-04-21_order-v2_trip-detail-vo-typed.md new file mode 100644 index 0000000..672c470 --- /dev/null +++ b/changelogs/2026-04/2026-04-21_order-v2_trip-detail-vo-typed.md @@ -0,0 +1,88 @@ +# 行程详情接口 itineraryDays / dailyItinerary / hotelArrangements 三字段强类型化 — 2026-04-21 + +> **服务** hl-order-service-v2(端口 8094)· **类型** refactor · **关联** Issue #1119 / PR #1123 +> **破坏性程度**:JSON 结构完全不变,**前端只需升级 TypeScript 类型定义** + +--- + +## 一、影响接口 + +所有返回 `TripDetailVO` 的接口(三字段类型变更,字段名和 JSON 路径保持一致): + +- `GET /admin/order/{orderId}/trip` — 管理端行程详情 +- `GET /mp/trip/{orderId}` — 小程序行程详情(BFF 透传) +- `GET /mp/trip/today` — 小程序今日行程(BFF 透传) + +## 二、字段类型变更 + +| 字段 | 旧类型 | 新类型 | +| --- | --- | --- | +| `itineraryDays` | `List>` | `List`(按 `dayNumber` 升序) | +| `dailyItinerary` | `List>` | `List`(所有天节点扁平拼接) | +| `hotelArrangements` | `List>` | `List`(按 `hotelId` 合并同家酒店多房型) | + +## 三、新强类型结构 + +### `TripItineraryDayVO`(每日行程) + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `dayNumber` | `Integer` | 第几天(从 1 开始) | +| `date` | `LocalDate` | 当天日期 | +| `weekday` | `String` | 星期中文(如 "周三") | +| `dayTitle` | `String` | 当日主题 | +| `scenicCount` | `Integer` | 当日景点数(已排除 SKIPPED 节点) | +| `dayDistanceKm` | `Integer` | 当日总里程(km) | +| `nodes` | `List` | 节点时间线 | +| `hotels` | `List` | 当晚酒店(无则为空列表) | + +### `TripItineraryNodeVO`(时间线节点) + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `nodeSeq` | `Integer` | 当天第几站(从 1 开始) | +| `nodeType` | `String` | `SCENIC` / `MEAL` / `HOTEL` / `TRANSPORT` / `ACTIVITY` / `GATHER` / `DISMISS` | +| `nodeTypeLabel` | `String` | 中文标签 | +| `title` | `String` | 节点标题 | +| `subtitle` | `String` | 副标题 / 描述 | +| `plannedTime` | `String` | 计划时间 `HH:mm` | +| `durationMinutes` | `Integer` | 至下一节点车程(分钟) | +| `distanceKm` | `Integer` | 至下一节点距离(km) | +| `editStatus` | `String` | `ADDED` / `REPLACED` / `MODIFIED` / `SKIPPED`;null=未改动 | +| `resourceId` | `Long` | 关联资源主键 | +| `resourceType` | `String` | 对齐 nodeType | + +### `TripHotelArrangementVO`(每晚酒店) + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `dayNumber` | `Integer` | 对应第几天 | +| `date` | `LocalDate` | 入住日期 | +| `hotelId` | `Long` | 酒店ID | +| `hotelName` | `String` | 酒店名称 | +| `checkInTime` | `String` | 入住时间 `HH:mm` | +| `checkOutTime` | `String` | 退房时间 `HH:mm` | +| `longitude` / `latitude` | `BigDecimal` | 坐标(导航用) | +| `address` | `String` | 地址 | +| `photoUrls` | `List` | 酒店照片 | +| `rooms` | `List` | 房型列表 | +| `wifi` | `TripHotelWifiVO` | WiFi(酒店未录入时为 null) | +| `changedFromYesterday` | `Boolean` | 与前一晚不是同一家酒店 | + +### `TripHotelRoomVO` / `TripHotelWifiVO` + +``` +TripHotelRoomVO { roomType, quantity, areaSqm, amenities: List } +TripHotelWifiVO { ssid, password } +``` + +## 四、兼容性 + +- **JSON 结构完全不变**:字段名、嵌套路径、值类型在 JSON 层保持一致,前端只需把 TypeScript 类型从 `Record[]` 升级为强类型接口 +- 聚合接口 `GET /mp/trip/today-dashboard` 下游消费已同步升级(见 `2026-04-21_mp_today-dashboard-full-aggregation.md`) + +## 五、关联 + +- Issue: [wx/HL#1119](https://git.1814.love:8443/wx/HL/issues/1119) +- PR: [wx/HL#1123](https://git.1814.love:8443/wx/HL/pulls/1123)(已合并到 dev) +- 后续:酒店 WiFi 字段补齐见 `2026-04-21_resource_hotel-wifi-fields.md` diff --git a/changelogs/2026-04/2026-04-21_resource_hotel-wifi-fields.md b/changelogs/2026-04/2026-04-21_resource_hotel-wifi-fields.md new file mode 100644 index 0000000..02c995a --- /dev/null +++ b/changelogs/2026-04/2026-04-21_resource_hotel-wifi-fields.md @@ -0,0 +1,48 @@ +# Hotel 资源新增 WiFi SSID / 密码字段 — 2026-04-21 + +> **服务** hl-resource-service(端口 8082)· **类型** feat · **关联** Issue #1121 / PR #1125 +> **场景**:为「行程中 · 今晚住宿」卡 `wifiBar` 区块提供数据源 + +--- + +## 一、数据库变更 + +```sql +ALTER TABLE hotel + ADD COLUMN wifi_ssid VARCHAR(64) NULL COMMENT 'WiFi SSID' AFTER facilities, + ADD COLUMN wifi_password VARCHAR(64) NULL COMMENT 'WiFi password' AFTER wifi_ssid; +``` + +迁移脚本:`sql/V20260421__hotel_add_wifi_fields.sql` + +## 二、影响接口 + +### ✏️ `POST /admin/hotel`、`PUT /admin/hotel/{hotelId}` — 酒店创建 / 修改 + +请求体新增字段: + +| 字段 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| `wifiSsid` | `String` | 否 ≤64 | WiFi SSID | +| `wifiPassword` | `String` | 否 ≤64 | WiFi 密码 | + +### ✏️ `GET /admin/hotel/{hotelId}` — 酒店详情 + +`HotelVO` 新增返回字段: + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `wifiSsid` | `String` | WiFi SSID(未录入为 null) | +| `wifiPassword` | `String` | WiFi 密码(未录入为 null) | + +## 三、下游联动 + +- `hl-order-service-v2` 的 `TripHotelArrangementVO.wifi` / `hl-mp-service` 的 `MpTripHotelArrangementVO.wifi` 字段结构已在 Issue #1119 / #1120 定义完毕 +- 本 PR 只完成 `hotel` 表的字段落库;order-v2 聚合行程时从 resource 拉取 WiFi 的 Feign 链路**暂未实现**,`todayHotel.wifi` 仍为 `null`,待后续独立 PR 接通 +- 管理端「酒店编辑」表单的 WiFi 录入 UI 需前端同事配合添加 + +## 四、关联 + +- Issue: [wx/HL#1121](https://git.1814.love:8443/wx/HL/issues/1121) +- PR: [wx/HL#1125](https://git.1814.love:8443/wx/HL/pulls/1125)(已合并到 dev) +- 同批次:`2026-04-21_order-v2_trip-detail-vo-typed.md` · `2026-04-21_mp_today-dashboard-full-aggregation.md`