VWCG-1327 菜单消费分类模式上线通知

一 通知正文

CusumptionMachine 消费机客户端本次计划上线“菜单消费分类模式”功能。基础设置新增“菜单消费模式”,管理员可选择“固定分类”或“自定义分类”,未配置、升级后缺少配置或配置值异常时均默认使用固定分类,不改变现有设备的默认菜单行为。

自定义分类模式继续复用现有 POST /p/api/getMeal 接口,通过 group_mode=custom_category_v1 获取服务端配置的分类及菜品。分类按接口返回顺序动态展示,支持横向滚动;分类名称超过 6 个 Unicode 字符时显示前 6 个字符并追加 ...,完整分类名称和分类 ID 仍用于数据匹配,不影响菜品筛选。

本次同时补齐菜单分类与“营养展示”配置的兼容:两项设置独立生效,从基础设置返回菜单页后立即应用;关闭营养展示时会清除已选但不可见的营养筛选,并恢复当前分类的完整菜品列表。基础设置中的“人脸识别阈值”改为只显示数字,不再附加“分”单位。

当前代码、73 项单元测试和 Debug APK 构建已完成,最终 Debug APK 已安装到 rk3568_r 设备并完成启动冒烟。固定分类、自定义分类与营养开关的四种组合已验证。上线时间、正式包版本、签名及发布渠道仍待发布负责人确认,因此本通知状态为“待上线”,不代表生产环境已经发布。

二 上线信息

项目 内容
云效任务 VWCG-1327
项目 CusumptionMachine
影响端 Android 消费机客户端
当前代码版本 2.11.1versionCode=36
正式上线版本 待确认;当前代码未调整版本号
上线时间 待确认
发布渠道 待确认
数据库变更
Android 权限变更
后端新接口 无,复用 POST /p/api/getMeal
默认行为 固定分类,兼容原有设备
当前状态 待上线

三 本次改动

3.1 菜单消费模式

3.2 固定分类

3.3 自定义分类

3.4 营养展示兼容

3.5 人脸识别阈值显示

四 接口与兼容说明

模式 请求方式 响应处理
固定分类 POST /p/api/getMeal,不提交 group_mode 使用原有 GetDishMenuResponse
自定义分类 POST /p/api/getMeal,提交 group_mode=custom_category_v1 使用独立 GetCustomDishMenuResponse

自定义分类响应必须返回 schema_version=custom_category_v1。当协议版本缺失或不匹配时,客户端仅对本次页面请求临时降级为固定分类,不修改管理员已经保存的自定义分类设置。

分类为空但菜品非空时,客户端临时生成“全部”分类;菜品无法匹配普通分类时仍保留在“全部”中并记录日志。网络失败、业务异常和临时降级不会主动清空已有购物车。

五 验证结果

5.1 自动化验证

执行:

JAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home bash ./gradlew :app:testDebugUnitTest :app:assembleDebug --rerun-tasks

5.2 当前设备验证

验证设备:rk3568_r

场景 结果
固定分类和营养关闭 七个固定分类正常显示,营养区域隐藏
固定分类和营养开启 固定分类与营养区域同时正常显示
自定义分类和营养关闭 动态分类按当前餐段接口响应显示,营养区域隐藏
自定义分类和营养开启 动态分类和营养区域同时正常显示
关闭营养展示 原营养筛选被清除,菜品列表恢复,购物车保持
同时修改两项设置 只观察到一次 custom_category_v1 菜单请求
人脸识别阈值 基础设置实际显示“80”,未附加“分”
最终 APK 冒烟 覆盖安装成功,菜单页面正常启动,未出现崩溃

六 上线前检查

七 已知限制与待补验项

八 上线观察与问题排查

上线后重点观察菜单请求成功率、协议版本异常、分类数量、菜品数量、无法匹配分类的菜品日志以及购物车和支付流程。

如果自定义分类只显示“全部”和“其他”,或普通分类突然减少,按以下顺序排查:

  1. 先确认问题发生时对应的餐段,以及前后是否发生餐段切换。
  2. 使用同一设备编号核对请求是否携带 group_mode=custom_category_v1
  3. 查看原始响应中的 categoriesdishescustom_category_id
  4. 如果原始响应本身只有“全部/其他”,优先检查该餐段的菜谱范围和后台分类关联。
  5. 只有接口已返回普通分类但页面没有展示时,才继续排查客户端 DTO、Mapper 和动态分类渲染。

“营养展示”不负责生成、删除或重排自定义分类,不应把餐段数据变化直接判断为营养兼容或客户端渲染回归。

九 回滚方案

  1. 如果仅自定义分类协议或后台配置异常,管理员可在基础设置中切换回“固定分类”,无需清理本地数据或修改数据库。
  2. 如果客户端出现影响消费的异常,停止扩大发布范围,并通过既有发布渠道覆盖安装上一稳定版本 APK。
  3. 回滚后复核固定分类菜单、购物车、刷卡、扫码、人脸支付及离线记账。
  4. 本次无数据库迁移、无新权限,客户端回滚不需要执行数据结构回退。

十 发布群通知简版

【CusumptionMachine 菜单消费分类模式上线通知】

上线时间:待确认
正式版本:待确认(当前代码版本 2.11.1,versionCode 36)
任务编号:VWCG-1327

本次主要更新:
1. 基础设置新增“固定分类/自定义分类”,默认固定分类。
2. 自定义分类复用 /p/api/getMeal,并提交 group_mode=custom_category_v1。
3. 自定义分类按服务端顺序展示,超 6 个字符显示前 6 个字符加 ...。
4. 分类模式兼容原营养展示开关,设置返回立即生效,关闭营养时清除隐藏筛选。
5. 人脸识别阈值只显示数字,不再显示“分”。

验证情况:73 项单元测试全部通过;Debug APK 构建成功;当前设备已完成分类与营养四种组合、设置即时生效、购物车保持、人脸阈值显示和启动冒烟验证。

注意事项:上线前仍需确认正式版本号、签名、上线范围和回滚包,并补充多餐段、超长分类、真实支付、语音及客屏回归。若自定义分类只剩“全部/其他”,请优先核对当前餐段菜谱和接口原始响应。

十一 交付边界