熟食消费模式需求说明

1. 基本信息

项目内容
项目SellWeight 熟食消费模式
需求状态已确认,可进入开发评审
确认日期2026-08-02
适用端熟食称重结算机
计价单位固定 500g
上传策略沿用麻辣烫:每个订单只上传一个 custom_dish

2. 背景与问题

顾客一次拿取多种熟食,收银员需要逐种称重,最后统一结算。当前系统的称重页以单一称重商品和一组汤底、商品、金额项为主,不能稳定表达“多种熟食分别称重、统一支付”的业务过程。

本次需求还必须解决一个数据边界问题:本地订单需要保留每种熟食的名称、单价、重量和金额,但现有 categories 同时被离线补传逻辑当作上传菜品数组读取。如果把熟食明细直接放进 categories,离线补传会把本地明细错误上传为多个菜品。因此,熟食本地明细必须单独保存,categories 只保存最终上传所需的一个 custom_dish

3. 已确认需求

3.1 商品维护

3.2 称重与加入购物车

3.3 购物车

3.4 自定义金额

3.5 结算与上传

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. 非目标

7. 需求验收摘要

需求完成的必要条件是:收银员能按“归零—选品—稳定称重—主动加入—继续选品—统一结算”完成多种熟食消费;同品合并、购物车编辑、自定义金额、500g 计价、在线上传、离线补传和本地明细恢复均符合上述规则。