本发明涉及旅游线路产品的起价计算技术领域,特别涉及一种旅游线路产品的起价计算的任务的生成方法。
背景技术:
起价计算是旅游行业一个比较特殊的需求,比电商平台上的商品价格计算要复杂得多。旅游行业的产品因为每天的价格可能都不一样,而且用户要选择哪天出行也不确定,因此每个产品就有一个起价,一般是几个月之内最低的价格。
旅游线路产品种类繁多,每个旅游线路产品在进行起价计算时涉及的待计价的资源及资源组合多种多样,涉及的资源提供方也不尽相同。待计价的资源包括许多种类,有国内机票、国内酒店、国际机票、国际酒店、单选项资源以及单选项机票等。其中,国内机票、国内酒店、国际机票、国际酒店的价格获取依赖于相应的资源提供方,不同的资源提供方对于每次查询的收费也不同,一般国际查询要比国内查询费用高很多;单选项资源为旅游线路产品经营方采购的已确定价格的机票和酒店打包后的资源;单选项机票为旅游线路产品经营方采购的有确定价格的机票,不再需要向机票提供方查询价格。
现有的起价计算采用一个旅游线路产品计算一次的方式,该方式存在很多问题:第一,单个产品多个日期同时请求,同旅游线路的多个日期对如机票接口等资源提供方造成过大的访问压力;第二、相同待计价资源反复请求,造成资源浪费及查询成本提高。另外,现有的起价计算多采用单机处理,即单机进行任务切分,由于单机处理能力有限,在待计价的数据量超过单机的处理能力之后就会出现瓶颈;同时还存在单点故障问题,在处理过程中一旦其中某一步出问题,前面所有的计算步骤都丢失,需要重新来过,极大浪费了计算资源。现有的以产品为单位进行起价计算的方式扩展性差,每增加一个新产品,均需要重新设计一套针对该新产品的起价计算处理流程,无法利用现有的处理流程,所以可扩展性差,另外现有的起价计算的任务的生成方法计算速度慢且存在瓶颈。
技术实现要素:
本发明要解决的技术问题是为了克服现有技术中旅游线路产品起价计算对资源提供方访问压力大、存在资源浪费、处理速度慢、可扩展性差且成本高的缺陷,提供一种能够提高处理速度、避免资源浪费、处理速度快且可水平扩展的旅游线路产品的起价计算的任务的生成方法。
本发明是通过下述技术方案来解决上述技术问题:
一种旅游线路产品的起价计算的任务的生成方法,其特点在于,包括以下步骤:
S1、获取符合条件的旅游线路产品的信息;
S2、根据所述旅游线路产品的信息获取对应的航线,所述航线用于识别待计价的资源;
S3、对相同航线的产品进行聚合,以生成航线和产品对应关系数据;
S4、根据所述待计价的资源对所述航线进行任务切分,以生成待处理任务。
本方案中,通过对航线相同的旅游线路产品进行聚合,再根据航线进行任务切分,生成的任务后续被调用执行后能够获得航线中待计价资源的价格,再将这些价格应用到此航线相关的产品中,从而通过一个航线的价格计算获取了该航线对应的所有产品的价格。本方案避免了以旅游线路产品为单位进行起价计算时过多的冗余计算,减少对资源提供方的访问压力、避免不必要的资源浪费,进而降低了访问成本;该方法通过优化处理流程提高了起价计算的处理速度,另外针对新产品,只需获取该新产品对应的航线,将该新产品聚合到已有航线中即可完成起价计算,不需要针对该新产品设立一套全新的起价计算处理流程,所以本方法可水平扩展。
较佳地,步骤S3采用分布式计算架构进行聚合。
本方案采用分布式计算架构,将排序及聚合等分配到不同的处理器进行处理,不再依赖于提高单机的性能,只需普通的多台处理器相互配合即可快速完成任务的切分,同时避免了单机故障及单机瓶颈。
较佳地,所述分布式计算架构为Spark(一种开源集群计算环境)。
较佳地,所述旅游线路产品的信息包括产品优先级,步骤S3中聚合前还包括以下子步骤:S31、根据所述产品优先级对所述旅游线路产品进行优先级排序。
本方案中,产品优先级可以分为高、低两个优先级,对于涉及的日期新鲜的旅游线路产品,因为之前被计算到的概率最低,所以将这类旅游线路产品优先处理,设定高优先级产品,其它日期的旅游线路产品的优先级为低,待优先级高的旅游线路产品处理完毕后再进行处理。
较佳地,所述旅游线路产品的信息还包括产品可用日期,步骤S31之后还包括以下子步骤:S32、根据所述产品可用日期对不同优先级的所述旅游线路产品进行日期排序,用以确定进行任务切分的顺序。
本方案中,对于相同产品优先级的旅游线路产品根据产品可用日期由近及远进行排序,日期最近的优先处理,以满足客户端在查询旅游线路产品的起价时优先查看最近日期产品的实际需求。
较佳地,所述待计价的资源包括国内机票、国际机票、国内酒店、国际酒店、单选项资源和/或单选项机票。
较佳地,步骤S4之后还包括以下步骤:S5、将所述待处理任务传输至不同的消息队列。
本方案中,待处理任务根据任务类型的不同被传输至不同的消息队列,消息队列可以包括国际酒店消息队列、国际机票消息队列、国内酒店消息队列、国内机票消息队列、单选项资源消息队列和单选项机票消息队列等。后续任务处理程序会去对应的消息队列获取并执行待处理任务,任务执行后的结果为得到待计价资源的价格,如通过国际酒店资源提供方获取国际机票的价格。根据航线和产品对应关系数据能够获知涉及该待计价资源的价格的所有旅游线路产品,然后再对这些旅游线路产品的价格进行更新,从而实现旅游线路产品的起价计算。
较佳地,所述消息队列采用hermes(一种消息队列工具)。
较佳地,所述符合条件的旅游线路产品包括可售的产品、可被搜索到的产品和/或可预订的产品。
较佳地,所述航线包括出发地、出发时间、经停地、经停时间和/或目的地。
本发明的积极进步效果在于:本发明提供的旅游线路产品的起价计算的任务的生成方法通过对航线相同的产品进行聚合,再根据航线进行任务切分,生成的任务后续被调用执行后能够获得航线中待计价资源的价格,再将这些价格应用到此航线相关的产品中,从而通过一个航线的价格计算获取了该航线对应的所有产品的价格。本方法避免了以产品为单位进行起价计算时过多的冗余计算,减少对资源提供方的访问压力、避免不必要的资源浪费,进而降低了访问成本;该方法通过优化处理流程提高了起价计算的处理速度,另外针对新产品,只需获取该新产品对应的航线,将该新产品聚合到已有航线中即可完成起价计算,不需要针对该新产品设立一套全新的起价计算处理流程,所以本方法可水平扩展。
附图说明
图1为本发明的旅游线路产品的起价计算的任务的生成方法的流程图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
如图1所示,一种旅游线路产品的起价计算的任务的生成方法,包括以下步骤:
101、获取所有符合条件的旅游线路产品的信息,即获取所有需要计算起价的产品的信息,所谓符合条件的旅游线路产品包括可售的产品、可被搜索到的产品和/或可预订的产品。本实施例中旅游线路产品包括国际线路产品、国内线路产品和热门线路产品,本方法每次仅针对三类产品中的一类进行起价计算任务的生成。
102、根据旅游线路产品的信息获取对应的航线,航线用于识别待计价的资源;每个产品都会对应至少一个航线,航线包括出发地、出发时间、经停地、经停时间、目的地,不同航线涉及若干不同的待计价的资源。待计价的资源包括国内机票、国际机票、国内酒店、国际酒店、单选项资源和/或单选项机票。
103、旅游线路产品的信息包括产品优先级和产品可用日期,首先采用分布式计算架构Spark,根据产品优先级对旅游线路产品进行优先级排序,然后再根据产品可用日期对不同优先级的旅游线路产品进行日期排序,用以确定进行任务切分的顺序。
104、采用分布式计算架构Spark对相同航线的产品进行聚合,以生成航线和产品对应关系数据;聚合后的结果为同一航线包括若干产品,同一航线涉及的待计价的资源是相同的,即同一航线聚合后的若干产品需要获取的待计价资源是相同的。
105、根据待计价的资源对航线进行任务切分,以生成待处理任务,同时生成不同任务对应的航线标识。每个航线根据该航线包含的待计价资源分成若干任务,每个任务执行后能够获得航线对应的资源的价格信息,进而后续能够获得最终的该航线的价格信息,根据聚合后航线和产品对应关系数据能够获知该航线相关的所有产品的起价。
106、将待处理任务传输至不同的消息队列hermes,以供后续继续处理。
本实施例中步骤103采用高、低两个优先级,对于一次计算3个月如90天的起价计算的情况,第90天因为日期最为新鲜,以前被计算到的概率最低,所以第90天的旅游线路产品的优先级为高,优先处理,其它日期的旅游线路产品的优先级为低,处理完高优先级的旅游线路产品后再进行处理。
本实施例通过对航线相同的产品进行聚合,再根据航线的待计价的资源进行任务切分,生成的任务执行后能够获得航线中待计价资源的价格,再将这些价格应用到此航线相关的产品中,从而通过一个航线的价格计算获取了该航线对应的所有产品的价格。本方法避免了以产品为单位进行起价计算时过多的冗余计算,减少对资源提供方的访问压力、避免不必要的资源浪费,进而降低了访问成本;该方法通过优化处理流程提高了起价计算的处理速度,另外针对新产品,只需获取该新产品对应的航线,将该新产品聚合到已有航线中即可完成起价计算,不需要针对该新产品设立一套全新的起价计算处理流程,所以本方法可水平扩展。
本实施例采用分布式计算架构Spark,将排序及聚合分配至不同的处理器进行处理,不再依赖于提高单机的性能,只需普通的多台处理器相互配合即可快速完成任务的切分,同时避免了单机故障及单机瓶颈的问题。
本实施例采用Spark和消息队列切分及处理任务,使得待计价资源间相互解耦,一种待计价资源进行价格查询任务时发生问题时不会影响其它资源的价格获取,也不会影响最终起价计算的结果的生成。
本实施例的方法处理国际线路产品、国内线路产品和热门线路产品频率不同,因为国际线路产品涉及的资源提供方较复杂,每次访问资源提供方获取价格时价格比国内都要高,价格查询成本较高,所以对于国际线路产品的起价计算的处理频率一般低于国内线路产品和热门线路产品。
下面继续通过具体的例子,进一步说明本发明的技术方案和技术效果。
对于携程旅行网上所有可售、可被搜索及可被预定的国际路线产品进行起价计算,首先判断今天是否已经执行过起价计算,如果没有则执行以下步骤:
第一、获取携程旅行网上所有可售、可被搜索及可被预定的国际路线产品,本例中共涉及5个产品,产品1的ID(编号)为4349896,产品2的ID为4349818,产品3的ID为1013038860,产品4的ID为1013037746,产品5的ID为2617907。
第二、获取每个产品对应的航线,产品1的航线为20170220-WUH-SEL_20170224-SEL-WUH,产品2的航线为20170220-WUH-SEL_20170224-SEL-WUH,产品3的航线为20161127-HKG-TPE_20161130-TPE-HKG,产品4的航线为20161127-HKG-TPE_20161130-TPE-HKG,产品5的航线为20161215-XIC-SIN_20161215-SIN-DPS_20161221-DPS-SIN_20161221-SIN-XIC。可以看出,产品1和产品2航线相同,产品3和产品4航线相同。
第三、采用分布式计算架构Spark进行排序聚合,根据产品日期的优先级进行排序,其中产品1和产品2的优先级为高,因为这两个产品的日期最新鲜,为第90天产品,是之前未被计算过价格的产品,而产品3、4、5的优先级为低。
第四、再根据产品可用日期对高优先级的产品1和产品2进行排序。
第五、再根据产品可用日期对低优先级的产品3、4、5进行排序。
第六、完成前面几步后相同日期内的产品以产品的ID倒序进行排列,这是因为产品是自增的,这样越是新增的越排在前面。
第七、聚合后的结果为航线1对应产品1和产品2,航线2对应产品3和产品4,产品5为航线3。
第八、优先处理航线1的资源,生成机票、酒店、单选项资源、必选项资源的任务,包括某天国际机票查询任务、酒店资源查询任务、单选项资源查询任务、必选项资源查询任务。
第九、将切分后的任务传输至hermes。
第十、后续进行各个资源任务的队列各自处理,各个队列任务处理相互独立,队列的处理不会互相干扰,真正做到并行计算,并做各自的限流,做到不同资源的调用动态可控,被调方有任何调整可以立马应对即动态限流,不会对被调方造成不良影响,最后各自队列的任务汇总计算价格并填写进入存储系统,为后续线上操作提供数据。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。