黄勋科
(郑州地铁集团有限公司运营分公司,河南 郑州 450000)
地铁乘务管理系统在国内部分地铁公司运营应用较为普遍,其核心功能是交路表编制、出退勤管理,存在着优化提升的空间,如导出版时刻表不能直接打印,仍要耗费较多时间进行排版。通过算法分析构建时刻表排版系统,导出的时刻表能使用系统一键转换,转换后的时刻表基本可直接打印,将大大提高效率,压缩交路表编制周期,具有非常重要的实用价值。
在未使用地铁乘务管理系统前,交路表编制往往要5~10 人的编制小组花费至少8 h 才能完成,复杂的交路编制可能要用更多时间。使用乘务管理系统后能大大提高交路表编制效率,基本上一个人就能通过乘务管理系统来完成交路表编制。根据时刻表交路编制复杂程度的不同,需要5~8 h来完成(包括系统交路编制、排班规则编制、发车计划编制、交路概述编制、交路表排版打印、时刻表排版打印等),纯系统交路编制一般需要2~4 h。时刻表导出后一般要进行打印前排版,根据不同地铁公司的管理要求,可能要在时刻表中加入出库动车点、标记投入载客时间点、标记是否有扣车、标记特殊车次提示标语、标记上下行箭头、标记交路号所在行底色等标记或提醒标语,整个过程仍需1.5~2 h,其占整个交路表编制时间较长。在时刻表启用时间比较少的情况下,无法按时完成交路表编制任务,会影响乘务运营。
近年来,突发公共事件对地铁运营造成较大影响,时刻表变换次数明显增多,而时刻表从发布到启用的时间下限也在不断刷新,如郑州地铁5 号线有记录以来的最低时间为时刻表发布2 h 后启用。因此,交路编制快慢决定着乘务司机能否使用交路表,关系到乘务运作的稳定性。若能通过信息化系统来实现时刻表打印排版,提高工作效率,压缩交路表编制周期,便能使乘务专业人员更好地应对时刻表频繁变更带来的风险与挑战。本研究通过对时刻表排版工作进行研究,利用PhpSpreadsheet 来开发时刻表打印排版系统,可解决“最后一码”的问题。
以郑州地铁5 号线环线时刻表为例,来具体分析时刻表打印排版内容及流程。目前,使用中的乘务管理系统在交路编制完成后,导出的时刻表未对重点车次、时间点进行标注,不符合乘务运作管理要求,不能直接打印使用,要进行排版后方可打印使用。
为保障乘务运作的稳定性,在启用新时刻表前一般要对特殊车次重点关注,并对司机进行培训,避免因电客车司机理解有偏差而导致运营安全事故的发生。基于多年地铁乘务运作经验,郑州地铁5 号线时刻表打印排版内容及流程逐渐固定,具体分为以下18 项内容,详见表1。其中,字号、列宽、行高的调整主要是为了调整时刻表单面缩放大小,便于司机能轻松使用时刻表;站名加粗使其显示更明显,便于司机通过站名迅速查找发车时间点;取消首末班车黄底是为了避免过多颜色影响查看时刻表;交路号所在行标记浅灰色是为了与时刻表中时间进行区分,便于快速通过交路号查找时间点;标注经北二路行底色浅蓝,适用于标记未开通运营车站,表示此站不停车通过,与其他站点时间明显区分,避免错误停站等人为失误事故发生;删除页眉空白行主要是为了尽可能增加时刻表有效显示面积;拆分航海广场站名及删除其下方交路号主要是为了方便标注航海广场处交路号所在行底色,后续的合并航海广场站名是其拆分的配套动作;标记各车次首个投入载客点加粗及黄底黑粗框是为了便于司机查看投入载客站发车点,避免列车早发、晚发;航海广场上下行发车点加粗及黑粗框是为了接车司机方便查找所接列车发车点,避免中间站因交接延误发车;在月季公园识别并标注计划停车时长超过80 s 列车,添加“注意扣点”字样,这是为了防止列车早发、晚发,郑州地铁5 号线采用内外环环线运营,在早晚高峰转峰期间会进行行车间隔调整,不可避免地会有部分列车在始发站多停,识别和标注扣点列车很有必要;将站名列插入时刻表两端也是为了每个车次的时间点都能就近找到所在车站行,避免因看错行而误判时间;加入上行下箭头是为了方便快速区分上下行车次及时间走向。
表1 时刻表打印排版内容及流程
因时刻表是Excel 文件,对其进行信息化处理就要用到相关程序。PhpSpreadsheet 是由PHP 编写的数据库,其提供一组类,允许读取和写入各种电子表格文件(如Excel 等),还可修改并下载Excel 文件,而这正是本研究分析的关键。将乘务管理系统中导出的时刻表,通过PhpSpreadsheet 进行相关操作,完成要手动完成的打印排版操作,并下载生成最终需要的打印版时刻表,从而完成导出版至打印版的转换工作。
PhpSpreadsheet 可对Excel 表格进行插入行/列、删除行/列、合并/拆分单元格、设置行高、设置列宽、设置字体大小、设置字体颜色、设置单元格填充色、设置单元格边框样式、修改单元格内容、插入图片等操作,还可设置页边距、纸张大小及是否缩放等打印设置。可使用composer 将PhpSpreadsheet 安装到服务器中。
在明确时刻表排版内容及流程和系统环境部署正确的前提下,完成时刻表打印排版系统的算法编写。该系统的主要实现过程为上传时刻表文件、转换时刻表文件、下载时刻表文件。
在时刻表打印排版系统开始工作前,要加载必要的文件,以便各类方法能正常使用,实现代码如下。
读取并加载时刻表文件,获取活动工作薄,便于后续对表格进行操作;获取总行数,便于对数据处理量进行判断,避免不必要的操作。具体代码如下。
时刻表中内容为A-U 列,1 行至获取的总行数,通过getFont 等函数来设置字体大小、颜色及行高,核心代码如下。
通过对时刻表分析可以得出,所有有交路号的行在K 列会有“交路号”字样。因此,可通过对K 列所有单元格的值进行判断,并用变量$i标注当前所在行,如包含“交路号”字样,则用getStyle 函数对该行填充色进行修改。对中间换乘站只插入交路号,在K 列未插入“交路号”字样的情况,可通过站名行下第2 行是否为空值进行判断,若有值说明未插入交路号,则不对填充色进行标注,如图1 所示。核心代码如下。
图1 设置交路所在行底色
通过对时刻表分析可以看出,下行五龙口停车场出厂列车有转换轨发车点的单元格均在K 列“车次号”所在行下方第3行,可对下行A-J列相应单元格是否有值进行判断,如有值则说明是出厂车,对其转换轨发车点进行底色标注,并通过公式计算其出库动车点,在车次号所在行下方第1 行插入时间,并将K 列库内动车点所在行的“备注”字样修改为“库内动车点”。利用类似的原理,还可对上行五龙口停车场出厂列车、中州大道车辆段上行及下行出厂列车转换轨动车点及库内动车点进行标注,如图2所示,核心代码如下。
图2 设置转换轨发点、库内动车点及提示标语
时刻表中,中州大道车辆段出入厂列车在转换轨不停车,因此要标注提醒标识,如“不停车回段”。通过判断回段时转换轨是否有时间值来判断是否有列车回段,若有列车回段则进行提醒标识插入指定单元格,核心代码如下。
通过时刻表分析可以看出,上行第二个站如有到点,说明上行该列车在第一个站已投入载客,否则该列车在中间某站投入载客,向上判断直至某站既有到点又有发车点,说明列车在此站投入载客,判定正确后对投入载客站单元格样式进行设置并在合适位置插入提示标语。类似方法可对下行投入载客站发点单元格样式及中间站载客提示标语进行设置(见图2),核心代码如下。
通过getPageSetup 等相关函数对打印相关样式进行设置,核心代码如下。
在时刻表上下行页面分别插入箭头图片,核心代码如下。
在完成所有格式转换后,下载最终文件,核心代码如下。
通过建立该系统,如图3 所示,可快速对时刻表进行排版转换,微调就可打印使用,整个转换过程约为50 s,较人工排版节省约90 min,明显压缩交路表编制周期,提高时刻表紧急启用下乘务运作应对能力,降低交路编制员工工作强度。该系统已在郑州地铁5号线Z05122、Z05613时刻表打印排版中进行试用,系统设定的功能均已实现,发车点、注意扣点、转换轨发点、中间站投入载客站、上下行箭头、车辆段不停车出段等标记准确,系统功能正常,通过定制化修改可推广应用于其他领域。
图3 时刻表打印排版系统
不同线路的时刻表具有不同特点,不同地铁公司也有不同管理方法。因此,时刻表排版的方法也各有不同。本研究设计的时刻表打印排版系统目前只适用于郑州地铁5 号线,若用于其他线路,则要对时刻表排版内容及流程分析后进行定制化系统建设。
通过对PhpSpreadsheet在地铁时刻表打印排版系统中的应用研究,可以解决乘务管理系统无法排版时刻表这一难题,能有效弥补乘务管理系统功能的空白。同样,PhpSpreadsheet 也可应用于Excel 表格处理工作量大、流程比较固定的工作场景,通过设计算法,可以提高工作效率,解决更多系统化系统未实现的“最后一码”问题。