放盘稳定判断开关实施计划

目标:在设置页增加“放盘稳定判断”开关,用于控制识别到有效餐盘后是否等待秤体稳定。开关默认开启,升级后的设备保持当前行为;关闭后跳过稳定判断,直接进入取餐页面。

实施范围:仅调整本地设置和放盘后的页面切换逻辑,不变更餐盘识别规则、取餐重量算法、人员查询接口、移盘判定及取餐记录上传规则。

一、交互与业务规则

1. 设置项

2. 开启状态

  1. 识别到有效的 6 位餐盘码。
  2. 检查最近 10 个重量值。
  3. 最大值与最小值的差不超过秤体起跳值时判定稳定。
  4. 记录当前重量作为本次取餐起始重量。
  5. 切换到取餐页面并查询餐盘绑定人员。

3. 关闭状态

  1. 识别到有效的 6 位餐盘码。
  2. 跳过最近 10 个重量值的稳定判断。
  3. 使用当前硬件帧已经更新的 mCurrentWeight 作为起始重量。
  4. 立即切换到取餐页面并查询餐盘绑定人员。

关闭稳定判断可能让尚未稳定的重量成为起始值,造成取餐重量偏差。这属于关闭保护后的预期风险,后续重量算法保持不变。

二、技术方案

Task 1:增加设置常量和文案

文件:Constants.javastrings.xml

  1. 增加 SETTING_TRAY_STABILITY_CHECK_ENABLED = "setting_tray_stability_check_enabled"
  2. 所有读取位置以 true 为默认值,无需迁移旧数据。
  3. 增加设置页文案“放盘稳定判断”。

验收:未保存过该设置的新旧设备均默认开启,业务代码不散落设置键字符串。

Task 2:在设置页增加开关

文件:activity_set.xmlSetActivity.java

  1. 在基本设置“秤体起跳重量”之后加入现有样式的 SwitchButton
  2. 初始化时读取 MMKV,默认开启。
  3. 用户切换时立即写入 MMKV。

验收:首次打开显示开启;关闭或再次开启后,退出设置页和重启应用均能保持状态;样式与现有开关一致。

Task 3:接入放盘处理流程

文件:HomeActivity.java

  1. 把“切换取餐页并查询人员”收口为统一入口,例如 enterPickingIfTrayStillPresent(String trayCode)
  2. 关闭开关时直接调用统一入口;开启时稳定后再调用。
  3. 统一入口再次校验 trayCode.equals(mCurrentCode)
  4. 等待循环继续前检查当前餐盘码,不一致时退出。
  5. 保留未收到有效重量时的初始化保护。
识别有效餐盘
    |
    +-- 开关关闭 --> 校验餐盘仍存在 --> 记录当前重量 --> 进入取餐页
    |
    +-- 开关开启 --> 等待重量稳定 --> 校验餐盘仍存在 --> 记录当前重量 --> 进入取餐页

验收:开启时保持现状;关闭时无稳定等待提示并直接进入;等待期间移盘或换盘后,旧任务不能延迟切页;每次只查询一次人员。

三、测试与验证

1. 构建验证

JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./gradlew --no-daemon :app:assembleDebug

预期结果:BUILD SUCCESSFUL

2. 设备验收场景

场景操作预期结果
默认值清除新增设置键后进入设置页开关默认开启
开启且稳定放置有效餐盘稳定后进入取餐页
开启且波动放盘并持续扰动秤体保持等待,不提前进入
开启时快速移盘稳定前移走餐盘之后不发生延迟跳转
关闭且波动关闭开关后放置餐盘跳过稳定判断,直接进入
状态持久化关闭开关并重启应用开关仍为关闭
取餐闭环两种模式分别完成取餐并移盘重量、查人、入队和上传规则不变
餐盘更换等待期间将餐盘 A 换为 BA 的任务退出,只处理 B

3. 差异检查

git diff --check
git diff -- app/src/main/java/com/cpt/zhct/weighting/activity/HomeActivity.java \
  app/src/main/java/com/cpt/zhct/weighting/activity/SetActivity.java \
  app/src/main/java/com/cpt/zhct/weighting/utils/Constants.java \
  app/src/main/res/layout/activity_set.xml \
  app/src/main/res/values/strings.xml

四、风险与控制

风险影响控制措施
关闭后以未稳定重量作为起始值取餐重量可能偏差默认开启,设置名称明确表达保护作用
移盘后等待线程继续执行页面延迟误跳转循环和统一入口均校验当前餐盘码
多处实现进入取餐逻辑重复切页或重复查人收口为一个统一入口
旧设备升级后行为变化现场使用受影响缺省读取 true,保持现有行为

五、交付范围

预计修改 5 个项目文件:Constants.javastrings.xmlactivity_set.xmlSetActivity.javaHomeActivity.java

实际实施完成后,在项目提示词镜像的 change_records 目录建立同名 Markdown/HTML 变更记录。

本方案不包含:调整稳定判断帧数或阈值、增加等待超时、修改餐盘绑定人员状态清理、修改移盘判定、修改上传或补传机制。