# 修复:班期内部报价补 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 与改动前一致 ✓