3.6 KiB
3.6 KiB
【行为变更·管理后台】新建订单「选主题/选产品」:热门改手动标签口径 + 小蒙马(GROUP)起价修复读班期
页面:管理后台 → 新建订单(order-v2/new) 第1步「选主题」+ 第2步「选产品」 | 服务:hl-product-service-v2 | PR #3925 + #3927 | 已合并 dev-v3 + 部署测试服 + API 实测通过(2026-06-17) | 负责:mmg 触发:wx 在页面反馈①热门应按运营手动标签②「起价都不对」。审计定位 + 修复。
⚠️ 关键变更(3 项,前端需知)
1. 第1步「选主题」热门口径:自动计算 → 手动标签
- 变更前:
hot由后端按「近90天下单量前30%」自动算。 - 变更后:
hot= 该主题tags是否包含「热门」标签(运营在『产品线管理』手动打的 product_tag 字典标签,所见即所得)。 - 前端:「热」角标 + 「热门主题·直接进入」入口仍只看
hot字段;入口 = 本地filter(hot==true),无独立接口。运营打了「热门」标签的主题才热。
2. 第1步「选主题」VO 新增返回 tags / seasons
GET /admin/product/line/order-picker 的 OrderPickerThemeVO 新增两字段:
| 字段 | 类型 | 含义 |
|---|---|---|
tags |
List<String> | 主题标签(product_tag 字典:热门/新品/限定/硬核/治愈) |
seasons |
List<String> | 适用季节(spring/summer/autumn/winter) |
前端如需在主题卡展示标签/季节可直接用(此前精简 VO 不返回,需前端自渲染)。
3. 小蒙马(GROUP)起价修复:第1步 fromPrice + 第2步 startPrice/tierPrices
- Bug:GROUP(小蒙马)真实价在班期表
group_tour_batch.adult_price,但选主题/选产品接口此前只读价格日历 → 所有小蒙马起价恒为 null(页面显示空白/价待定)。 - 修复后:GROUP 起价改读班期表未来最低成人价(CORE/CUSTOM 仍走价格日历,口径与产品编辑页 min-price 一致)。
- 实测(测试服,部署后):
| 主题 | 类型 | 修复前 fromPrice | 修复后 fromPrice |
|---|---|---|---|
| 阿斯蒂芬撒点 | GROUP | null(空白) | 2925.00 |
| 测试小蒙马-yst | GROUP | null(空白) | 1635.00 |
第2步选产品:测试小蒙马 4 个产品 startPrice 均 = 1635.00,各档位 tierPrices 同价。
注:CORE/CUSTOM 主题若仍显示「价待定」,是该主题下产品未设未来可售价格日历(真·无价),非 bug,与本次无关。
金额字段口径(前端注意)
OrderPickerThemeVO.fromPrice、OrderPickerProductVO.startPrice、tierPrices[].startPrice均为字符串(@JsonSerialize ToString,防大数精度丢失),前端展示前parseFloat+ null 兜底。- ⚠️ 本次给
TierPriceInfo.startPrice补了字符串序列化,同时影响产品详情/产品列表接口里的tierPrices[].startPrice(由数字变字符串)。如这两个页面对该字段做了数字运算,请改parseFloat。
SKU 总数 / 产品数 口径澄清(顺带答疑)
- 主题卡「X 个 SKU」= 档位(tier/规格)总数 = 该主题下各已上架产品的档位数之和。
- 第2步「X 个产品可选」= 产品(版本)数。
- 二者单位不同,不矛盾。例:测试小蒙马 4 个产品(多档2+多档2+单档1+单档1)= 6 个 SKU,故主题卡显示「6 个 SKU」、第2步显示「4 个产品可选」,均正确。
- 头部「SKU 总数」= 各主题 skuCount 之和(前端派生,无独立接口)。
不变项
- 第2步选产品的
hot(热销)仍是计算口径(近90天下单量),本次未改;但第2步 VO 已返回tags,前端如需也可按「热门」标签渲染。