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

3.3 KiB

修复:班期内部报价补 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 新增字段

{
  "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 与改动前一致 ✓