县城多门店外卖履约,先按统一接单、共享骑手池、分门店对账设计,再用正常单、退款单、提现单和异常转单验收;系统选型先看门店库存、打印、权限和跨店调度能否现场演示,再决定SaaS、私有化或自研。
门店相距近、品类相近、单量分散,优先统一后台加共享骑手池;门店相距远、品类差异大,如火锅与早餐,独立骑手加总后台汇总更稳。多商户平台、同一主体多门店、多区域分站是三种模型,账务主体、权限边界和库存归属不同,建模时先分开。
建模先固定四类主键:运营主体tenant_id、门店store_id、入驻商户merchant_id、骑手池pool_id。门店表至少记录配送模式、打印路由、库存范围、结算主体和可见订单范围。一个门店可属于一个商户,也可只属于运营主体;骑手池可按区域或门店组共享。下面SQL只表达约束,属于设计示例,不代表任何现成系统实现。
CREATE TABLE store (
store_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
merchant_id BIGINT NULL,
delivery_mode VARCHAR(16) NOT NULL, -- PLATFORM / MERCHANT / MIXED
pool_id BIGINT NULL,
print_route VARCHAR(64) NOT NULL,
inventory_scope VARCHAR(16) NOT NULL, -- STORE / MERCHANT
settle_subject VARCHAR(64) NOT NULL
);
CREATE TABLE rider_pool (
pool_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
region_id BIGINT NOT NULL,
dispatch_mode VARCHAR(16) NOT NULL -- AUTO / GRAB / MIXED
);
CREATE TABLE order_snapshot (
order_no VARCHAR(32) PRIMARY KEY,
channel VARCHAR(16) NOT NULL, -- THIRD_PARTY / SELF
store_id BIGINT NOT NULL,
pool_id BIGINT NULL,
status VARCHAR(24) NOT NULL,
goods_cent INT NOT NULL,
delivery_cent INT NOT NULL,
discount_cent INT NOT NULL,
user_paid_cent INT NOT NULL
);县城履约的关键不是有没有抢单按钮,而是订单状态、骑手任务和门店出餐节奏能否对齐。建议固定主状态链:待支付→已支付→商家接单→备餐→待取餐→配送中→已送达;取消、退款、异常转单作为旁路,保留原状态记录。
状态迁移 | 关键校验 | 异常记录 |
|---|---|---|
待支付→已支付 | 支付回调幂等、配送范围与库存校验 | 重复回调、超时未支付 |
已支付→商家接单 | 接单超时、拒单原因、自动取消规则 | 商家未接单、商品售罄 |
备餐→待取餐 | 出餐完成时间、打印成功或补打记录 | 打印机离线、重复出票 |
待取餐→配送中 | 骑手取餐确认、位置核对、拍照留存 | 取错餐、骑手迟到 |
配送中→已送达 | 送达确认、收餐人反馈、异常上报 | 地址变更、联系不上顾客 |
任意状态→退款/取消 | 退款金额、骑手补偿、优惠冲回 | 结算后退款、重复退款 |
派单过滤顺序可定为:配送范围→门店营业状态→骑手在线与负载→取餐距离→顺路方向→门店权重。跨店顺路拼单、门店权重和超区回退,要用两家同方向门店现场演示并记录派单结果;POC结论写进验收单,口头说明只作为线索。
候选骑手 = 在线 且 未超载 且 在服务区 且 可承接该门店组
按 取餐距离、顺路方向、门店权重 排序
若无候选:进入人工调度池,保留失败原因与重试次数自动派单适合高峰保时效,抢单适合平峰补灵活,两者可并存。转单要记录原骑手、接手骑手、责任时间点和收益归属,避免同一任务重复结算。
多门店对账要把订单快照、门店或商户账单、骑手收益和退款冲回分开记录。订单快照保存用户实付、商品、包装、配送费、优惠承担、平台抽成、商家应结和骑手收入;退款用独立调整表幂等冲回,避免直接改原订单金额。对账按“渠道×门店×结算周期”出账,才能看清第三方商家自配送单、自营小程序单和混合模式差异。
CREATE TABLE refund_adjustment (
refund_no VARCHAR(32) PRIMARY KEY,
order_no VARCHAR(32) NOT NULL,
refund_goods_cent INT NOT NULL,
commission_reverse_cent INT NOT NULL,
status VARCHAR(16) NOT NULL,
UNIQUE KEY uk_order_refund (order_no, refund_no)
);验收准备四类单:第三方平台商家自配送单、自营小程序单、部分退款单、一次提现。每类记录状态回传、骑手收益、商家应结和退款冲回;结算后退款要确认是冲减当期还是进入下一期,支付通道和账期按项目规则确认。
方案 | 适用条件 | 必须核验 |
|---|---|---|
SaaS | 预算有限、需要快速试运营、无长期技术团队 | 多门店权限、库存隔离、打印路由、骑手池、账单样例、数据导出 |
低代码 | 有少量报表或流程定制、单量不大 | 实时派单性能、退款幂等、并发和账务一致性 |
私有化 | 有自有环境、运维和合规要求 | 备份、监控、升级、许可、支付通道 |
自研 | 有独特调度策略或深度接口、长期技术团队 | 状态机、幂等、对账、运维成本 |
判断顺序先看业务复杂度:门店是否共享商品库、是否允许跨店拼单、是否多结算主体、是否需要第三方订单回传。若只是统一接单和分账,标准产品加现场验收通常更快;若调度策略是核心竞争力,再考虑自研或源码级扩展。
先选两三家门店跑三到五天,不追求全量。每天用固定脚本走一遍:正常单、第三方自配送单、自营单、部分退款、结算后退款、提现、转单、打印机离线。记录订单号、状态时间点、操作人、金额变化和失败重试结果,异常处理要落表。
场景 | 预期结果 | 反例 |
|---|---|---|
打印机离线 | 自动重试、补打或转路由 | 订单进入后厨但未出票 |
重复支付回调 | 只生成一笔有效支付 | 重复扣款或重复派单 |
骑手转单 | 任务归属、收益、责任时间点可查 | 原骑手仍可操作 |
退款 | 同一退款单幂等冲回 | 重复冲减或金额越界 |
提现 | 余额、审批、到账状态可查 | 余额扣减但无流水 |
Q1:县城多门店一定要自研吗?
先按门店距离、共享骑手、分账复杂度和团队维护能力判断。多数项目可先用标准产品演示核心流程,再决定是否定制;自研适合调度策略独特且有长期技术团队的项目。
Q2:第三方平台商家自配送订单怎么接?
看授权主体、订单类型、状态回传、取消退款和骑手收益是否同链路。不要只看能否导单,先下一笔真实测试单,记录回传字段和异常处理。
Q3:门店库存和店员权限怎么验?
用两家门店同商品不同库存、不同店员账号、各自打印机测试,确认订单、库存、打印和结算是否分店隔离。
Q4:跨店顺路拼单怎么验证?
用两家同方向门店、两个收货地址现场演示,记录派单规则、骑手任务、门店权重和超区回退;没有演示记录就不写成已支持。
作者:微订(上海逊柯计算机科技有限公司)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。