# 接口变更记录 — 2026-04-02 15:15

> **提交** `bb42f73e` · **作者** wx · **时间** 2026-04-02 15:15:02 +0800
>
> refactor: 删除gradeGroupId，用lineId做版本分组 + 产品线详情接口

## 变更总览

- **产品服务**
  - InternalMpProduct (+1)
  - Product (-1)
- **小程序聚合服务**
  - MpProduct (+1)

---

## 产品服务

### InternalMpProduct

> 📖 **接口文档**: [http://192.168.100.236:8085/doc.html](http://192.168.100.236:8085/doc.html) → 标签 **「【内部接口】小程序产品（Feign调用）」**

### 🆕 `GET` /internal/mp/product/line/{lineId}/products — 产品线下所有已上架产品（不做版本去重）

> 按产品线ID查询所有已上架产品，用于产品线详情页展示。

**参数**

  - `{lineId}` (`Long`) — 路径参数

**响应** `Result<List<MpProductListVO>>`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `productId` | `String` | 产品ID |
| `productType` | `String` | 产品类型：CORE=核心产品 ROUTE=线路产品 CUSTOM=定制产品 GROUP=小蒙马拼团 |
| `gradeOptions` | `List<GradeOptionVO>` | 同产品线版本选项(null=独立产品或产品线仅一个产品) |
| `name` | `String` | 产品名称 |
| `subtitle` | `String` | 副标题 |
| `tripDays` | `Integer` | 行程天数 |
| `tripNights` | `Integer` | 行程晚数 |
| `departureCity` | `String` | 出发城市 |
| `destinationCity` | `String` | 目的地城市 |
| `tags` | `List<String>` | 产品标签列表 |
| `seasons` | `List<String>` | 适用季节列表(编码) |
| `seasonLabels` | `List<String>` | 适用季节列表(中文) |
| `coverImageUrl` | `String` | 封面图URL |
| `lineName` | `String` | 产品线名称 |
| `startPrice` | `BigDecimal` | 起步价：全款模式=最低售价，订金模式=最低订金额 |
| `startPriceLabel` | `String` | 起步价标签：'起' 或 '订金起' |
| `paymentMode` | `String` | 支付模式：FULL=全款 DEPOSIT=订金+尾款 |
| `routeMapUrl` | `String` | 路径图URL |
| `creatorName` | `String` | 创作者姓名 |
| `creatorAvatarUrl` | `String` | 定制师头像URL |

### Product

> 📖 **接口文档**: [http://192.168.100.236:8085/doc.html](http://192.168.100.236:8085/doc.html) → 标签 **「产品管理」**

### ❌ ~~`GET` /admin/product/item/grade-groups — 查询等级分组列表（管理端选择关联等级产品用）~~

---

## 小程序聚合服务

### MpProduct

> 📖 **接口文档**: [http://192.168.100.236:8086/doc.html](http://192.168.100.236:8086/doc.html) → 标签 **「C端 - 产品接口」**

### 🆕 `GET` /mp/product/line/{lineId} — 产品线详情

> 返回产品线信息 + 该线下所有已上架产品摘要 + 第一个产品的完整详情。

**参数**

  - `{lineId}` (`Long`) — 路径参数：产品线ID

**响应** `Result<Map<String, Object>>`

---

## 📦 其他数据对象变更

> 以下变更未直接关联到本次接口变更，但可能影响现有接口的请求/响应

### 产品服务

#### ✏️ ProductCreateRequest

  - ❌ ~~`gradeGroupId`~~ (`Long`) — 版本分组ID(关联已有版本产品时传入)

#### ✏️ ProductListVO

  - ❌ ~~`gradeGroupId`~~ (`String`) — 版本分组ID(null=独立产品)

#### ✏️ ProductSaveRequest

  - ❌ ~~`gradeGroupId`~~ (`Long`) — 版本分组ID(关联已有版本产品时传入该产品的gradeGroupId，首个版本产品不传)

#### ✏️ ProductUpdateRequest

  - ❌ ~~`gradeGroupId`~~ (`Long`) — 版本分组ID(关联已有版本产品时传入)

#### ✏️ ProductVO

  - ❌ ~~`gradeGroupId`~~ (`String`) — 版本分组ID(null=独立产品)
  - ✏️ `gradeOptions`: 说明 "同组所有版本选项(含自己)" → "同产品线版本选项(null=独立产品或产品线仅一个产品)"

<details>
<summary>📁 全部变更文件 (点击展开)</summary>

```
M	hl-mp-service/src/main/java/com/hulalv/mp/controller/MpProductController.java
M	hl-mp-service/src/main/java/com/hulalv/mp/feign/MpProductFeignClient.java
M	hl-mp-service/src/main/java/com/hulalv/mp/feign/MpProductFeignFallbackFactory.java
M	hl-product-service/src/main/java/com/hulalv/product/controller/InternalMpProductController.java
M	hl-product-service/src/main/java/com/hulalv/product/controller/ProductController.java
M	hl-product-service/src/main/java/com/hulalv/product/dto/ProductCreateRequest.java
M	hl-product-service/src/main/java/com/hulalv/product/dto/ProductSaveRequest.java
M	hl-product-service/src/main/java/com/hulalv/product/dto/ProductUpdateRequest.java
M	hl-product-service/src/main/java/com/hulalv/product/entity/Product.java
M	hl-product-service/src/main/java/com/hulalv/product/service/ProductService.java
M	hl-product-service/src/main/java/com/hulalv/product/vo/MpProductListVO.java
M	hl-product-service/src/main/java/com/hulalv/product/vo/ProductListVO.java
M	hl-product-service/src/main/java/com/hulalv/product/vo/ProductVO.java
```
</details>