hl-api-changelog/changelogs/2026-04/27_fix_internal-batch-quote_toddler-infant-fields.md
API Changelog Bot 3e4549efee docs: 27 日新增两条修复 changelog
- fix(admin/product): 固定订金模式产品售价必须 > 订金(双向校验) (#1497)
- fix(mp/admin/order): 班期内部报价补 toddler/infant 字段, GROUP 订单 totalPrice 含小童金额 (#1498)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 19:26:00 +08:00

88 行
3.3 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 修复:班期内部报价补 toddler/infant 字段(订单总价含小童金额)
**类型**: 后端 BUG 修复
**关联**: 工单 #1498 / PR #1499
**日期**: 2026-04-27
**影响范围**: 小程序 GROUP(小蒙马) 订单创建后的订单详情展示 + 总价
---
## 现象
后端同事反馈: order-v2 调 product-v2 的班期报价接口时返回里没有小童单价/数量/小计,GROUP 订单(小蒙马)创建带小童时算价漏掉小童总价。同时入参也缺 toddlerCount,订单方根本传不过去。
## 修复后的行为
### 1. GROUP 订单总价 (`totalPrice`)
**接口**: `POST /mp/order/create` (GROUP 类型)
- 修复前: 带 `youngChildCount=1` 创建 GROUP 订单,totalPrice 只算成人 + 儿童,小童金额漏掉
- 修复后: totalPrice 正确包含小童金额(由班期 toddlerDiscount 决定)
### 2. 订单详情价格明细 (`priceBreakdown.items`)
**接口**: `GET /mp/order/detail/{id}``GET /admin/order/detail/{id}`
- 修复前: items 里小童单价/小计硬写 0 元(展示成"小童 0元×N=0元")
- 修复后: 小童行展示真实单价(=班期成人价×儿童折扣) 和 真实小计
### 3. 小童单价计算口径
`toddlerPrice = max(childPrice + toddlerDiscount, 0)`
`ProductPricingService.calculateQuote` 同口径。toddlerDiscount 默认负数(优惠),null 时小童价=儿童价。
## 前端建议
**不需要改任何代码**。本次是后端纯修复,前端只需要观察:
1. 创建带 youngChildCount 的 GROUP 订单后,`totalPrice` 应正确 = 成人+儿童+小童(含 toddlerDiscount)
2. 订单详情里"小童"行不再永远显示 0,有班期 toddlerDiscount 时显示实际折扣价
## 跨服务接口变更说明 (内部, 前端无感知)
### Feign Client 入参签名 (新增 2 个,默认 0)
```
GET /internal/product/batch/{batchId}/quote
?adultCount=2 &childCount=1 &toddlerCount=0 &infantCount=0 &roomCount=1
↑ 新增 ↑ 新增
```
### 返回 VO 新增字段
```json
{
"adultPrice": 5999, "childPrice": 4299,
"toddlerPrice": 3299, // 新增
"infantPrice": 0, // 新增
"adultCount": 2, "childCount": 1,
"toddlerCount": 1, // 新增
"infantCount": 0, // 新增
"roomCount": 1,
"adultTotal": 11998, "childTotal": 4299,
"toddlerTotal": 3299, // 新增
"infantTotal": 0, // 新增
"grandTotal": 19596
}
```
### 向后兼容
- 入参新字段都有默认 0,旧调用方不传不影响
- 返回新字段对旧消费者透明(Jackson 忽略未知字段)
## 测试建议
- [ ] 小程序选有 toddlerDiscount 的班期(例如 batch_id=2042826084914950145 有 toddlerDiscount=-1000),youngChildCount=1 下单
- 期望: `totalPrice` 包含小童金额 (childPrice + toddlerDiscount)×1
- 期望: 订单详情价格明细里小童行不为 0
- [ ] 不带小童(youngChildCount=0)下单 → 行为与改动前一致
## 后端测试
- 单测: GroupTourBatchServiceMpTest 新增 4 用例(toddlerDiscount=null/截断为0/向后兼容/正常)+ GroupOrderStrategyTest 8 用例适配新签名,全过
- 本地 API: product-v2 9083 直接 curl 经 X-Internal-Token 验证两路径
- 完整传: toddlerPrice=3299 (=4299-1000) grandTotal=19596 ✓
- 向后兼容: toddler/infant=0 grandTotal=16297 与改动前一致 ✓