4.2 KiB
4.2 KiB
产品版本分组 + 产品线绑定类型 (PR #129, #131, #132, #133)
日期: 2026-04-02 | 服务: hl-product-service | 需重启: 是
功能概述
- 产品版本分组:同一行程的不同版本(如"轻奢版""高档版")可关联为一组,列表合并为一张卡片,详情页可切换版本
- 产品线绑定产品类型:创建产品线时指定类型,创建产品时按类型筛选产品线
核心概念
- 产品名本身就是版本名(如"呼伦贝尔5天·轻奢版"、"呼伦贝尔5天·高档版")
- 同一
gradeGroupId的产品是同行程的不同版本 gradeGroupId为 null = 独立产品,不属于任何版本组
接口变更
1. 产品列表(C端)
接口: GET /mp/product/list
同一版本组的产品只返回一条,附带所有版本选项。
新增返回字段:
| 字段 | 类型 | 说明 |
|---|---|---|
gradeGroupId |
String | 版本分组ID,null=独立产品 |
gradeOptions |
Array | 同组所有版本选项,null=独立产品 |
gradeOptions[].productId |
String | 该版本的产品ID |
gradeOptions[].name |
String | 产品名(即版本名) |
gradeOptions[].startPrice |
Number | 起步价 |
gradeOptions[].startPriceLabel |
String | "起" 或 "订金起" |
返回示例(有版本组的产品):
{
"productId": "123",
"name": "呼伦贝尔5天·轻奢版",
"gradeGroupId": "123",
"gradeOptions": [
{"productId": "123", "name": "呼伦贝尔5天·轻奢版", "startPrice": 3999, "startPriceLabel": "起"},
{"productId": "456", "name": "呼伦贝尔5天·高档版", "startPrice": 6999, "startPriceLabel": "起"}
]
}
返回示例(独立产品,不受影响):
{
"productId": "789",
"name": "丽江3天自由行",
"gradeGroupId": null,
"gradeOptions": null
}
2. 产品详情(C端)
接口: GET /mp/product/{productId}
product 对象中新增 gradeGroupId 和 gradeOptions。
前端切换版本:用 gradeOptions 中其他版本的 productId 重新调用此接口。
3. 推荐产品列表(C端)
接口: Feign GET /internal/mp/product/recommend
同样新增版本字段,同版本组去重。
4. 管理端产品列表/详情
新增 gradeGroupId 字段(不去重,管理端显示所有产品)。
5. [新增] 版本分组查询
接口: GET /admin/product/item/grade-groups?lineId=xxx
用途: 管理端创建版本产品时,查询已有分组列表
返回: [{gradeGroupId, groupName, lineId, products: [{productId, name}]}]
6. 产品保存
接口: POST /admin/product/item/save
新增请求字段:
| 字段 | 类型 | 说明 |
|---|---|---|
gradeGroupId |
Long | 版本分组ID。传0=新建分组,传已有ID=加入该组,不传=不分组 |
7. 产品线接口变更
接口: GET /admin/product/line/active
新增参数: productType(可选,CORE/GROUP/CUSTOM/ROUTE)
行为: 传参时只返回该类型的产品线 + 未绑定类型的产品线
接口: POST /admin/product/line(创建产品线)
新增请求字段: productType(可选,绑定产品类型)
产品线VO新增字段: productType
前端开发指引
列表页
gradeOptions != null && gradeOptions.length > 1时,显示版本选项- 卡片示例:
[轻奢版 ¥3,999起] [高档版 ¥6,999起](用 name + startPrice 展示) gradeOptions == null的产品照常展示
详情页
gradeOptions != null && gradeOptions.length > 1时,顶部显示版本切换tab- 当前版本高亮(匹配 productId)
- 点击其他版本 → 用该 productId 重新请求详情
- 报价/下单用当前 productId
管理端-创建产品
- 选择产品类型(CORE/GROUP等)
- 产品线下拉调用
GET /admin/product/line/active?productType=CORE只显示对应类型的线 - 如需创建版本组:
gradeGroupId传0(新建组)或传已有组ID(加入组)
DDL(已在本地/测试/正式执行)
-- 产品线加类型
ALTER TABLE product_line ADD COLUMN product_type VARCHAR(16) DEFAULT NULL AFTER name;
-- 产品表只保留 grade_group_id(product_grade 和 grade_sort 已删除)
-- grade_group_id + idx_grade_group_id 保持不变