共计 1602 个字符,预计需要花费 5 分钟才能阅读完成。
一、方法概述
本发明涉及一种在网约车等出行服务平台中,处理“渠道连环单”并上报司机位置的方法。该方法通过一系列逻辑判断、消息队列和延时任务,实现了在特定条件下向渠道方持续上报连环单司机的位置信息。
二、核心流程
第一部分:渠道向运力下连环单流程
此流程负责在创建订单时识别并标记连环单,为后续的位置上报做准备。
渠道下单 :渠道方向运力平台发起下单请求。
查询配置 :运力开放平台接收请求,查询该渠道的连环单配置标志
link_order_mark。非连环单处理 :若
link_order_mark ≠ 1,则设置下单参数isLink = 0,并直接跳转至步骤 7。查询灰度城市 :若
link_order_mark = 1,则进一步查询连环单灰度城市配置link_order_city。城市校验失败 :若灰度城市列表
link_order_city不包含请求中的cityId,则该城市不可下连环单,设置isLink = 0,并跳转至步骤 7。城市校验成功 :若
link_order_city包含cityId,则该城市可下连环单,设置isLink = 1。创建订单 :调用订单下单接口,生成订单号
orderNo,并记录渠道订单号与平台订单号的映射关系到partner_order_mapping表。智能派单 :派单系统根据
isLink参数筛选符合条件的司机。通知渠道 :调用开放平台接口,通知渠道方司机已接单。通知参数包括司机 ID (
driverId) 和连环单标记 (link_order,1 为连环单 )。标记连环单 :
若
link_order = 1,则在partner_order_mapping表的扩展字段中记录"link": 1。无论是否为连环单,最终都回调渠道方司机举手信息。
流程结束 。

第二部分:运力上报连环单司机位置流程
此流程在司机接单后,自动触发并循环上报司机位置。
确认司机 :渠道方调用运力开放平台接口,确认使用该司机。
内部确认 :开放平台调用内部派单系统接口确认使用司机。
绑定订单 :派单系统将订单与司机绑定,并将订单状态修改为 15(司机接单状态)。
状态变更通知 :订单状态变更后,系统发送一条 MQ 消息到主题
order_status_topic。消费状态消息 :开放平台消费
order_status_topic的 MQ 消息。状态判断 :判断订单状态
status是否等于 15。触发位置上报 :若
status = 15,且该渠道已配置需要上报连环单司机位置,同时从partner_order_mapping表中查询到该订单的连环单标志link = 1,则执行以下操作:
a. 设置一个 2 分钟的 Redis 锁,防止 MQ 消息重复消费。
b. 发送一条延时 5 秒的 MQ 消息到主题link_order_driver_loc_topic。消费位置上报消息 :消费者消费
link_order_driver_loc_topic的 MQ 消息。复核订单状态 :查询订单详情接口,再次确认订单状态是否为 15。
获取并上报位置 :
a. 当订单状态为 15 时,调用 LBS 系统查询司机当前位置。
b. 组装参数,调用渠道方提供的司机位置上报接口进行上报。计数与循环 :
a. 将消息发送次数count加 1。
b. 判断count是否大于预设上限(200 次)。若大于,则终止流程;若小于,则再次发送一条link_order_driver_loc_topic消息,从而形成循环上报。流程结束 。
核心要点总结:
双重校验 :通过灰度城市和渠道配置双重校验来确定是否为连环单。
异步解耦 :利用 MQ 消息队列(
order_status_topic和link_order_driver_loc_topic)实现系统模块间的异步通信和解耦。循环机制 :通过重复发送特定 MQ 消息,实现了司机位置的周期性上报,直至达到次数上限。
防重复设计 :通过 Redis 锁确保在关键步骤上不会因消息重复消费而导致错误。