# 接口变更记录 — 2026-04-14 11:00

> **提交** `6a9ec7ce` · **作者** wx · **时间** 2026-04-14 11:00:15 +0800
>
> feat(product-v2): 实现10个internal接口 + order-v2 Feign改指v2

## 变更总览

- **hl-product-service-v2**
  - 🆕 InternalProduct (+10 接口)

---

## hl-product-service-v2

### 🆕 新增: InternalProduct

### 📌 `GET` /internal/product/{productId}/detail — 产品详情（内部）

> 不过滤状态，供订单创建时获取产品快照

**参数**

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

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

### 📌 `GET` /internal/product/{productId}/automation-config — 保险/合同配置

> 返回保险方案ID、合同方案ID、预订条款ID、温馨提示ID

**参数**

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

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

### 📌 `GET` /internal/product/{productId}/simple-quote — 简单报价

> 根据日期和人数计算各人群单价和总价

**参数**

  - `{productId}` (`Long`) — 路径参数：产品ID
  - `adultCount` (`int`) — 查询参数
  - `childCount` (`int`) — 查询参数
  - `youngChildCount` (`int`) — 查询参数：小童数
  - `babyCount` (`int`) — 查询参数：幼童数
  - `childNeedBed` (`boolean`) — 查询参数：儿童是否需要加床

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

### 📌 `POST` /internal/product/{productId}/deduct-stock — 扣库存

> 乐观锁扣减，库存不足返回错误

**参数**

  - `{productId}` (`Long`) — 路径参数：产品ID
  - `count` (`int`) — 查询参数

**响应** `Result<Void>`

### 📌 `POST` /internal/product/{productId}/restore-stock — 恢复库存

> 取消/退款时恢复已扣库存

**参数**

  - `{productId}` (`Long`) — 路径参数：产品ID
  - `count` (`int`) — 查询参数

**响应** `Result<Void>`

### 📌 `POST` /internal/product/batch/{batchId}/enroll — 报名入团

> 乐观锁扣减人数+房间名额，名额不足返回错误

**参数**

  - `{batchId}` (`Long`) — 路径参数：班期ID
  - `peopleCount` (`int`) — 查询参数
  - `roomCount` (`int`) — 查询参数

**响应** `Result<Void>`

### 📌 `POST` /internal/product/batch/{batchId}/unenroll — 取消报名

> 取消/退款时回退人数和房间名额

**参数**

  - `{batchId}` (`Long`) — 路径参数：班期ID
  - `peopleCount` (`int`) — 查询参数
  - `roomCount` (`int`) — 查询参数

**响应** `Result<Void>`

### 📌 `GET` /internal/product/batch/{batchId}/info — 团期信息

> 获取班期详细信息

**参数**

  - `{batchId}` (`Long`) — 路径参数：班期ID

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

### 📌 `GET` /internal/product/batch/{batchId}/quote — 团期报价

> 根据人数和房间数计算团期报价

**参数**

  - `{batchId}` (`Long`) — 路径参数：班期ID
  - `adultCount` (`int`) — 查询参数
  - `childCount` (`int`) — 查询参数
  - `roomCount` (`int`) — 查询参数

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

### 📌 `POST` /internal/product/{productId}/custom-status — 定制产品状态变更

> 内部触发产品状态变更（通过COLA状态机）

**参数**

  - `{productId}` (`Long`) — 路径参数：产品ID
  - `status` (`String`) — 查询参数

**响应** `Result<Void>`

---

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

```
M	hl-order-service-v2/src/main/java/com/hulalv/shared/feign/ProductFeignClient.java
A	hl-product-service-v2/src/main/java/com/hulalv/controller/internal/InternalProductController.java
M	hl-product-service-v2/src/main/java/com/hulalv/mapper/GroupTourBatchMapper.java
M	hl-product-service-v2/src/main/java/com/hulalv/mapper/ProductPriceCalendarMapper.java
A	hl-product-service-v2/src/main/java/com/hulalv/service/internal/InternalProductService.java
```
</details>