hl-api-changelog/changelogs/2026-04/2026-04-19_mp-product-all-custom-followup.md

3.7 KiB

fix(product-v2): /mp/product/** 全量补 CUSTOM 支持(#900 follow-up

服务: hl-product-service-v2 PR: #903接续 #900 Issue: #901 日期: 2026-04-19 前端是否需要改动: 可能需要,视前端是否已调 B 类接口(详见下文)


一、背景

PR #900 只修了 /mp/product/{id} 主详情,其他 5 个 /mp/product/{id}/** 子接口对 CUSTOM 产品仍 404。本 PR 一次性收口 /mp/product/** 下所有子接口的 CUSTOM 支持。


二、变更接口10 个子接口分 3 类处理)

A 类 - 行为修复:放行 CUSTOM1 个)

接口 方法 路径 新行为
日酒店详情 GET /mp/product/{id}/day/{dayNumber}/hotels CUSTOM + COMPLETED/ORDERED 放行返回 200

B 类 - 行为修复:明确拒绝 CUSTOM4 个)

业务上 CUSTOM 产品是一口价、无班期、无多档位,这些接口本来就不适用。原来模糊 404,现在改为明确业务异常

接口 方法 路径 CUSTOM 产品新响应
价格日历 GET /mp/product/{id}/price-calendar?month=xxx {"code":500,"message":"定制产品不支持本接口","success":false}
班期 GET /mp/product/{id}/schedules 同上
档位对比 GET /mp/product/{id}/tier-compare 同上
算价 POST /mp/product/{id}/quote 同上

code=500 是项目 BusinessException 的默认业务码,HTTP 状态仍是 200。前端应按 message="定制产品不支持本接口" 字面识别,不要按 code 跳转错误页。

C 类 - 无变化5 个)

  • /mp/product/{id} (PR #900 已修)
  • /mp/product/{id}/day/{dayNumber} (PR #900 已修)
  • /mp/product/hotel/**/mp/product/room-type/**(产品无关)
  • /mp/product/compare(自然过滤)

三、前端行动项

如果前端没有对 CUSTOM 产品调用 B 类接口:无需改动

如果前端调用:

推荐:前端详情页按产品 productType 隐藏/禁用无意义的入口:

  • CUSTOM 产品详情页 不渲染:价格日历 / 班期列表 / 档位对比 tab / 立即报价按钮
  • CUSTOM 产品只展示:基本信息、行程、每日酒店、描述、图集

兜底:如果没法按 productType 前置判断,收到 message="定制产品不支持本接口" 时静默降级,不要弹全局错误。

清理历史 workaround

可清理 原因
/mp/product/{id}/day/{n}/hotels 的 CUSTOM 特殊兜底 现已正常返回
CUSTOM 产品详情页对主接口 404 的全局兜底 PR #900 已修

四、完整状态可见性矩阵

productType status 详情/日酒店 日历/班期/档位/算价
CORE / GROUP DRAFT/PENDING_REVIEW 404 404
CORE / GROUP PUBLISHED 200 200
CUSTOM DRAFT/PENDING_REVIEW 404 404
CUSTOM COMPLETED/ORDERED 200(本次修复) 500 "定制产品不支持本接口"(本次明确拒)

五、测试环境已验证

CUSTOM 产品 20453906434794127377天6晚草原VIP私定

GET /tier-compare           → 500 "定制产品不支持本接口" ✓
GET /price-calendar         → 500 "定制产品不支持本接口" ✓
GET /schedules              → 500 "定制产品不支持本接口" ✓
POST /quote                 → 500 "定制产品不支持本接口" ✓
GET /day/1/hotels           → 200含 dayNumber/tiers

CORE 产品 2045424500610125825

GET /price-calendar         → 200 ✓
GET /tier-compare           → 200 ✓
GET /schedules              → 200 ✓