谭 雪,王 斌,朱建军,黄伟伟,尹伊伊
(1.中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081;2.中铁程科技有限责任公司,北京 100081)
智能动车组通过与互联网、人工智能等技术的深度融合,推动智能行车、智能运维、智能服务等智能技术应用,为旅客提供更安全、高品质、多元化的运输服务。自助售货机作为智能服务的一部分,具有节约人力、便捷的特点。为满足铁路旅客日益增长的美好生活需要,铁路12306 正在逐步向出行服务型平台转变[1]。12306 互联网餐饮预订平台自2017 年上线以来,从提供动车组餐饮沿途车站餐品及车上自营餐的订餐及送餐到座服务,逐步扩展成为支持扫码点餐、车站用餐模式的多渠道多场景的服务平台[2]。智能动车组自动售货机软件系统作为12306 餐饮预订平台的一部分,与其他餐饮模式形成互补,共同构建列车餐饮生态圈。
与商场、街道、车站等位置放置的自动售货机不同[3],放置在列车上的售货机随着列车位移不断变化,给售货机的通信和管理带来了一定的困难。作为餐饮预订平台一部分,自动售货机软件系统需要充分考虑本系统及平台其他系统的特点,实现既有功能和数据复用,降低开发成本和维护工作量。系统通过应用数据同步及补偿机制、二维码生成及识别、智能出货控制、异常情况处理等技术,解决了自动售货机软件系统在列车高速运行时面临的复杂网络环境、复杂列车编组管理、车上操作空间紧张等一系列问题。系统在线路上完成现场测试,运行平稳可靠。
自动售货机系统用户按照角色可分为平台管理员、列服人员、旅客。平台管理员使用系统实现设备的管理和监控,列服人员使用系统完成开店、库存维护、异常情况处理等操作,旅客使用系统完成商品浏览、下单、支付等操作。自动售货机软件系统具体需求分析如下。
(1)保证列车高速运行环境下数据交互的稳定性和时效性。在动车组列车高速移动环境下,由于基站的不均匀分布以及高速移动带来的多普勒效应和频繁的越区切换,导致网络服务质量明显下降,信号不稳定[4]。售货机通信过程中,涉及多次车地交互,网络稳定性要求高。自动售货机软件设计时,应充分考虑列车网络环境对数据交互的影响,优化业务处理流程,研究通信中断、通信延迟等情况的处理机制,保证数据传输的稳定性和时效性。
(2)对售货机进行统一的授权和管理。商场、街道、车站等位置放置的售货机固定属于某个商家使用和管理。列车上放置售货机处在不断移动的环境中,负责售货机的商家随列车担当车次变化。由于供应商和设备型号多,不同型号的售货机货道分布不同,需要按照型号进行配置和调试。平台需要对设备进行统一管理,保证商家的使用。
(3)满足列服人员车上空间小、时间紧环境下的操作需求。自动售货机的开店、上货、异常处理、库存盘点等操作都需要列服人员在列车上完成。列服人员车上操作具有空间小、操作时间紧的特点,设计相关功能时需要考虑列服人员的操作特点和操作习惯,降低列服人员工作的复杂度[5]。互联网餐饮平台已经建成覆盖列车自营餐、车站送餐上车、车站用餐等多种场景,包含权限管理、商户管理、商品维护、对账结算等系统。自动售货机作为互联网餐饮平台的又一渠道,可以共用既有平台的部分功能和模块,减少操作成本及开发成本。
(4)适应当代旅客的购物及支付习惯。2022年中国用户平均使用手机3.3 h/d,覆盖社交、购物、拍照等应用,旅客越来越倾向于移动端购物。目前旅客较少携带现金出行,考虑到当代旅客购物和支付习惯[6],系统需要支持移动支付场景。
系统架构采用分层架构设计,自动售货机软件系统系统架构如图1 所示。系统从上到下依次分为展示层、应用服务层、数据层、基础设施层4 层结构,并与餐饮预订平台其他系统、其他平台或系统进行数据交互。
图1 自动售货机软件系统系统架构Fig.1 System architecture of vending machine software system
展示层实现与用户交互,强调用户体验。用户按角色可以分为平台管理员、列服人员、旅客。考虑平台管理员管理的设备数量多,列服人员车上操作空间紧张,以及旅客的购物习惯,分别使用设备管理系统、列服人员APP、旅客端小程序实现3 个角色的功能。
应用服务层负责系统核心业务逻辑的处理,向下与数据层交互,向上与展示层交互。查询服务提供商品查询等服务;订单服务提供订单创建、订单变更等服务;交易服务提供支付、退款等服务;通知服务提供店铺状态通知、出货失败通知等通知服务;出货服务提供旅客支付后自动出货、列服人员手工出货等服务;认证服务提供用户账户认证、开行车次认证等服务;库存管理服务提供库存维护、库存调整、库存盘点等服务;硬件交互服务提供获取设备状态、设备开门、设备出货等服务;设备管理服务提供设备维护及管理、设备型号维护、设备货道维护等服务;授权服务提供设备准入授权服务。
数据层负责数据的管理,包括数据的清洗、处理,并将处理好的数据存储在数据库中。数据层包括订单数据、交易数据、消息数据、库存数据、操作数据、设备数据等。
基础设施层包括操作系统、数据库、服务器、网络、存储等。
系统与餐饮预订平台其他系统进行交互,包括商品管理系统、权限管理系统、支付系统、对账结算系统等;系统与其他平台或系统进行交互,包括售货机硬件、铁路主数据平台、微信/支付宝等。
系统业务功能主要分为设备授权及管理、车上信息维护、商品售卖三大部分,分别供平台管理员、列服人员、旅客3 个角色使用。自动售货机软件系统业务功能设计如图2所示。
图2 自动售货机软件系统业务功能设计Fig.2 Business function design of vending machine software system
平台管理员负责设备的授权及管理。平台管理人员收到新设备准入申请后,将维护设备的型号、设备所在车底及位置等信息,审核信息并进行设备授权。系统检测各个售货机的运行状态及开行车次,保证系统运行平稳。
列服人员负责车上信息维护。设备授权完毕后,列服人员登录账号,输入当次值乘的车次信息,校验通过后完成设备激活。上货功能支持获取本商户下的商品信息,并维护商品在售货机上的货道及库存信息。开/关店功能将调用售货机硬件进行开/关店操作。订单查询功能支持查询售货机当前担当车次的订单信息。硬件操作功能支持开门、关门等硬件操作。库存盘点功能支持当前车次商品的库存盘点。对于列服人员值乘连续多次列车的情况,交接班功能可将上一班次的库存交接到下一班次中,减少维护工作量。当商品出货失败后,提供手工出货功能,对出货失败的商品重新出货;手工出货仍失败或旅客要求退款时,支持退款操作。
旅客使用商品售卖功能。设备开店成功后,旅客可浏览商品及下单,下单后支持微信、支付宝等多种电子支付方式。支付完成后,设备将逐件出货,完成整个购物流程。
自动售货机软件系统主要分为设备管理系统、列服人员APP、旅客端小程序、后台服务四个模块,自动售货机软件系统内部各模块间,与餐饮预订平台其他系统间,以及外部系统间数据交互频繁。餐饮预订平台其他系统包括权限管理系统、商品管理系统、支付系统、对账结算系统,外部平台或系统包括售货机硬件、铁路主数据平台、微信/支付宝等。自动售货机软件系统数据流设计如图3所示。
图3 自动售货机软件系统数据流设计Fig.3 Data flow design of vending machine software system
设备管理系统包括用户登录、设备维护、设备授权3 个模块。用户登录模块将用户的账户信息传递给权限管理系统进行身份校验。设备维护模块将设备型号信息传递给设备管理服务进行处理。设备授权模块将设备及车底信息传递给设备授权服务处理。
列服人员APP包括用户登录、设备激活、商品库存维护、设备操作、手工出货、退款六个模块。用户登录模块将用户账户信息传递给权限管理系统进行身份校验。设备激活模块将设备、车底、开行信息传递给认证服务,铁路主数据平台将车次开行信息传递给认证服务,双方信息共同完成校验后激活设备。商品管理系统将商户商品信息传递给查询服务,商品库存维护模块获取查询服务的商品信息供列服人员查看,并将列服人员维护的商品库存信息传递给库存管理服务存储。设备操作模块将操作信息传递给硬件交互服务处理,硬件操作服务再将硬件操作指令传递给售货机硬件实现设备开关门等操作。手工出货模块将待出货商品信息传递给出货服务,出货服务将出货商品信息转换成待出货货道信息,并由硬件交互服务传递给售货机硬件完成出货。退款模块将退款信息传递给交易服务处理,交易服务将交易信息传递给支付系统完成退款操作。
旅客端小程序分为商品浏览、下单、支付、订单查询4 个模块。商品浏览模块从库存管理服务获取可售商品信息。下单模块将旅客下单的商品信息传递给订单服务处理。支付模块将支付信息传递给支付宝/微信处理,付款信息传递给交易服务处理;支付成功后,将订单信息传递给出货服务,出货服务将待出货货道信息传递给硬件交互服务,最终由售货机硬件完成出货。订单查询模块从订单服务获取订单信息。交易服务和订单服务分别传递交易信息和订单信息到对账结算系统处理。
售货机通信过程中,涉及多次车地交互,包括售货机硬件与后台服务器交互,旅客使用小程序与后台服务器交互,列服人员使用APP与后台服务器交互。列车移动速度快,每个流程都需要经过多次交互,交互中存在通信中断、延迟等情况。针对软硬件交互时存在的各种状况,为保证通信的完整性,接口交互设计时要注意数据同步、数据补偿等问题,保障数据传输的稳定性和时效性[7]。
(1)数据同步。数据同步是指监测对方数据发生的改变,并及时更新本地数据,保证双方数据的一致性。数据更新的频率根据业务需求而不同,对于业务关键、时效性要求高的数据更新频率越高。数据同步有主动查询和消息推送两种方式进行实现。主动查询根据业务情况主动发起请求,技术实现简单,查询频率都由查询方决定。消息推送根据业务设置,只有符合的业务触发后,主动给对方推送消息。消息推送依赖于对方系统的能力,若对方无法提供消息推送的能力,则无法实现消息的推送。为了兼容不同设备的接口能力,使用主动查询方式进行数据同步。
售货机开店后,需要对售货机设备的运行情况进行持续监测。每隔30 s查询设备的开机状态,若返回设备异常,需要对设备进行关店处理,并通知列服人员人工干预处理,避免故障期间操作影响旅客购物。
(2)数据补偿。系统与其他平台或系统进行数据交换时,若在接口请求过程中发生了网络抖动或其他问题,会导致接口调用失败。需要设计一个长效的接口重新调用机制,在发生网络抖动时自动地补偿调用。接口根据业务不同可以分为操作类请求(包括增、删、改等操作)和查询类请求。业务操作接口不可多次请求,若请求接口调用失败或返回失败,为避免重复请求造成已接收执行但未成功返回结果的情况,不进行再次请求,报失败转人工处理。查询接口可以多次请求,对于单次请求失败的情况,需要建立请求重试机制。要根据业务性质的不同,设置补偿重试的机制。对于出货业务,考虑旅客在等待的时效性,5 s、10 s、30 s各重试一次,若仍调用失败或者无返回,则记录出货超时,走异常处理流程。
二维码(Quick Response Code,QR Code)是由多行信息组成的条形码,能够在横向和纵向两个方位同时表达信息,具有数据容量大、支持多种格式、尺寸相对较小、被破坏依然可被读取等优点[8],可实现信息获取、网站跳转、账号登录等功能。二维码的组成如图4 所示,位置探测图形、位置探测图形分隔符、定位图形、校正图形用于二维码定位和图形校正,格式信息、版本信息、数据和纠错码字用于存储数据。
图4 二维码的组成Fig.4 Components of quick response code
列车运行时,列车不同时刻担当的车次不同,不同车次的售货机负责的商家不同,自动售货机开店时需要维护和校验当前负责的商家信息,数据维护复杂。二维码可以作为设备的唯一标识存储识别信息,供车上信息维护及购物等后续流程识别使用,提高操作的便捷性。
(1)二维码生成。二维码编码时,确定编码的字符类型并按相应的字符集转换成符号字符;将数据字符转换为位流构成数据码字序列,根据纠错等级和分块的码字产生纠错码字,将纠错码字放在数据码字序列后形成新的序列构造最终数据信息;将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中构造矩阵;将掩模图形用于符号的编码区域,生成格式和版本信息放入相应区域内[9]。
平台管理员设备维护及授权后,将设备信息、设备所在的车底信息等数据存储在二维码中。设备二维码将推送到售货机上,在设备屏幕上显示(没有屏幕时将二维码贴在售货机上)。设备更换或变更位置需要重新授权。
(2)二维码解析。二维码解码时,首先去掉掩码,然后从右下角开始z 字读取确定编码格式和大小,并根据编码格式和大小进行解码,并使用纠错码进行冗余校验,从而实现二维码的解码[8]。
列服人员使用列服人员APP扫描二维码,二维码解析将获得设备信息及车底信息。二维码扫描后弹出登录页面。列服人员登录成功后,需要输入本次担当列车的始发日期和始发车次,与二维码解析获得的设备信息和车底信息进行校验完成设备激活操作。
旅客使用微信扫描二维码,二维码解析将获得设备信息及车底信息。小程序将设备信息及车底信息传递到后台服务,获取当前售货机的可售餐食信息供旅客浏览及选购。
出货作为旅客购物的关键环节,涉及多次软硬件通信,容易出现不出货、少出货、货损等问题。出货故障影响旅客购物体验,增加自动售货机运维成本[10]。设计智能出货控制机制,从出货防重和出货顺序两方面实现对出货的智能管理,提高设备出货成功率。
(1)出货防重。商品的出货操作涉及触发硬件,硬件从收到出货指令到完成出货时间较长,出货结果同步返回易造成超时,售货机软硬件交互时涉及“申请出货”与“出货结果查询”2个接口,自动售货机出货业务流程图如图5 所示。出货结果查询未返回结果、接口调用失败、商品出货中时,需要重新查询出货状态;出货状态查询时返回无商品出货时,需要重新申请出货。为保证“出货状态查询”查询的为本次“申请出货”时的结果及重新申请出货时不造成重复出货,在每次出货申请时生成唯一标识,需要“出货状态查询”时查询此标识的出货情况,从而避免重复出货的情况。
图5 自动售货机出货业务流程图Fig.5 Shipping flow chart of vending machine
(2)出货顺序控制。旅客下单时,按照旅客的下单顺序出货。若前后订单接续出货时,两个订单出货之间无间隔,会出现商品误拿、错拿等情况。设计订单出货顺序控制,当前一订单正在出货时,后一订单仅可浏览商品,暂不可下单。等待前一订单所有商品出货成功后,页面推送提醒旅客可以下单。
由于不同种类商品的易碎、怕压程度不同,根据商品分类划分出货优先级,如盒饭类、饮料类、零食类等,怕压的商品最后出货,从而保证商品的完整性[11]。出货时,根据订单中商品的出货优先级顺序出货,降低货损、投诉等状况。若订单中某件商品出货失败,订单中的后续商品将不再出货。
由于设备及网络等原因,出货失败的情况不可避免。针对出货失败,设计自动处理与人工干预相结合的业务处理机制。自动处理具有处理迅速准确的特点,可迅速做出判断避免进一步损失;人工处理可以根据现场的实际情况及旅客的意愿做出处理,处理灵活、旅客满意度高。自动处理与人工干预相结合,共同完成出货失败异常处理。
(1)自动处理。出货失败后,为了避免造成进一步损失,此订单待出货的商品不再进行出货,同时对设备进行关店处理。设计出货失败提醒机制,当自动售货机出现出货失败时,列服人员APP将推送出货失败的语音提醒,提醒列服人员进行处理。为了方便列服人员进行人工干预处理,标记出货失败的货道、订单及商品为异常状态。
(2)人工干预处理。列服人员收到出货失败异常通知后,前往售货机查看及处理。根据现场设备情况及旅客意愿,列服人员可使用列服人员APP进行手工出货或退款处理。若商品发生卡货状况,列服人员调整卡货商品,使用手工出货方式逐件商品进行出货。当订单中所有商品均出货成功后,标记订单出货完成。对于手工出货仍不成功,以及旅客要求退款的情况,列服人员通过列服人员APP进行退款处理。
受制于列车空间、设备限制以及服务人员数量的影响,列车餐食作为旅客出行服务重要一环,提高旅客餐食满意度一直是铁路部门努力的方向[12-13]。设计自动售货机软件系统,解决了高速运行列车通信不稳定对设备的影响,以及自动售货机管理难题,实现旅客在自动售货机实现餐食选购、支付等功能。自动售货机服务是列车餐食领域的又一探索,完善了列车餐饮服务链,为旅客提供多样化、便捷的列车餐食服务。为进一步扩展服务内容和范围,可以考虑售货机在其他动车组列车及普速列车上进行推广,并不断丰富自动售货机的销售品类,为旅客提供更加优质的服务[14-15]。