From 83d251e4f549b772def88bc54216854d1b8abc45 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 23 Apr 2026 14:52:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(product-v2):=20=E7=BB=9F=E4=B8=80=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E6=97=A5=E5=8E=86=E6=8E=A5=E5=8F=A3=E5=A5=91=E7=BA=A6?= =?UTF-8?q?=20(PR=20#1290)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-04-23_admin-unified-pricing-calendar.md | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 changelogs/2026-04/2026-04-23_admin-unified-pricing-calendar.md diff --git a/changelogs/2026-04/2026-04-23_admin-unified-pricing-calendar.md b/changelogs/2026-04/2026-04-23_admin-unified-pricing-calendar.md new file mode 100644 index 0000000..e6806ec --- /dev/null +++ b/changelogs/2026-04/2026-04-23_admin-unified-pricing-calendar.md @@ -0,0 +1,166 @@ +# 统一价格日历接口 /admin/product/item/{id}/pricing-calendar + +**日期**: 2026-04-23 +**PR**: #1290 (Closes #1286) +**服务**: hl-product-service-v2 +**类型**: feat(新增接口,零破坏性) + +--- + +## 背景 + +之前 admin 查价格日历需要分场景调两个不同接口: +- CORE/CUSTOM → `GET /admin/product/item/{id}/price-calendar` +- GROUP(小蒙马) → `GET /admin/product/item/{id}/schedule/list` + +**根因**:GROUP 定价真相源是 `group_tour_batch.adult_price`(班期表),不走 `product_price_calendar`。前端要按 `productType` 分流调用。 + +本次新增**统一入口**,后端按 productType 聚合两种数据源,前端一个接口搞定。 + +--- + +## 新接口 + +### `GET /admin/product/item/{id}/pricing-calendar` + +**Query 参数** +- `month`(可选):`yyyy-MM`,过滤月份。不传返全部 +- `tierSeq`(可选):档位序号,**仅 CORE/CUSTOM 生效**,GROUP 忽略 + +**响应** +```json +{ + "code": 200, + "data": { + "productType": "CORE | GROUP | CUSTOM", + "items": [ + { ... 统一条目 VO ... } + ] + } +} +``` + +### 统一条目 VO 字段表 + +| 字段 | 类型 | CORE/CUSTOM | GROUP | +|------|------|-------------|-------| +| **通用** | +| `date` | LocalDate | 每日价格日 | 出发日(departureDate)| +| `adultPrice` | BigDecimal | adultSellPrice | adultPrice | +| `childPrice` | BigDecimal | childSellPrice | childPrice | +| `toddlerDiscount` | BigDecimal | ✅ | ✅ | +| `infantPrice` | BigDecimal | ✅ | ✅ | +| `stock` | Integer | dailyStock | productStockLimit(无则 maxParticipants)| +| `sold` | Integer | sold | enrolledCount | +| `sellable` | Boolean | dailyStock 空或 sold