同一张票两个通道各刷一次都放行,票务系统里这笔核销算一次还是两次
周末下午,东门闸机和西门闸机相隔四十秒先后放行同一张电子票。游客自己都愣了一下,回头看了一眼。检票口的工作人员不知道,闸机也没报错,票务系统里这张票就有了两条核销记录。月底统计入园人数,比实际人头多出来一截;查监控,同一张脸进了两次门。
同一张票在两个通道各刷一次,闸机都放行,不是闸机坏了,是票务系统的核销判定规则没管住“重复放行”。防重复核销不是一道校验就能解决的,它要管三处:核销表唯一性、闸机本地缓存、离线补传查重。
核销表里同一张票只能有一条有效核销
票务系统里核销记录表要有一个硬约束:同一张票、同一个票种、同一天,只能有一条状态为“有效”的核销记录。第二条刷进来的时候,系统不新增有效记录,而是回“已核销,请走二次入园通道”或直接拦下。
这个约束不是靠闸机判的,是靠数据库的唯一索引或业务校验判的。闸机把票号传上来,票务系统先查这张票当天有没有有效核销记录:有,回“已核销”;没有,写新记录。两次请求几乎同时到,唯一索引挡住第二条,第二条写不进去。
没有这个约束,两次请求都能写进核销表,两条都是“有效核销”,月底统计按记录数算,人数就多算了。
闸机本地缓存,是防重复的第一道还是漏洞
闸机为了断网时也能核销,本地缓存了票种规则和部分凭证状态。这个缓存是防重复的第一道,也可能变成漏洞。
缓存里如果只存“这张票有效”,不存“这张票今天有没有核销过”,同一张票在两个通道各刷一次,两台闸机各自读本地缓存,都判“有效”,都放行。缓存没同步核销状态,两台闸机各放各的。
缓存里要带核销状态和核销时刻:这台闸机刷过之后,本地记一条“已核销”,同时往票务系统写核销记录;另一台闸机刷同一张票,如果还没同步到最新核销状态,它会按本地缓存判“有效”放行,但写核销记录时被票务系统的唯一约束挡住,第二条不生效。
所以闸机放行和核销记录写入是两步:放行可以按本地缓存判,核销记录必须过票务系统唯一约束。第二步挡住,第一步放过去的人,月底对账时按“重复放行”单独统计,不混进正常入园人数。
离线核销,补传时查重更严
离线时闸机断网,没法实时过票务系统唯一约束。两台闸机都离线,同一张票各刷一次,两台都放行,两台本地各存一条核销记录。网络恢复补传,两条记录一起上来,票务系统如果不查重,两条都写进去。
补传查重比在线更严:票号相同、核销日期相同、核销时刻相差在极短时间内的,判为重复,只写一条,另一条标记“离线重复核销”单独存,不进有效核销表。票号相同但时刻差得远的,可能是二次入园或不同票种,两条都写,但标记“离线补传”和“在线核销”分开。
补传查重的规则要写在票务系统里,不能靠补传时人工看。人工看一天几百条补传记录,看不过来,漏一条就是多算一个人。
二次入园和重复核销,票务系统里要分开
景区有二次入园规则的,游客出园再进,是正常二次入园,票务系统里记“二次入园”,不是“重复核销”。没有二次入园规则的,同一张票刷第二次就是重复核销,要拦。
票种配置里有一栏“是否允许二次入园”。允许的,闸机刷第二次回“二次入园”,核销表里记一条“二次入园”记录,不占新的入园人数;不允许的,刷第二次回“已核销”,核销表不新增记录。
重复核销和二次入园在报表上分开列。重复核销多,说明闸机防重规则没配好;二次入园林多,说明景区有这需求,票种规则要考虑。两个数混在一起,运营看不出是系统漏洞还是正常需求。
两个通道同时刷,票务系统里怎么查
已经出了同一张票两条核销记录的,查三处:核销记录表、闸机日志、通道编号。
核销记录表:两条记录的时刻、通道编号、设备编号、是否离线判定。两条记录时刻相差几十秒、通道编号不同,基本是两台闸机同时刷。
闸机日志:两台闸机各自的本机日志,记了刷票时刻、票号、放行结果。日志和核销记录对一遍,看哪台闸机先刷、哪台后刷,后刷的那台有没有查过票务系统核销状态。
通道编号:两条记录如果通道编号相同,是同一台闸机重复放行,查闸机本地缓存和防重规则;通道编号不同,是两台闸机之间状态没同步,查票务系统唯一约束和同步延迟。
三处查完,才知道是闸机缓存问题、票务系统约束问题、还是同步延迟问题。三种原因处理不一样,混在一起改,改了一处另一处还漏。
防重复核销,配置上要做三件事
第一件,票务系统核销表加唯一约束:同一票号、同一票种、同一营业日,只能有一条有效核销记录。这个约束在数据库层做,不靠应用层判,应用层判有并发漏洞。
第二件,闸机缓存带核销状态:本地缓存不只存票种规则,还存当天已核销票号列表,刷票时先查本地列表,已核销的直接回“已核销”,不写新记录。本地列表定时和票务系统同步。
第三件,补传查重规则写进票务系统:离线补传按票号加核销时刻查重,重复的标记“离线重复核销”,不进有效核销表。查重规则不能靠人工。
三件事配好,同一张票在两个通道各刷一次,第一条写进核销表,第二条被唯一约束挡住,闸机放行记录单独统计,月底入园人数按有效核销算,不多算。
月底对账,重复核销单独一栏
月底统计入园人数,有效核销记录数、二次入园记录数、重复核销放行数三栏分开。有效核销是实际入园人头,二次入园是正常出园再进,重复核销放行是系统没挡住的多放。
重复核销放行数不为零,逐条查:哪台闸机、哪个通道、什么时刻、有没有离线判定。查完在票务系统里留一条“重复核销说明”,写清原因和处理人。不写说明,下月这笔还在差异里,越积越多。
同一张票在两个通道各刷一次、闸机都放行,不是闸机坏了,是票务系统防重复核销没管住三处:核销表唯一约束、闸机本地缓存核销状态、离线补传查重。核销表加唯一约束挡住第二条,闸机缓存带已核销列表减少误放,补传查重规则写进系统不靠人工。二次入园和重复核销分开记,月底有效核销、二次入园、重复核销放行三栏对一遍。防重复核销不是一道校验,是三处一起配;配齐了,同一张票刷两次,第二次就进不了有效核销表。
随便看看
- 2022-01-31数字旅游、虚拟旅游和智慧旅游的特点
- 2021-12-14黄山旅游官方平台进行适老化改造
- 2022-03-08数字经济丰富了旅游景观
- 2021-12-17怎么打造具备新“五感”的红色旅游产品
- 2021-12-292020年全国旅游及相关产业增加值占GDP比重为4.01%



