- 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>
3.3 KiB
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 时小童价=儿童价。
前端建议
不需要改任何代码。本次是后端纯修复,前端只需要观察:
- 创建带 youngChildCount 的 GROUP 订单后,
totalPrice应正确 = 成人+儿童+小童(含 toddlerDiscount) - 订单详情里"小童"行不再永远显示 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 与改动前一致 ✓