docs(changelog): #5379 preview refundLines 补齐完整响应契约(15 字段+旧分组保留说明)
所有检测均成功
changelog-filename-gate / validate (push) Successful in 2s
所有检测均成功
changelog-filename-gate / validate (push) Successful in 2s
这个提交包含在:
父节点
5c24db01c5
当前提交
2c0c2367db
@ -13,7 +13,7 @@ frontend_ref: ""
|
|||||||
target_release: ""
|
target_release: ""
|
||||||
verified_at: "2026-08-03"
|
verified_at: "2026-08-03"
|
||||||
status_note: "后端实现完成:双模块 verify 通过(order 7402 全绿 / fleet 3010 仅 Docker 环境型 1 error),本单新增代码行覆盖率 91.7%,PR #5417+#5445 已合并 dev-v3 并部署 TEST(fleet→order-v3 顺序),网关已验证:预览成功路径(15 行 VEHICLE+terminateDate wire key)、终止提交成功(COMPLETED+PENDING_REVIEW+settlement refund 落库)、幂等重放(同 terminateRefundId)、阻断路径(581018 COMPLETED 拒绝/584100 费用不可用 fail-closed)、空集路径(无需求允许空车辆成本);管理后台已由 Pi 领取并开始兼容适配。"
|
status_note: "后端实现完成:双模块 verify 通过(order 7402 全绿 / fleet 3010 仅 Docker 环境型 1 error),本单新增代码行覆盖率 91.7%,PR #5417+#5445 已合并 dev-v3 并部署 TEST(fleet→order-v3 顺序),网关已验证:预览成功路径(15 行 VEHICLE+terminateDate wire key)、终止提交成功(COMPLETED+PENDING_REVIEW+settlement refund 落库)、幂等重放(同 terminateRefundId)、阻断路径(581018 COMPLETED 拒绝/584100 费用不可用 fail-closed)、空集路径(无需求允许空车辆成本);管理后台已由 Pi 领取并开始兼容适配。"
|
||||||
updated_at: "2026-08-03"
|
updated_at: "2026-08-04"
|
||||||
base: "dev-v3"
|
base: "dev-v3"
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -44,10 +44,47 @@ base: "dev-v3"
|
|||||||
|
|
||||||
**出参**: `Result<OrderTerminateRefundPreviewRespVO>`
|
**出参**: `Result<OrderTerminateRefundPreviewRespVO>`
|
||||||
|
|
||||||
|
### refundLines[] 统一资源行(新逻辑主用,提交 `lineUsages` 按 `lineKey` 回传)
|
||||||
|
|
||||||
|
`refundLines` 为 `List<TerminateRefundItemVO>`,住宿/门票/活动/服务/交通/备品/用车/保险全部资源统一展平为行,已按 `dayNumber` 展开(用车每天一行)。
|
||||||
|
|
||||||
|
| 字段 | 类型 | 说明 | 示例 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| `refundLines[].lineKey` | String | 统一退款资源行 key,提交 `lineUsages` 时原样回传 | `ITINERARY_NODE:97010:2` |
|
||||||
|
| `refundLines[].categoryCode` | String | **资源类型 discriminator**:`ROOM`/`TICKET`/`ACTIVITY`/`SERVICE`/`TRANSPORT`/`SUPPLIES`/`VEHICLE`/`INSURANCE`,前端据此判断每行资源类型 | `SERVICE` |
|
||||||
|
| `refundLines[].categoryName` | String | 资源分类名称(与 categoryCode 对应) | `服务` |
|
||||||
|
| `refundLines[].sourceType` | String | **资源来源类型 discriminator**:`HOTEL_ASSIGNMENT`/`ITINERARY_NODE`/`BATCH_SUPPLIES`/`PRODUCT_SUPPLIES`/`VEHICLE_ASSIGNMENT`/`INSURANCE_ORDER`,决定 `sourceId` 语义 | `ITINERARY_NODE` |
|
||||||
|
| `refundLines[].sourceId` | String(Long) | 资源来源 ID,语义由 `sourceType` 决定(Long 序列化为 String 防 JS 精度丢失) | `97010` |
|
||||||
|
| `refundLines[].refId` | String(Long) | 资源配单记录 ID(String 防 JS 精度丢失) | `96011` |
|
||||||
|
| `refundLines[].name` | String | 资源名称快照(酒店名/景点名/车型) | `拉萨瑞吉·大床房` |
|
||||||
|
| `refundLines[].dayNumber` | Integer | 第几天(住宿/门票/用车每天行有值;保险为 null) | `1` |
|
||||||
|
| `refundLines[].dealPrice` | String(BigDecimal) | 结算单价(住宿=settlementPrice/间·晚;门票按节点价格口径;用车=dailyFee) | `1280.00` |
|
||||||
|
| `refundLines[].quantity` | Integer | 数量(住宿=间数;门票=张数;用车=车辆数;保险=1) | `1` |
|
||||||
|
| `refundLines[].billingType` | String | 计费方式快照,备品等资源使用 | `PER_QUANTITY` |
|
||||||
|
| `refundLines[].totalAmount` | String(BigDecimal) | 行金额合计 = dealPrice × quantity | `1280.00` |
|
||||||
|
| `refundLines[].defaultUsed` | Boolean | 前端初始化展示值;车辆行最终是否已发生由提交时 Fleet `serviceDate` 与终止日重新判定,非车辆行按提交 `used` 重算 | `false` |
|
||||||
|
| `refundLines[].locked` | Boolean | 是否锁定不退(true=保险等不可退资源) | `false` |
|
||||||
|
| `refundLines[].lockedReason` | String | 锁定原因(`locked=true` 时有值) | `保险已生效不退` |
|
||||||
|
|
||||||
|
### 旧分组字段(兼容保留,与 refundLines 并存)
|
||||||
|
|
||||||
|
`rooms`/`tickets`/`services`/`supplies`/`vehicles`/`insurance` **继续返回**,类型均为 `List<TerminateRefundItemVO>`(与 `refundLines` 同构,字段集完全一致):
|
||||||
|
|
||||||
|
| 字段 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `rooms` | List<TerminateRefundItemVO> | 住宿清单(每晚×每组房一行) |
|
||||||
|
| `tickets` | List<TerminateRefundItemVO> | 门票/活动清单(景点/活动节点,含套餐内) |
|
||||||
|
| `services` | List<TerminateRefundItemVO> | 服务清单(SERVICE/TRANSPORT 节点) |
|
||||||
|
| `supplies` | List<TerminateRefundItemVO> | 备品清单(hasCost=true 的备品,无天维度整单一行) |
|
||||||
|
| `vehicles` | List<TerminateRefundItemVO> | 用车清单(每段车按 totalDays 展开成每天一行) |
|
||||||
|
| `insurance` | List<TerminateRefundItemVO> | 保险(整单 1 行,locked=true 不可退) |
|
||||||
|
|
||||||
|
> 前端可任选一种渲染:新逻辑按 `refundLines[]` + `categoryCode`/`sourceType` 区分资源;旧分组字段不会删除,兼容期可继续使用。
|
||||||
|
|
||||||
|
### days 与其余顶层字段
|
||||||
|
|
||||||
| 字段 | 类型 | 说明 |
|
| 字段 | 类型 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| `refundLines[].defaultUsed` | Boolean | 前端初始化展示值;车辆行最终是否已发生由提交时 Fleet `serviceDate` 与终止日重新判定 |
|
|
||||||
| `refundLines[].lineKey` | String | 提交 `lineUsages` 时原样回传 |
|
|
||||||
| `days[].terminateDate` | String(date) | 结束日期选项 wire key 固定为 `terminateDate`(原 `date` 字段改名),值 = departDate + (dayNumber-1);`dayNumber`/`label`/`isCurrent` 不变 |
|
| `days[].terminateDate` | String(date) | 结束日期选项 wire key 固定为 `terminateDate`(原 `date` 字段改名),值 = departDate + (dayNumber-1);`dayNumber`/`label`/`isCurrent` 不变 |
|
||||||
|
|
||||||
### 2. 终止行程 `POST /v3/admin/order/:id/terminate`
|
### 2. 终止行程 `POST /v3/admin/order/:id/terminate`
|
||||||
|
|||||||
正在加载...
x
在新工单中引用
屏蔽一个用户