changelog: d90dfe18 - refactor(product-v2): 合并创建产品和Step1基础信息为一个接口

这个提交包含在:
API Changelog Bot 2026-04-13 09:49:25 +08:00
父节点 292b585b27
当前提交 068601550c

查看文件

@ -0,0 +1,91 @@
# 接口变更记录 — 2026-04-13 09:49
> **提交** `d90dfe18` · **作者** wx · **时间** 2026-04-13 09:49:25 +0800
>
> refactor(product-v2): 合并创建产品和Step1基础信息为一个接口
## 变更总览
- **hl-product-service-v2**
- AdminProduct (+1, -2)
---
## hl-product-service-v2
### AdminProduct
### 🆕 `POST` /admin/product/item/basic — Step1 基础信息保存
> 创建+更新合一接口。
**请求体** `ProductBasicSaveReqVO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `productId` | `Long` | 产品ID不传=创建新产品,传了=更新已有产品) |
| `version` | `Integer` | 乐观锁版本号(更新时必传,创建时不传) |
| `productType` | `String` | 产品类型创建时必传,更新时忽略。字典product_type: CORE=核心产品, GROUP=小蒙马跟团游, CUSTOM=私人定制) |
| `name` | `String` | 产品名称≤30字 |
| `subtitle` | `String` | 副标题一句话卖点,≤128字 |
| `introduction` | `String` | 产品简介富文本HTML |
| `lineId` | `Long` | 产品线ID从产品线下拉接口获取,私人定制可空 |
| `tripDays` | `Integer` | 行程天数≥1,晚数自动=天数-1 |
| `tripNights` | `Integer` | 行程晚数(通常=天数-1,不传自动计算 |
| `tiers` | `List<TierItem>` | 档位列表JSON数组,如标准/舒适/豪华3档 |
| `seasons` | `List<String>` | 适用季节字典product_season: spring=春, summer=夏, autumn=秋, winter=冬) |
| `tags` | `List<String>` | 产品标签字典product_tag,多选 |
| `coverImageUrl` | `String` | 封面图URL |
| `carouselImages` | `List<String>` | 轮播图URL列表≤10张 |
| `infantAgeMax` | `Integer` | 幼童年龄上限默认1岁,幼童≤此值免费或特价 |
| `toddlerAgeMax` | `Integer` | 小童年龄上限默认3岁,幼童<小童<儿童 |
| `childAgeMin` | `Integer` | 儿童年龄下限默认4岁 |
| `childAgeMax` | `Integer` | 儿童年龄上限默认12岁,超过按成人算 |
| `infantDefaultPrice` | `BigDecimal` | 幼童默认价元,0=免费) |
| `isBooking` | `Boolean` | 是否预约产品true=订金可不填出行人,false=正常下单) |
| `paymentType` | `String` | 支付方式字典payment_type: FULL=全款支付, DEPOSIT=订金+尾款) |
| `depositRatio` | `Integer` | 订金比例(%,支付方式=DEPOSIT时使用,与固定额二选一 |
| `depositAmount` | `BigDecimal` | 订金固定额(元,支付方式=DEPOSIT时使用,与比例二选一 |
| `balanceDueDays` | `Integer` | 尾款支付期限天,出发前N天需付清尾款 |
| `defaultDailyStock` | `Integer` | 每日库存默认值NULL=不限量,用于价格日历预填) |
| `defaultRoomCount` | `Integer` | 默认房间数(小蒙马跟团游用,每个班期的初始房间数) |
| `minGroupSize` | `Integer` | 最低成团人数0=不限,小蒙马用) |
| `minAdultPerOrder` | `Integer` | 每单最少成人数 |
| `maxAdultPerOrder` | `Integer` | 每单最多成人数 |
| `maxChildPerOrder` | `Integer` | 每单最多儿童数 |
| `showReview` | `Boolean` | 展示用户评价true=产品详情页显示评价模块) |
| `showChatGroup` | `Boolean` | 展示群聊入口true=显示加入群聊按钮) |
| `showTripTime` | `Boolean` | 展示行程时间true=行程天显示起止时间) |
| `showTripDistance` | `Boolean` | 展示行程距离true=行程天显示里程数) |
| `creatorAvatarUrl` | `String` | 创建者头像URL产品详情页展示的领队/设计师头像) |
| `creatorIntro` | `String` | 创建者简介≤512字 |
| `customizerId` | `Long` | 定制师ID私人定制产品关联的定制师 |
| `customerName` | `String` | 客户姓名(私人定制的客户) |
| `contactPhone` | `String` | 联系电话(加密存储) |
| `departureDate` | `LocalDate` | 出发日期私人定制的固定出发日期,格式yyyy-MM-dd |
| `mchId` | `String` | 商户ID微信支付商户号,多商户时指定 |
| `safetyItems` | `List<Object>` | 安全保障项JSON数组 [{icon,title,description}] |
| `photographyItems` | `List<Object>` | 摄影跟拍项JSON数组 [{name,description}] |
| `diningHighlights` | `List<Object>` | 餐饮亮点JSON数组 [{name,description}] |
| `tierSeq` | `Integer` | 档位序号1=标准,2=舒适,3=豪华) |
| `tierName` | `String` | 档位名称 |
**响应** `Result<Long>`
### ❌ ~~`POST` /admin/product/item — 创建产品~~
### ❌ ~~`PUT` /admin/product/item/{id}/basic — Step1 基础信息保存~~
---
<details>
<summary>📁 全部变更文件 (点击展开)</summary>
```
M hl-product-service-v2/src/main/java/com/hulalv/product/controller/admin/AdminProductController.java
M hl-product-service-v2/src/main/java/com/hulalv/product/service/admin/ProductBasicService.java
M hl-product-service-v2/src/main/java/com/hulalv/product/vo/admin/ProductBasicSaveReqVO.java
M hl-product-service-v2/src/test/java/com/hulalv/product/controller/admin/AdminProductControllerTest.java
M hl-product-service-v2/src/test/java/com/hulalv/product/service/admin/ProductBasicServiceTest.java
```
</details>