SYSTEM DESIGN OVERVIEW · 2026

Airport Driver
Dispatch Platform

一个司机端 + admin 端 + 后端三位一体的接机调度系统。从 OTA 抓单到结算付款,每一步都有数据库级别的兜底。

8Admin 模块
10DB Migrations
4+OTA 平台接入
3Languages 中/EN/ES
01 — Why we built it

The Problem

从 OTA 平台接单的接机调度生意,靠 Excel + WhatsApp 跑到 50 单/天就崩了。

手动派单到了天花板

运营靠 WhatsApp + Excel 一单一单分给司机。50 单/天后基本失控,错单 / 漏单天天发生,钱和信任两边都赔。

司机为热门订单互相抢

固定派单算法下,热门时段单子分给运气好的司机,冷门时段没人接。运力分配不公平,公司订单接不过来。

没 GPS 证据,纠纷一边倒

乘客 no-show 没有客观证据。司机和运营吵到最后,公司每次都得赔司机钱。

OTA 订单散落 5+ 平台

Talixo / Mozio / Mydriver / Kiwitaxi 各家有自己的后台。运营每天得切 5 个网页登录,错过订单是常态。

02 — The Solution

One platform, end-to-end

从 OTA 抓单 → 司机抢单 → GPS 追踪 → 联系乘客 → 出发 → 到达 → 完成 / 申请 No-show → 结算付款。

8
ADMIN 模块
10
DB MIGRATIONS APPLIED
4+
OTA 平台接入
3
中 / EN / ES 多语

司机端 App

OTP 登录、强制 GPS、实时订单池、反向荷兰拍卖出价、强制联系乘客、No-show 证据上传、查收入历史。

Admin 端

派单中心、手动建单、司机评分、No-show 审核、实时热力图、月度结算。多城市并行,时区独立。

后端

Supabase Postgres + Edge Functions。状态机 trigger / RLS / pg_cron / 服务端逻辑全部在数据库层强制。

03 — Order Lifecycle

State Machine 在数据库层强制

Postgres trigger 拒绝任何非法状态迁移(比如 "completed → en_route")。客户端绕不过去。

PENDING
OTA 抓单 / 手动新建
ACCEPTED
司机出价中标
EN ROUTE
联系完乘客出发
ARRIVED
GPS 确认抵达
COMPLETED
完成 → 结算

CANCELED

抵达前 admin 可取消(pickup_time 距现在 > 6h 司机也可主动退池)

NO-SHOW

司机苦等乘客没到 → 提交证据 → admin 决定 100% 付 / 0% + 投诉

为什么用状态机? 数据库 trigger fn_orders_state_machine 检查每次 status 变更。 Mobile App 想绕过校验直接 UPDATE → trigger 抛 EXCEPTION,订单状态不会进非法值。这是**最后一道防线**。

04 — Two apps, one codebase

共享一份 Flutter 代码

司机端和 admin 端打包成同一个 APK / IPA,登录后按 is_admin 字段进入不同入口。省一半开发成本。

司机端 Driver

  • Phone OTP 登录(无密码)
  • 启动后必须授权 GPS,不授权进不了主页
  • 实时待抢订单池
  • 反向荷兰拍卖出价
  • 强制联系乘客后才能切到 EN ROUTE
  • No-show 必传 3 张证据图
  • 查个人收入 / 评分 / 投诉记录

Admin 管理端

  • 手动建单(自动 geocode 地址)
  • 派单中心:nearest_drivers 排序
  • 司机评分 + 投诉录入
  • No-show 待审列表 + 看证据图决策
  • 实时司机分布热力图(OpenStreetMap)
  • 月度财务结算(按城市 / 司机)
  • 多城市,时区独立结算
05 — Tech Stack

给 1 人小团队设计的

不养 K8s 集群、不搞微服务。Supabase 一站式 BaaS + Flutter 跨平台 + 数据库层强制业务逻辑。

技术选型理由
MobileFlutter 3.41 / Dart 3.111 codebase 出 Android + iOS
AuthSupabase Auth (Phone OTP via Telnyx)司机不用记密码
DatabaseSupabase Postgres 15 (RLS + triggers + cron)业务规则全在 DB 层强制
StorageSupabase Storage (private buckets)No-show 证据图,私有 + RLS
FunctionsSupabase Edge Functions (Deno TS)maps-proxy / location-batch / OTA import
MapsGoogle Routes + Geocoding APIs距离 + ETA + 地址解析
HeatmapOpenStreetMap + flutter_map免费,省 Google Maps 后台计费
i18neasy_localization · 中 / EN / ES司机来自不同语言背景
SMSTelnyx比 Twilio 便宜 30%
State mgmtStatefulWidget + Stream项目体量足够,不引 BLoC 多余抽象
06 — Reverse Dutch Auction

让市场决定谁接哪单

不是固定派单。订单进入 pending 池后价格随时间自动上涨,司机自己决定何时出价。

Driver payout 涨价曲线

每 10 分钟上涨 5%,封顶 OTA 总价 70%

$40 $45 $50 $55 $60 T+0 10m 20m 30m 40m 50m 60m 70m CAP $56.3

规则

  1. Admin 设保底价
  2. 每 10 分钟自动 +5%
  3. 封顶 OTA 总价 70%
  4. 出价 = 接单,不能反悔
  5. 热门单:低价时段就有人抢
  6. 冷门单:等到价格高,才有人愿意接
07 — Trust & Safety

三层问责机制

司机不会乱来 / 乘客有据可查 / 公司能审计。

强制 GPS

App 启动必须授权位置,否则进不了主页。后台每 30s 上报。30 天历史保留供审计。

司机评分

0–100 分。完成 +1 / 5★ +5 / 投诉按 severity -5/-10/-20。低于 50 自动停派。

No-show 审核

司机抵达后 ≥30 min 且距 pickup_time ≥60 min 才能提交。3+ 张图必传。Admin 决定 100% / 0%。

08 — No-Show Module Deep-dive

从司机提交到 admin 决定

5 步流程,2 道时间门槛,1 个证据要求。防骗钱机制做在前面。

1
司机抵达 pickup
GPS 自动记录 arrived_at
2
等 ≥30 min
且距 pickup_time ≥60 min
3
上传 3+ 证据
地图截图 / 已发消息 / 离开消息
4
提交 → no_show
GPS 坐标自动附上
5
Admin 审核
✓ 100% / ✗ 0% + 投诉

为什么要两道时间门槛? 没有的话,司机可以提前 2 小时抵达 → 等 30 分钟 → 提交 no-show → 拿 100% 钱。 两道一起守,"提早抵达骗等待时间"这条路堵死。最终 admin 看证据图决定,**人工 + 系统**双层防线。

09 — Admin Dashboard

8 个模块统一界面

原本 5 个 OTA 后台 + Excel + WhatsApp,现在一个 App 全搞定。

调度中心

待派订单池 + nearest_drivers 排序

历史记录

所有订单查询,按城市 / 来源 / 状态过滤

手动新建

非 OTA 订单录入,自动 geocode

司机状态

在线名单 + last seen + 联系 deep link

司机评价

运营录入评分 + 投诉

No-Show 审核

待审证据包 → 看图决策

司机分布地图

实时 GPS + 30 天 trail(OSM)

财务结算

月度按城市 / 司机出报表

10 — Roadmap

已完成 / 正在做 / 待启动

当前在 Phase 2:iOS 工具链已就绪,等公司 Apple Developer 账号下来。

Phase 1 · MVP

✓ 已完成
  • 反向荷兰拍卖
  • 司机评分 + 投诉系统
  • 强制 GPS + 后台追踪
  • Dispatch 派单匹配
  • 强制联系乘客 + 24h 提醒
  • No-show 模块 + admin 审核
  • 实时司机热力图
  • Geocoding + Routes API ETA
  • 三语 i18n(中/EN/ES)
  • Android debug APK 构建成功

Phase 2 · Production

⚙ 进行中
  • iOS 工具链(Xcode 16.4 已装)
  • Apple Developer 账号申请(公司)
  • iOS TestFlight 首次构建
  • FCM/APNs 推送通知
  • RLS 严格化(003 migration)
  • Sentry 崩溃统计
  • Release APK 签名 + 分发

Phase 3 · Scale

⏳ 待启动
  • 多公司 multi-tenant
  • 乘客端 App(如必要)
  • Web 端 admin 面板
  • BI 看板(订单 / 投诉 / 趋势)
  • No-show 进阶反作弊
  • Google Play 上架
  • App Store 上架
WHERE WE ARE NOW

Ready for real-world testing

Phase 1 全部 done,Phase 2 卡在公司 Apple Developer 账号注册。一旦下来 → iOS 7 天内可上 TestFlight。

0
遗留问题,code base 全新
10
DB migrations 全部 apply
1
阻塞项
公司高管开 Apple Developer Org 账号