在购票小程序上一单买三个人的票很常见,麻烦出现在入口:三个人不一起到,先来的两个刷了码,第三个人下午才到;或者其中一个人临时不来了要退一张。票务系统里的一单多人要在结构上回答三件事——核验单位是什么、状态冲突时以哪一层为准、退款按整单还是按张。
一、核验单位是票,不是订单。一单三人应当在出票时拆成三张票、三个票号,订单只是它们共同的来源与支付记录。把订单当核验单位,就会有一码多张的语义混乱:同一个二维码既能代表三个人又能代表一个人,闸机收到请求时无法判断该扣谁的次数。
二、两种核验模式,配置时必须选一种。整单一次核销适用于必然同时通过同一通道的人群,例如亲子同批入场、团队集中点名,系统收到第一次核验就把该单下所有未核销票一次性标记。逐张核销适用于家庭分批、同行不同来源,每张票独立一行流水。整单核销一旦被配到分批到园的票种上,第二批人就会被系统判成已使用而拦在门外。

三、剩余可入人数要算出来,不要写下来。逐张模式下,"这一单还能进几个人"应当由未核销票数动态得出,不能存成一个固定字段。存成字段会带来典型事故:现场人工放行了一个人,没动那个数,报表上还能进,实际早就进完了。
四、状态冲突以票层为准。订单显示"部分核销"只是聚合展示,不能作为拒绝放行的理由。判定链应当是:取本次凭证对应的票号,看这张票的状态、有效期与场次归属,通过就写这张票的核销流水。反过来先查订单状态,一张有效票会因为同单另一张已退而被整体拦下。
五、分批到园要有当日额度。一单三人当日可核上限就是三,跨天不可核。这一条同时能挡住最麻烦的一类滥用:把同一张票的截图转给三个人分别去刷。逐张模式下要配合防二次入园,同一票号第二次请求直接拒绝并记录通道与时间。

六、退款的整单与单张冲突。判据按票状态:三张都没核销,可以整单退也可以按张退;已经刷掉一张,剩下的两张按张退,已核销那张不在可退范围。想连已用那张一起退,就必须先走核销撤销流程,而不是在退款页面硬改数量。整单退要求全部子票未核销,这一条要在下单页就把规则说清,避免窗口现场解释。
现场出过的状况基本都在这几处:把整单核销当默认配置,导致下午到园的人进不去;只按订单聚合状态判定,同单退一张后另外两张被误锁;一单退一张时在渠道账单上按整单冲销,实际入园人数与结算数量撕开。前两个是票务系统的规则问题,最后一个是流程串了顺序。
验收拿一个三人单走一遍:先放一人,查订单显示部分核销且还能进两人;再放第二人,重复刷第一次的凭证应被拒;然后退第三张,看整单状态、承载量与渠道应结数量是否同步变化。这四五个数一次算对,一单多人才算落地。
