放盘稳定性校验开关方案
目标
在设置页增加“放盘稳定性校验”开关,控制餐盘扫码后进入取餐流程前是否等待重量稳定。开关默认开启,保持原有行为。
当前流程
餐盘扫码成功后,WeightMainActivity.startPickWhenStable() 等待最近 10 条重量样本稳定,最多等待 5 秒,稳定后记录取餐起始重量并进入取餐页面。
项目已有“离盘稳定性校验”开关,控制餐盘拿走后结算前是否等待 5 条稳定样本。本次新增开关与其独立,避免混淆放盘和离盘两个阶段。
实现方案
设置项
- 文案:
放盘稳定性校验 - 存储:MMKV
- Key:
setting_plate_put_stability_check - 默认值:
true - 配置位置:基础设置页
运行逻辑
开启时:
- 扫码成功后等待 10 条稳定重量样本。
- 最多等待 5 秒。
- 使用稳定窗口重量作为本次取餐起始重量。
关闭时:
- 扫码成功后不进入等待稳定轮询。
- 使用扫码时的当前重量和序列号生成单样本起始快照。
- 立即进入取餐流程并获取取餐人信息。
同一笔取餐在扫码开始时固定开关状态,避免等待过程中修改设置影响已开始的会话。
数据追溯
重量事件的 extra 增加 start_stability_check_enabled,并保留已有的 end_stability_check_enabled。正常结算时,quality 标记为 NORMAL、START_STABLE_CHECK_DISABLED、END_STABLE_CHECK_DISABLED 或 BOTH_STABLE_CHECK_DISABLED。
影响文件
app/src/main/java/com/zhct/traybinding/main/WeightMainActivity.javaapp/src/main/java/com/zhct/traybinding/setting/SetBasicFragment.javaapp/src/main/java/com/zhct/traybinding/utils/Constants.javaapp/src/main/java/com/zhct/traybinding/utils/WeightEventUploadUtils.javaapp/src/main/res/layout/set_basic_fragment_layout.xmlapp/src/main/res/values/strings.xmlREADME.md
验收标准
- 首次使用或未保存配置时,放盘稳定性校验为开启。
- 开启时仍等待稳定窗口后进入取餐页面。
- 关闭时扫码后立即进入取餐页面,不等待 10 条样本。
- 关闭时起始重量快照仍然存在,不出现空指针或稳定窗口为空。
- 重量事件能区分放盘稳定校验是否开启。
- 原有离盘稳定性开关行为不受影响。
风险
关闭放盘稳定性校验后,起始重量可能处于餐盘放置过程中的波动阶段,可能造成取餐重量偏大或偏小。因此默认开启,仅建议在现场确认设备响应速度和摆盘动作后关闭。
变更记录
- 2026-08-06:新增放盘稳定性校验设置开关及对应取餐起始重量逻辑,默认开启。
离盘扫码托底
设置项
- 总开关:
离盘扫码托底,默认关闭 - 文案:
离盘扫码托底速度 - 选项:快 / 中 / 慢
- 实际等待:快 3 秒、中 4 秒、慢 5 秒
- 默认值:快(3 秒)
- 存储:MMKV,配置在下一次取餐会话开始时读取
总开关关闭时不启动托底定时任务,完全保持原有扫码离盘流程;只有打开总开关后,快/中/慢时长配置才生效。
运行条件
取餐会话进入 PICKING 后启动一个会话级定时检查。每次收到有效餐盘码时刷新最后扫码时间,并记录当时重量。只有同时满足以下条件才触发托底:
- 连续无码达到配置时长。
- 重量数据仍在持续上报,最近一次重量上报不超过 1 秒。
- 无码期间重量保持在 1g 误差范围内。
- 当前会话仍处于取餐中,且未收到正常
has left。
正常 has left 优先,收到后取消托底任务。托底触发后复用现有离盘处理、页面切换和结算流程,并通过会话状态保证只处理一次。
变更记录补充
- 2026-08-06:增加离盘扫码托底总开关(默认关闭)、速度配置及扫码停止、重量稳定、重量链路存活的异常托底逻辑,默认时长为快(3 秒)。