女友去玩,竟带回一道 “虐哭程序员” 的难题

事件交代

前两周,女朋友去了开封玩一趟,回来后不久,她微信上和我吐槽了一件糟心事:由于她在两个平台都购了票,后面行程太赶,忘记在其中一个平台退票,导致现在无法退票

由于广州很多景点买票是要选择具体日期的(例如白云山、陈家祠),所以我以为她可能就是在抖音、美团买了同一天的两张票,后面忘记退掉抖音的票,导致现在票逾期,无法退款

但我还是想的太简单了,如果仅此而已,大家就不会看到这篇小破文

深入了解

随着我深入了解,才发现开封景区的购票大有不同,以下是我了解到的开封景区购票方式:

1️⃣ 你去哪个景点就买哪个景点的票,这种模式只适合去单个景区游玩,但开封景区特别多,这样买特别亏

2️⃣ 购买景区联票,开封这边景区基本是相互合作的,例如他们会出2个、4个、6个等的景区联票套餐,我女朋友就是先在抖音购买了4景区联票,后面她朋友又发现美团有6景区联票,玩起来更划算,所以才会出现了买两个平台的票的情况

抖音4景区联票:

美团6景区联票:

抖音4景区联票包含:万岁山武侠城+翰园碑林+开封城墙+铁塔公园

美团6景区联票包含:万岁山武侠城+翰园碑林+开封城墙+铁塔公园+龙亭景区+天波杨府

其中,美团的6景区联票中,龙亭景区天波杨府是抖音4景区联票中没有的,这两个信息特别关键

其次还有两个关键信息:

(1)平台承诺随时退:票虽然有使用截止日期,但在截止日期之前,是可以申请退款,如果截止日期仍未使用,系统自动退款

(2)女友的两个平台订单状态皆为已使用

那我开头揣测是票逾期,无法退款的情况就是错误的,既然如此,是什么情况导致了两个订单都为已使用呢?

逐层分析

我原本以为景区的核销订单模式会是:订单生成一个二维码,进入景区时有个机器扫描

如此一来,就可以精准锁定平台的订单核销,但我再次猜错了。女友和我说开封这边的景区都是使用了人脸识别技术,购票时只需要录入身份证号,到景区就能人脸识别进入了。

到这里事情已经逐渐清晰了,于是,我尝试站在一名程序员的角度来分析景区的核销流程

  • 第一步:识别用户身份
  • 第二步:识别用户身份成功,分析该用户是否在合作平台购买过相关景区票
  • 第三步:核销平台订单,也是最复杂的一步,因为该环节存在多种情况

1️⃣:该用户在一个平台 购买了一个景区的票,这种情况最容易,用户进景区后,票务系统直接核销平台订单,核销完成平台的钱就流向票务系统;

2️⃣:该用户在一个平台 购买了联合景区 的票,此时锁定该票,等到用户玩完最后一个景区后,才核销订单;有人可能会存在疑惑,为什么不是玩第一个景区时就进行订单核销,而是等玩完全部景区才触发核销?这就涉及到多个平台卖票的问题,程序设计需要兼容多个平台:假设你在抖音购买了两景区联合票:万岁山+铁塔公园,在美团购买了两景区联合票:万岁山+开封城墙,你先去了万岁山,此时如果游玩第一个景区就要核销订单的话,该核销哪个平台的订单?是不是没法核销了,只有等第二个景区玩完你才知道要核销哪个平台的订单;但即使如此,也存在一种情况,就是用户只玩了一个景区,其他景区不去玩。我猜这种特殊情况下,该票就一直处于锁定未核销的状态,直到订单时间逾期,才自动核销

3️⃣:该用户在多个平台 购买了一个景区的票,说实在这种情况属实矛盾,但作为一名程序员,还是得给解,我猜很有可能是以时间优先来核销订单的,也就是先在哪个平台下单,就先核销该平台的订单,毕竟用户肯定是希望核销日期更早的一张票

4️⃣:该用户在多个平台 购买了联合景区 的票,而我女朋友的情况就属于这一种情况,按理说这种情况也挺好解,还记得我前面提到的龙亭景区天波杨府吗?这两个景区是抖音平台4景区联票套餐中不包含的,而美团平台6景区联票中包含的,也就是说我女朋友她们去了其中一个,就可判断出核销美团平台的订单

但巧妙又凑合的一点就是她们的游玩路线居然是:万岁山武侠城->翰园碑林->开封城墙->铁塔公园->天波杨府->龙亭景区,恰巧把两个特殊的景区放在了最后游玩

当游玩万岁山武侠城->翰园碑林->开封城墙->铁塔公园时,对于抖音平台的订单来说,已经是满足触发核销的条件,我知道此时同为聪明程序员的你也会大有疑问🤔:美团平台的订单同样存在这4个景区,不应该直接就核销抖音平台的订单。

还记得情况3吗?也就是用户在多个平台购买了一个景区票的情况,我猜测的是票务系统以时间优先来核销不同平台的订单,再看看我开头贴出来的聊天记录,我女朋友也说了:先购买抖音的4景区联票,后购买美团的6景区联票

故此,以时间优先来核销的话,程序先核销抖音平台的订单确实没问题,当她们开心地继续畅玩天波杨府->龙亭景区时,却不知又触发了新一轮美团的订单锁单,待玩完这俩景区后,剩余的景点没玩,以至于三天逾期后自动核销订单,这也佐证了情况2里的猜测

复盘总结

后续打电话跟抖音平台核实了相关的情况,顺利完成了退票退款流程。女朋友还在一旁跟我聊着整个出行的趣事,但此时我满脑子都是在想着怎么修复票务系统中的bug🐛

一开始想的方案解决方案很粗暴:就是让景区提供一个特殊通道,用户可以通过打开二维码来核销平台订单,但这种也预防不了用户通过人脸识别进入的情况

后面想了一个从根本上解决的方案:用户人脸识别,检测到存在多个平台订单时,需要提示用户选择指定平台的订单进行核销,这样就可以彻底预防多个平台重复核销的情况了

今天的分享就到此结束,如果你对技术/行业交流有兴趣,欢迎添加howcoder微信,邀你进群交流

往期精彩

《这次终于轮到前端给后端兜底了🤣》

《你不了解的Grid布局》

《就你小子还不会 Grid布局是吧?》

《超硬核:从零到一部署指南》

《私活2年,我赚到了人生的第一桶金》

相关推荐
z***94841 小时前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
程序员西西1 小时前
SpringBoot 数据存储实战拆解!
后端
辜月十1 小时前
NSSM服务
后端
00后程序员2 小时前
Objective-C 测试(OC 测试)指南 从单元测试到性能调优的多工具协同方法
后端
天道佩恩2 小时前
MapStruct转换实体
java·后端
Asthenia04122 小时前
技术复盘:Solon-MCP 日志统一配置背后的技术架构分析
后端
lichenyang4532 小时前
从验证码组件到 AI 时代:为什么「用中学」才是程序员的生存法则?
程序员
小希smallxi2 小时前
在 Spring Boot 项目中,如何在非 Web 层(如 AOP)中获取 Session 信息
前端·spring boot·后端
00后程序员2 小时前
iOS 商店上架全流程解析 从工程准备到审核通过的系统化实践指南
后端