# 接口变更记录 — 2026-04-14 10:25

> **提交** `36079720` · **作者** wx · **时间** 2026-04-14 10:18:01 +0800
>
> fix(product-v2): 清理未使用注入+重复import

## 变更总览

- **hl-product-service-v2**
  - AdminProduct (改27)
  - AdminProductLine (改2)
  - Formula (改15)
  - MpProduct (改6)
  - MpProductLine (改2)

---

## hl-product-service-v2

### AdminProduct

### ✏️ `PUT` /admin/product/item/{id}/itinerary — Step2 行程整体保存

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/itinerary/day — Step2 增加一天

- 参数: id(Long) → id(Long)

### ✏️ `DELETE` /admin/product/item/{id}/itinerary/day/{dayNumber} — Step2 删除一天

- 参数: id(Long), dayNumber(Integer) → id(Long), dayNumber(Integer)

### ✏️ `PUT` /admin/product/item/{id}/route — Step3 路线与备品保存

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/price-calendar — Step4 查询价格日历

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/schedule/list — Step4 班期列表

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/price-calendar/batch — Step4 价格日历批量设置

- 参数: id(Long) → id(Long)

### ✏️ `DELETE` /admin/product/item/{id}/price-calendar — Step4 价格日历删除

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/schedule — Step4 创建班期

- 参数: id(Long) → id(Long)

### ✏️ `DELETE` /admin/product/item/{id}/schedule/{scheduleId} — Step4 删除班期

- 参数: id(Long), scheduleId(Long) → id(Long), scheduleId(Long)

### ✏️ `PUT` /admin/product/item/{id}/schedule — Step4 修改班期

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/schedule/batch-create — Step4 班期批量创建

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/schedule/{scheduleId}/cancel — Step4 取消班期

- 参数: id(Long), scheduleId(Long) → id(Long), scheduleId(Long)

### ✏️ `GET` /admin/product/item/{id}/schedule/team — 班期团队查询

- 参数: id(Long) → id(Long)

### ✏️ `PUT` /admin/product/item/{id}/schedule/team — 班期团队保存

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/suggest-price — 建议售价

- 参数: id(Long), departureDate(String), tierSeq(Integer) → id(Long), departureDate(String), tierSeq(Integer)

### ✏️ `POST` /admin/product/item/{id}/quote — 报价计算

- 参数: id(Long) → id(Long)

### ✏️ `PUT` /admin/product/item/{id}/supplement — Step5 补充信息保存

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/calculate-mileage — 计算行程总里程

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id} — 产品详情

- 参数: id(Long) → id(Long)

### ✏️ `DELETE` /admin/product/item/{id} — 删除产品

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/operation-logs — 产品操作记录

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/action — 产品状态变更

- 参数: id(Long) → id(Long)

### ✏️ `POST` /admin/product/item/{id}/copy — 复制产品

- 参数: id(Long) → id(Long)

### ✏️ `PUT` /admin/product/item/{id}/transfer — 转让产品

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/validate-publish — 上架预检

- 参数: id(Long) → id(Long)

### ✏️ `GET` /admin/product/item/{id}/fee-deduction-preview — 费用推导预览

- 参数: id(Long) → id(Long)

### AdminProductLine

### ✏️ `GET` /admin/product/line/{id} — 产品线详情

- 参数: id(Long) → id(Long)

### ✏️ `DELETE` /admin/product/line/{id} — 删除产品线

- 参数: id(Long) → id(Long)

### Formula

### ✏️ `GET` /admin/product/formula/group/list — 公式组列表

- 参数: productType(String) → productType(String)

### ✏️ `GET` /admin/product/formula/group/{groupId} — 公式组详情

- 参数: groupId(Long) → groupId(Long)

### ✏️ `PUT` /admin/product/formula/group/{groupId} — 更新公式组

- 参数: groupId(Long) → groupId(Long)

### ✏️ `PUT` /admin/product/formula/group/{groupId}/activate — 激活公式组

- 参数: groupId(Long) → groupId(Long)

### ✏️ `DELETE` /admin/product/formula/group/{groupId} — 删除公式组

- 参数: groupId(Long) → groupId(Long)

### ✏️ `GET` /admin/product/formula/group/{groupId}/steps — 公式步骤列表

- 参数: groupId(Long) → groupId(Long)

### ✏️ `GET` /admin/product/formula/step/{formulaId} — 公式步骤详情

- 参数: formulaId(Long) → formulaId(Long)

### ✏️ `PUT` /admin/product/formula/step/{formulaId} — 更新公式步骤

- 参数: formulaId(Long) → formulaId(Long)

### ✏️ `PUT` /admin/product/formula/step/{formulaId}/toggle — 启用/禁用公式步骤

- 参数: formulaId(Long) → formulaId(Long)

### ✏️ `DELETE` /admin/product/formula/step/{formulaId} — 删除公式步骤

- 参数: formulaId(Long) → formulaId(Long)

### ✏️ `GET` /admin/product/formula/step/{formulaId}/versions — 公式步骤版本历史

- 参数: formulaId(Long) → formulaId(Long)

### ✏️ `PUT` /admin/product/formula/step/{formulaId}/rollback/{versionNum} — 回滚公式步骤到指定版本

- 参数: formulaId(Long), versionNum(Integer) → formulaId(Long), versionNum(Integer)

### ✏️ `GET` /admin/product/formula/var/list — 公式变量列表

- 参数: category(String) → category(String)

### ✏️ `PUT` /admin/product/formula/var/{varId} — 更新公式变量

- 参数: varId(Long) → varId(Long)

### ✏️ `DELETE` /admin/product/formula/var/{varId} — 删除公式变量

- 参数: varId(Long) → varId(Long)

### MpProduct

### ✏️ `GET` /mp/product/{id} — 产品详情

- 参数: id(Long) → id(Long)

### ✏️ `GET` /mp/product/{id}/price-calendar — 价格日历

- 参数: id(Long) → id(Long)

### ✏️ `GET` /mp/product/{id}/schedules — 班期列表

- 参数: id(Long) → id(Long)

### ✏️ `POST` /mp/product/{id}/quote — C端报价

- 参数: id(Long) → id(Long)

### ✏️ `GET` /mp/product/compare — 产品对比

- 参数: ids(String) → ids(String)

### ✏️ `GET` /mp/product/{id}/tier-compare — 档位对比

- 参数: id(Long) → id(Long)

### MpProductLine

### ✏️ `GET` /mp/product-line/list — 产品线列表

- 参数: season(String) → season(String)

### ✏️ `GET` /mp/product-line/{lineId}/products — 产品线下产品列表

- 参数: lineId(Long) → lineId(Long)

---

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

```
M	hl-product-service-v2/src/main/java/com/hulalv/controller/admin/AdminProductController.java
M	hl-product-service-v2/src/main/java/com/hulalv/controller/admin/AdminProductLineController.java
M	hl-product-service-v2/src/main/java/com/hulalv/controller/admin/FormulaController.java
M	hl-product-service-v2/src/main/java/com/hulalv/controller/mp/MpProductController.java
M	hl-product-service-v2/src/main/java/com/hulalv/controller/mp/MpProductLineController.java
```
</details>