票种配置里都有一栏"有效期",界面上是一个输入框,后台常常就是一个日期字段。指定日票和任选一日票要存在这里的根本不是同一种东西。混着用,会出两类事故:指定日票被人随手改了日期还查不到记录,任选一日票第一次刷开时说不清到底锁了哪天。
一个能用的有效期,至少要拆成四项。第一项是可用类型,必须是枚举而不是是或否:固定入园日、区间内任一日、首次使用起三天、购买日起若干天。第二项是基准日期存哪一天,由类型决定——固定日票的基准是下单时选的入园日,任选一日票下单时这一项是空的,字段必须允许为空;区间票要存起止两个日期。第三项是天数或截止点。第四项最容易被省掉:自然日的切点定在零点还是当日闭园时刻。"首次使用起三天"含不含首日也要写清,按含首日起算就只有两天可用,这个差一天的争论窗口和客服两头都会碰到。

任选一日票的状态流转是:基准日为空、首次核销时写入当日、写入即冻结。冻结这一步必须在服务端和核销成功同时完成,不能先放人再异步补写基准日——同一凭证在两条通道被同时请求时,两次都会读到空值,都会把自己当成首次。写完之后,改期和延期都是重定向动作,要单独授权并限次数。次数建议只给一次,且必须在原入园日之前发起;提前多久由名额回池的判定时点倒推,改期要占掉新时段的名额,这个占位当天还得回得去,改得太晚就只能整单退。
指定日票的可用性判定是两条同时通过:日期匹配,且当前时刻没有超过当日的入园截止线。只判日期,就会出现深夜还能刷开一张"当日有效"的票。票面上"当日"这两个字,落到系统里必须翻译成两个值:入园日期和当日停止入园的时刻,缺一个都拦不住。这两条判定要写在同一个校验里,通道端和窗口端读同一份,不能一个看日期、一个看时刻。
还有两处会错位。一是购买日起若干天的票,现场售出与线上售出的起算差:线上多一个支付回调,可能差一夜,现场当天起算,同一个票种两种口径,投诉只找窗口。解决办法是基准统一取出票成功的时间,并写进规则说明。二是区间票的额度归属:区间跨节假日时,名额要按入园日期落在哪一天就扣哪一天的时段池,不能按下单日期扣,否则节假日当天会出现账面有余量、通道实际超载。

改一次有效期口径,要同时动三个地方:售卖页的文案、纸质票面上的日期格式、通道端的校验规则。只改一处是这类纠纷最常见的来源——票面印着一个日期,通道按首次核销起算,游客手里的票和系统里的判定各执一词。这三处最好由同一份字段生成,改完留一张新旧对照,写清老订单按哪一版执行。
扫一扫官方微信号