校园外卖中转配送的落地顺序是:商家出餐贴标,校外骑手送到校门中转点,站点扫码或录码收餐,按楼栋分筐,校内骑手接力,最后在楼下或指定点通知核销。先把校方通行、交接责任和异常暂存定清,再把订单状态、地址层级、站点权限和两段计酬做成可核验配置,最后用一批测试单验收。
中转配送的技术难点不在“多一个中转点”,而在每段都有明确的输入、输出和责任人。建议把履约拆成五段,每段都留下可追溯记录。
阶段 | 现场输入 | 系统记录 | 责任切换点 |
|---|---|---|---|
商家出餐 | 餐品、订单小票或二维码 | 订单号、商家、出餐时间、标签 | 商家把餐交给校外骑手 |
校外送达校门 | 餐品、批次、送达数量 | 骑手、站点、到站时间、扫描结果 | 站点收餐成功 |
站点分拣 | 楼栋或片区筐、异常餐 | 分拣人、分组、异常原因 | 分拣完成并移入待派送区 |
校内接力 | 片区筐、校内骑手 | 认领人、批次、离站时间 | 校内骑手领走餐品 |
送达核销 | 取餐点或楼下交付 | 送达时间、核销方式、通知记录 | 用户取餐或骑手核销 |
交接点位置、班次、暂存条件和异常餐责任要先与校方确认。扫码是交接记录点,不是自动裁判;系统记录与现场交接单、异常单要能对得上,才能用于复盘和结算。
订单状态建议固定为:已下单、商家接单、校外骑手取餐、已到站、已分拣、校内骑手取餐、已送达,异常单进入独立分支。到站扫码只允许从“校外骑手取餐”进入“已到站”;送达核销只允许从“校内骑手取餐”进入“已送达”。重复扫码、跨站订单和状态跳跃应在应用层拦截并留下原因。
当前状态 | 允许事件 | 下一状态 | 异常处理 |
|---|---|---|---|
校外骑手取餐 | 到站扫码或录码 | 已到站 | 重复事件返回原记录,不重复计酬 |
已到站 | 按楼栋分拣 | 已分拣 | 少餐、错餐转异常分支 |
已分拣 | 校内骑手认领 | 校内骑手取餐 | 跨区认领需单独标记 |
校内骑手取餐 | 送达核销 | 已送达 | 无人接收转暂存或退回 |
from dataclasses import dataclass
@dataclass(frozen=True)
class ScanEvent:
event_id: str
order_id: str
station_id: str
event_type: str # ARRIVE / SORT / PICKUP / DELIVER
operator_id: str
ts: int
def validate_scan(order, event, seen_event_ids, station_campus):
if event.event_id in seen_event_ids:
return 'DUPLICATE_EVENT'
if event.station_id not in station_campus:
return 'UNKNOWN_STATION'
if station_campus[event.station_id] != order['campus_id']:
return 'CROSS_CAMPUS'
if event.event_type == 'ARRIVE':
return 'OK' if order['status'] == 'OUTSIDE_PICKED' else 'INVALID_STATE'
if event.event_type == 'DELIVER':
return 'OK' if order['status'] == 'INSIDE_PICKED' else 'INVALID_STATE'
return 'OK'
# 预期用例:正常到站返回 OK;同一 event_id 重放返回 DUPLICATE_EVENT;
# 订单属于主校区、站点属于分校区时返回 CROSS_CAMPUS。这段示例只表达规则校验方式,不替代具体系统实现。上线时要核对重复扫码、模糊码、跨站订单和状态跳跃的实际提示与纠正路径,并确认设备、码制和操作权限。
地址层级建议统一为“学校—校区—楼栋—楼层或宿舍区—取餐点”,每层使用稳定编码,新旧楼号和常用简称做别名映射。订单按下单地址进入对应楼栋或站点分组,学生端、后台和骑手端看到同一名称。
配置域 | 关键配置 | 验收动作 |
|---|---|---|
地址 | 校区、楼栋、楼层、取餐点、别名 | 用真实楼栋下单,核对下单页、后台分组和骑手端一致 |
站点 | 一个校区对应一个站点,站点绑定交接点 | 用两个校区账号互看订单、财务和导出范围 |
权限 | 分拣员只开收餐、异常登记;财务单独授权 | 用分拣账号尝试查看资金和其他校区订单 |
跨区支援 | 支援骑手、支援订单单独标记 | 检查支援单的归属、补贴和结算是否分开 |
多校区复制时,以一个校区一个站点作为配置单位,总部统一品牌和通用规则,各校区维护自己的商家、骑手、楼栋地址、中转点和营业时段。跨区支援和结算归属要在方案中写清,避免订单串站后责任和收入无法对应。
中转模式涉及商家货款、校外骑手、校内骑手和平台服务费。建议把计酬事件与订单状态绑定:到站记录可触发第一段计酬,送达核销可触发第二段计酬;退款、少餐、错送和结算后退款通过反向分录或后续账单调整处理。具体触发节点、支付通道和合同规则按项目确认。
账务事件 | 记录内容 | 幂等键 | 异常处理 |
|---|---|---|---|
到站计酬 | 校外骑手、站点、订单、金额 | 订单号加到站事件号 | 重复扫码不重复生成 |
送达计酬 | 校内骑手、批次、订单、金额 | 订单号加送达事件号 | 撤销核销需反向分录 |
退款回冲 | 原订单、退款金额、承担方 | 退款单号 | 已结算订单走调整账单 |
验收不要只跑正常单。下面这组用例能同时验证状态机、分拣、通知、权限和账务。
用例 | 输入 | 预期结果 |
|---|---|---|
正常中转 | 一笔订单走完到站、分拣、接力、核销 | 状态完整,两段记录可追溯 |
重复扫码 | 同一到站事件提交两次 | 第二次提示重复,不重复计酬 |
跨站订单 | 主校区订单扫入分校区站点 | 拦截并提示校区不匹配 |
模糊码 | 二维码损坏,改录订单号或尾号 | 可查到订单并留录码记录 |
少餐错餐 | 分拣时数量或楼栋不符 | 转异常区,关联原订单和责任人 |
结算后退款 | 订单已计酬后发生退款 | 生成回冲或调整账单 |
跨区支援 | 校内骑手支援其他片区 | 支援单单独标记,补贴可核对 |
批量通知 | 一批订单完成分拣或送达 | 通知按批次发送,失败可重试 |
上线后重点看到站至分筐时长、分筐至通知时长、异常单占比、重复扫码次数和跨站单数量。若积压集中在分拣台,先调上游送站节奏和班次;若跨站单反复出现,先查站点与校区映射;若重复扫码多,先查事件幂等和现场操作规范。这样技术验收才能回到经营流程。
问:扫码后系统会自动定责吗?
答:扫码是交接记录节点,责任规则仍要由项目制度和现场交接单确定;系统是否提示重复扫码或跨站订单,按实际配置验收。
问:中转一定要分两段结算吗?
答:业务上建议按校外、校内两段分别计酬,系统能否按到站和送达节点触发,要结合版本、支付通道和合同规则核对。
问:多校区怎么防串单?
答:站点绑定校区、角色限定数据范围、跨区支援单独标记,再用两个校区账号互看订单、财务和导出列做验收。
问:低预算先配什么?
答:先配地址层级、扫码收餐、分拣分组、通知和权限,再按阶段评估分段计酬与定制范围,报价按模块和交付内容分项确认。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。