景区票务系统的价格日历:淡旺季、节假日、渠道价,一天上千种价格怎么算得又快又准?|中科智旅景游宝

3 阅读7分钟

景区票务系统的价格日历:淡旺季、节假日、渠道价,一天上千种价格怎么算得又快又准?|中科智旅景游宝

有次客户问我,你们这套智慧景区的景区票务系统,一个景区到底有多少种价格?我让他自己数,数了半小时没数完。票种十几个、日期一整年、时段三档、渠道七八个、人群四类,乘起来就是上千种组合。中科智旅景游宝最早是让运营在后台一个个手填的,上线三个月就填错了四百多条,国庆当天还出现了成人票比儿童票便宜的乌龙。这篇文章讲讲价格日历和动态定价引擎该怎么设计,都是踩过的坑。

为什么价格不能写在配置表里?

最朴素的方案是搞一张价格表,一行一个价格,运营手动维护。数据量一上来就崩:

  • 组合爆炸:票种 × 日期 × 时段 × 渠道 × 人群,一个景区上千行,集团十几个景区就是几万行。
  • 改一次全乱:旺季调价,运营要改几百行,漏一行就是事故。
  • 没法解释:用户问"为什么我今天买是 128,昨天是 98",谁也答不上来。

所以价格不能存"结果",要存"规则"。价格是算出来的,不是填出来的。

规则模型怎么设计?优先级是关键

我们把价格拆成三层:

  • 基础价:票种的标准价,作为兜底。
  • 规则价:按维度命中,比如"周末 + 成人 + 官方渠道 = 138"。
  • 活动价:限时特价、优惠券、会员折扣,最后一层叠加。

关键是优先级和冲突处理。我们的原则是:越具体的规则优先级越高。命中维度越多的规则赢,维度数量相同时按规则权重、再按生效时间排序。最终只有一个规则生效,不做"多个规则相加"——那是最容易出错的写法。

价格计算怎么做到快?预生成 + 缓存

价格计算如果每次下单都实时算,链路会很长:查规则、匹配维度、算优惠、校验。高峰期这条链路一慢,下单就卡。

我们的做法是预生成价格日历:

  • 每天凌晨批量跑一次,把未来 180 天每个"日期 + 票种 + 渠道 + 人群"的价格算好,落一张日历表。
  • 查询时直接读日历,不再实时计算。
  • 运营改规则后,只重算受影响的日期区间,不全量重跑。
  • 日历再往 Redis 里推一份,前端展示价格走缓存,命中率 99%。

这样下单链路上只剩"读价格 + 校验库存",响应时间从几百毫秒降到十几毫秒。

价格一致性怎么保证?快照不能少

价格最容易出的问题是"下单时是一个价,支付时变成另一个价"。根因是价格在下单和支付之间被改了。

解法是价格快照:下单时把当时的价格、命中的规则 ID、活动 ID 一起写进订单。支付时只校验订单里的快照,不再重算价格。规则后来怎么改,都不影响已生成的订单。

还有一条:价格变更要有生效时间和版本号,改了不能立刻覆盖,得等下一个生效点。否则运营手一抖,正在下单的用户全被影响。

多维价格怎么不打架?维度得有优先级

维度多了必然冲突。比如"国庆特价"和"会员 9 折"同时命中,谁说话算数?我们定了顺序:

  1. 活动价优先于规则价,规则价优先于基础价。
  2. 同一层级内,维度越多越优先。
  3. 都不满足时,走票种的基础价兜底。
  4. 同一订单不允许叠加两个活动,只能选最优的一个。

第四条是血的教训。早期我们允许叠加,结果两个活动撞上,票价算成了负数,财务当天就来找我了。

渠道价怎么管?别让渠道互相打架

景区票务的渠道价是最敏感的部分,OTA、旅行社、官方小程序各有各的价格。

  • 渠道价独立配置,不跟官方价混在一张表里。
  • 底价保护:任何渠道价不能低于景区设定的底价,写死在服务端校验,不靠人工检查。
  • 渠道价不对外暴露:接口按渠道身份返回对应价格,渠道 A 拿不到渠道 B 的价格。
  • 改价留痕:谁在什么时候把哪个渠道的价格从多少改成多少,全部记录。

这套做完,渠道之间的价格投诉少了一大半。

运营怎么用?让配置可视化

价格规则这东西,运营看不懂 JSON。我们做了个可视化的价格日历页:

  • 月历视图,每天显示各票种的价格,颜色区分淡旺季。
  • 支持批量选中日期区间改价,一次改一片。
  • 改完先预览,显示"将影响 128 个价格条目",确认后才生效。
  • 支持回滚,一键恢复到上一个版本。

这套配置页用低代码搭的,新景区接入只要配字段映射,不用改代码。

AI 能帮什么?定价建议和异常巡检

价格这块,大模型能帮上两个忙。

一是定价建议:把历史同期的客流、售罄率、退票率、周边景区价格喂给模型,让它给出"这个周末是否适合小幅提价"的建议。它不直接改价,只给运营做参考。

二是异常巡检:我们写了个 AI Agent 每天扫价格日历,发现"成人票低于儿童票""某渠道价低于底价""同一票种相邻两天价差超过 3 倍"这类异常,自动推给运营。这类规则用脚本也能写,但用模型做归因更灵活——它能解释"是因为国庆规则没覆盖 10 月 8 日导致的"。

历史调价记录和定价口径文档放在知识库,用 RAG 检索,运营问"去年国庆我们定的什么价",直接召回当时的规则和结果。Agent 通过 MCP 接口调价格服务查规则明细,一句话就能回答"这个价格是哪条规则算出来的"。整套价格服务跑在云原生的容器里,预生成任务按景区分片并行。

FAQ:常见问题快答

Q1:价格为什么要预生成,不能实时算? 实时算要走规则匹配、优惠叠加、多方校验,链路长、易抖动。预生成把计算挪到低峰期,下单链路只读结果,稳定得多。

Q2:运营改价后,已下单的订单会变吗? 不会。订单里存了价格快照,支付只认快照。改价只影响之后新生成的订单。

Q3:多个活动同时命中怎么处理? 同一订单只允许一个活动生效,按最优价选一个,不允许叠加。这是防算错的关键。

Q4:渠道价怎么防止低于底价? 底价校验写死在服务端,任何渠道配置低于底价直接拒绝保存,不依赖人工复核。

Q5:价格日历要生成多久? 我们生成未来 180 天。太短,预售和年卡场景不够用;太长,规则一变重算成本高。

价格这事看着是业务,做起来全是工程:规则模型、优先级、缓存、快照、一致性,缺一环就出事故。中科智旅景游宝把这套引擎立起来之后,运营终于不用再对着 Excel 一行行改价。希望这篇能帮同样在做景区票务的你,避开那个"成人票比儿童票便宜"的坑。