烘焙预约小程序 - 业务逻辑
角色权限、预约状态流转、业务规则与校验。
1. 用户角色
| 角色 | 标识 | 说明 |
| 用户 | user | 小程序端,微信登录,提交预约、我的预约 |
| 门店账号 | shop_staff | 仅看本店订单与统计 |
| 管理员 | admin | 全部订单、门店、轮播图、权限 |
2. 预约状态
| 状态 | 标识 | 说明 |
| 已预约 | 0 | 用户已提交,待到店/配送 |
| 已完成 | 1 | 已核销或已完成配送 |
| 已取消 | 2 | 用户或后台取消 |
流转:已预约 → 核销/完成 → 已完成;已预约 → 取消 → 已取消。
3. 核心业务规则
- 预约提交:必填姓名、电话、门店、配送方式、预约日期与时间;配送时必填收货地址;核销券码可按需求配置是否必传。
- 配送提示:前端按当前所选门店展示该门店配置的配送提示文案(如满额、范围),不同门店可不同。
- 门店端数据隔离:门店角色登录后,订单与统计接口仅返回该门店 shopId 数据,后端强制过滤。
- 点单跳转:点单入口不实现站内点餐,仅跳转客户提供的其他小程序(AppID + 路径),后台可配置。
4. 数据校验(预约单)
contactName 必填 1–50 字;phone 必填且手机号格式;shopId 必填且门店存在并启用;reserveDate 必填且 ≥ 当日;reserveTime 必填;type=1 配送时 address 必填。
5. 订单状态流转
| 状态 | 标识 | 说明 | 可流转至 |
| 待付款 | 0 | 用户提交订单未支付 | 制作中(1)、已关闭(7) |
| 制作中 | 1 | 用户已支付,门店制作 | 待取餐(2)、退款中(5) |
| 待取餐 | 2 | 自提单完成制作,等待取餐 | 待评价(3)、退款中(5) |
| 待评价 | 3 | 用户已取餐/签收 | 交易完成(4) |
| 交易完成 | 4 | 订单完成 | — |
| 退款中 | 5 | 用户申请退款 | 已退款(6)、交易完成(4) |
| 已退款 | 6 | 退款成功 | — |
| 已关闭 | 7 | 订单超时未支付 | — |
烘焙预约简化为:已预约(0) → 已完成(1)/已取消(2)。
5.1 订单类型与取号规则
| 订单类型 | 标识 | 取号前缀 | 说明 |
| 自取 | 0 | A | 用户到店自取,生成 A001 取餐号 |
| 外卖 | 1 | W | 配送到用户地址,生成 W001 取餐号 |
| 堂食 | 2 | D | 用户在店内用餐,生成 D001 取餐号 |
取号规则:按 门店+日期+类型 重置,每日从 001 开始(如 A001、W001、D001)
5.2 堂食订单规则
座位号规则
| 规则 | 说明 |
| 格式 | 字母+数字(如 A5、B12)或纯数字(如 15) |
| 必填性 | 堂食时可选,不填则使用取餐号 |
| 长度限制 | 最大 20 字符 |
| 扫码携带 | 支持 URL 参数 ?seatNo=xxx(扫桌码点餐) |
座位号来源:1.用户手动输入 2.扫码点餐URL携带 3.不填写使用取餐号
堂食订单流程
用户选择堂食 → 是否填座位号?
├─ 是 → 订单携带座位号 → 后厨显示座位号 → 送餐到桌
└─ 否 → 仅使用取餐号 → 后厨显示取餐号 → 叫号取餐
后厨/出餐界面显示
- 自取:取餐号(如 A001)
- 外卖:配送地址 + 取餐号
- 堂食(有座位号):座位号 + 取餐号(如 座位 A5 / D001)
- 堂食(无座位号):取餐号(如 D001)
5.3 订单创建流程
- 生成取餐号:按门店+日期+类型生成唯一取餐号(前缀 A/W/D + 序号)
- 获取配送地址:外卖类型需选择/填写收货地址
- 获取座位号:堂食类型可填写座位号(可选)
- 计算订单总价:商品金额 + 配送费 - 优惠券抵扣
- 使用优惠券:校验有效期、门槛、适用范围后锁定优惠券
- 保存订单商品:记录商品规格、数量、价格快照
- 设置超时关闭:延迟任务,超时未支付自动关闭订单
5.4 支付流程
- 支付方式:微信小程序支付、微信公众号支付、微信APP支付
- 支付流程:
- 前端调用支付接口获取支付参数
- 调起微信支付弹窗
- 用户确认支付
- 微信异步通知支付结果
- 后端验证签名、更新订单状态为「制作中」
- 记录支付时间、支付方式
- 增加用户积分
- 设置自动确认收货任务
5.5 订单超时机制
- 未支付超时:创建订单后 N 分钟(可配置)未支付,自动关闭订单
- 关闭订单处理:释放库存、退回优惠券
- 自动确认收货:发货后 N 天(可配置)未确认,自动确认收货
6. 用户地址管理
- 预约选择「配送」时从已有地址选择或新增
- 每用户可维护多条地址、可设默认地址
- 仅能操作当前用户地址(后端强制过滤 userId)
- 地址字段:收货人、手机号、省市区、详细地址、标签(家/公司)
- 接口见 api_list 用户地址 CRUD
7. 优惠券规则
- 优惠券类型:满减券、折扣券、无门槛券
- 有效期:固定日期范围 / 领取后 N 天有效
- 使用条件:满足金额门槛、适用商品分类、适用门店
- 领取限制:每人限领 N 张、每日限领
- 核销:订单支付时自动抵扣,退款时优惠券回退
8. 会员/积分规则
- 会员等级:普通/银卡/金卡/黑金,按消费金额自动升级
- 积分获取:下单获得积分(金额 * 倍率)
- 积分消耗:抵扣订单金额、兑换优惠券
- 等级权益:专属折扣、积分倍率加成
9. 客服会话
- 用户端与后台客服沟通;会话按用户维度
- 消息支持文本、图片及未读/已读标记
- 管理端可查看会话列表、回复消息
10. 退款流程
| 状态 | 标识 | 说明 |
| 申请中 | 0 | 用户提交退款申请 |
| 已退款 | 1 | 退款成功,金额已退回 |
| 已拒绝 | 2 | 管理员拒绝退款 |
退款流程详情
- 申请条件:仅订单状态为「制作中(1)」或「待取餐(2)」可申请退款
- 申请退款:
- 用户填写退款原因
- 系统计算退款金额 = 订单金额 - 优惠金额
- 更新订单状态为「退款中(5)」
- 记录退款申请信息(单号、金额、原因、时间)
- 退款处理:
- 同意:调用微信退款接口 → 更新订单状态为「已退款(6)」→ 退款状态为「已退款(1)」
- 拒绝:更新订单状态为「交易完成(4)」→ 退款状态为「已拒绝(2)」→ 记录拒绝原因
- 退款到账:原路退回至用户支付账户
10.1 购物车逻辑
- 添加商品:选择规格后加入购物车,同规格商品数量叠加
- 数量修改:支持增减数量、删除商品
- 库存校验:添加时校验库存,不足时提示
- 价格计算:实时计算总价,显示优惠信息
- 购物车存储:本地存储 + 用户维度云端同步
- 门店切换:切换门店时清空购物车(商品可能不同)
10.2 商品规格逻辑
- 规格类型:单选规格(如杯型:大/中/小)、多选规格(如加料:珍珠/椰果)
- 价格计算:基础价 + 规格加价
- 库存管理:按 SKU(规格组合)管理库存
- 规格展示:弹窗选择规格后加入购物车
11. 门店数据权限
- 管理员:可查看所有门店订单、统计、配置
- 门店账号:仅查看本店数据,接口返回数据强制过滤 shopId
- 门店账号通过 shop_info.adminUserId 绑定,登录后获取关联门店
- 菜单权限:门店角色隐藏门店管理、轮播图等菜单
12. 意见反馈/投诉
- 用户可提交意见反馈、投诉,支持图片上传
- 管理端查看列表、标记已处理
文档版本:v2.1 · 2026-02-25(新增堂食类型、取号规则和座位号)
← 返回文档总览