熟食消费模式需求说明
1. 基本信息
| 项目 | 内容 |
|---|---|
| 项目 | SellWeight 熟食消费模式 |
| 需求状态 | 已确认,可进入开发评审 |
| 确认日期 | 2026-08-02 |
| 适用端 | 熟食称重结算机 |
| 计价单位 | 固定 500g |
| 上传策略 | 沿用麻辣烫:每个订单只上传一个 custom_dish |
2. 背景与问题
顾客一次拿取多种熟食,收银员需要逐种称重,最后统一结算。当前系统的称重页以单一称重商品和一组汤底、商品、金额项为主,不能稳定表达“多种熟食分别称重、统一支付”的业务过程。
本次需求还必须解决一个数据边界问题:本地订单需要保留每种熟食的名称、单价、重量和金额,但现有 categories 同时被离线补传逻辑当作上传菜品数组读取。如果把熟食明细直接放进 categories,离线补传会把本地明细错误上传为多个菜品。因此,熟食本地明细必须单独保存,categories 只保存最终上传所需的一个 custom_dish。
3. 已确认需求
3.1 商品维护
- 熟食商品在本地维护,策略与现有麻辣烫商品一致。
- 商品至少包含:商品名称、单价、启用状态、排序信息。
- 熟食商品的单价含义固定为“元 / 500g”。
- 商品名称、单价等商品属性只能在“熟食设置”中修改,购物车内不可修改。
- 设置中增加与汤底设置同级的“熟食设置”页面。
3.2 称重与加入购物车
- 顾客可一次选择多种熟食商品。
- 进入页面后购物车为空,当前净重显示为 0g;如果检测到非零重量,必须先由收银员点击“归零”,不能将进入页面前的重量直接计入订单。
- 当前一件商品支持两种顺序:先在右侧选择商品再放置称重,或先放置商品并等待稳定后再在右侧选择商品。
- 商品选择和称重都完成后不自动加入购物车,必须由收银员主动点击“加入购物车”。
- 加入动作必须使用当前稳定重量;重量为 0 或重量不稳定时禁止加入。
- 同一种商品多次加入购物车时合并为一条明细,重量和金额累加。
- 加入后可以继续选择下一种熟食并重复称重。
3.3 购物车
- 购物车支持增加、删除和编辑。
- 编辑项只允许修改重量,不允许修改商品名称、单价、计价单位等商品信息。
- 编辑重量后实时重算该行金额和订单总额。
- 购物车明细保留商品属性快照,后续设置修改不改变已加入订单的历史价格。
- 购物车内同一种商品始终保持合并状态。
3.4 自定义金额
- 熟食模式保留自定义金额输入能力。
- 自定义金额是独立金额项,不绑定熟食商品重量。
- 熟食商品按“元 / 500g”计算;自定义金额直接按输入金额计入总额。
3.5 结算与上传
- 所有熟食明细和自定义金额统一结算。
- 点击“结算”先弹出对账单,确认后才进入支付流程。
- 在线支付和离线订单的服务端上传载荷均只包含一个
custom_dish。 custom_dish的金额为订单最终应付总额。- 本地订单必须额外保存熟食明细,至少能恢复商品名称、商品标识、单价、重量、计价单位、行金额和合并后的行信息。
- 离线补传读取上传摘要,不读取熟食本地明细作为服务端菜品数组。
4. 核心业务规则
4.1 金额公式
熟食行金额 = 重量克数 ÷ 500 × 单价(元 / 500g)
订单总额 = 熟食行金额合计 + 自定义金额 + 其他已启用金额项
金额计算统一使用高精度数值,最终展示和支付金额保留两位小数;重量使用克保存,避免在页面层重复换算“斤”。
4.2 状态约束
| 场景 | 规则 |
|---|---|
| 进入页面 | 购物车为空、当前重量为 0;非零时先归零 |
| 选择商品 | 可在 0g 时先选,也可在稳定重量后再选 |
| 点击加入 | 当前商品存在、重量大于 0、秤重稳定 |
| 开始下一件 | 上一件加入后先归零,再开始下一件称重 |
| 编辑购物车 | 只能编辑重量,重量必须大于 0 |
| 支付 | 购物车或自定义金额至少有一项有效金额 |
| 设置保存 | 名称非空、单价大于 0、计价单位固定 500g |
5. 数据边界
5.1 上传摘要
categories 继续承担现有离线补传所需的上传摘要职责,只保存一个与支付接口字段兼容的条目:
{
"uuid": "custom_dish",
"number": "1",
"money": "订单总额"
}
5.2 本地熟食明细
熟食明细固定使用订单表独立字段 cooked_food_details 保存版本化 JSON,不进入 categories。后续若需要按商品统计,再评估迁移为订单明细表。
{
"version": 1,
"lines": [
{
"productId": "local-id",
"name": "卤鸡腿",
"unitPrice": "18.00",
"basisGrams": 500,
"weightGrams": 250,
"amount": "9.00"
}
],
"customAmount": "5.00",
"totalAmount": "14.00"
}
6. 非目标
- 不新增服务端熟食商品接口或每种熟食的服务端 UUID。
- 不改变现有麻辣烫的上传策略和业务流程。
- 不在本期支持 g、斤之间切换,计价基准固定为 500g。
- 不允许购物车修改商品名称、单价或计价单位。
- 不把熟食明细拼接到现有上传
categories字段。
7. 需求验收摘要
需求完成的必要条件是:收银员能按“归零—选品—稳定称重—主动加入—继续选品—统一结算”完成多种熟食消费;同品合并、购物车编辑、自定义金额、500g 计价、在线上传、离线补传和本地明细恢复均符合上述规则。