饭否外卖
顾客下单、商家出餐、骑手配送,三端联动,走同一条订单流水线。
- 类型
- 三端外卖系统
- 技术
- React 19、TypeScript、Tailwind、Vite、Supabase(PostgreSQL + 实时推送)
它能干什么
- 三端各自独立:顾客、商家、骑手三套账号池、三套路由前缀,端内不出现跨端跳转;登录时角色对不上就直接登出
- 9 种订单状态:待支付 → 待接单 → 备餐中 → 待取餐 → 配送中 → 已送达,另有已取消 / 商家拒单 / 到店自取
- 超时规则:支付 15 分钟没完成自动取消;商家 8 分钟没接单会打上「已超时」,顾客可以催单或取消
- 实时同步:顾客下单,商家端不刷新就能看到新订单;聊天消息和未读数跨端跟着变
- 钱要原子:扣款、写流水、推进订单状态在一个数据库事务里一次完成;每次支付带操作编号,双击或网络重试都不会重复扣
- 商家经营:菜品上下架、售罄、改价、库存,规格与加料,自定义分类,满减与店铺折扣,财务账单
- 服务与社交:顾客↔商家、骑手↔商家的即时聊天,通知中心,五星图文评价与商家回复,退款申请与配送异常上报
- 数据层:25 张表、57 条行级权限策略,余额不允许前端直接改,只能通过数据库函数修改并在函数内再校验身份
我写它的时候
这是我课程作业里最认真的一份。一开始只是想做个点单页,做着做着把商家端和骑手端也做出来了——三端连起来之后才看得出订单状态机到底有没有写对。
真机点一遍抓到过两个类型检查和构建都发现不了的毛病:页面永久卡在加载、订单明细被重复写入。从那以后我就不太相信「编译通过」这四个字了,所以现在跑的是真浏览器加真数据库的巡检。