菜品目录与菜谱分类映射问题分析及修复方案
本记录覆盖 AIDishRecognition 的菜品目录、菜谱管理页与菜品识别页替换菜谱抽屉的六级分类映射。
问题现象
菜单展示入口把接口第 2、3、4、5 组按错误的分类顺序绑定,导致荤菜与素菜、水果与蛋奶坚果互换。“全部”页仍能汇总全部菜品,但单分类页不对应所属类型。
统一分类契约
| 编号 | 分类 |
|---|---|
| 1 | 主食 |
| 2 | 荤菜 |
| 3 | 素菜 |
| 4 | 水果 |
| 5 | 蛋奶坚果 |
| 6 | 汤饮 |
菜品目录的 mapCategoryToApiValue() 已在两个使用位置采用该规则;菜单接口 /p/api/getMeal 将键 "1" 至 "6" 反序列化到对应的 dishItemList1 至 dishItemList6。
实施方案
| 响应分组 | 目标分类 | 目标列表 |
|---|---|---|
dishItemList1 | 主食 | menuStapleList |
dishItemList2 | 荤菜 | menuMeatList |
dishItemList3 | 素菜 | menuVegetableList |
dishItemList4 | 水果 | menuFruitList |
dishItemList5 | 蛋奶坚果 | menuEggMilkNutList |
dishItemList6 | 汤饮 | menuSoupDrinkList |
- 在
DishMenuManagementActivity.cacheDishMenu()按上表绑定并统一“全部”页顺序。 - 在
DishRecognitionActivity.cacheReplaceDishMenu()应用同一规则。
影响边界
DishMenuStore 与 DishManagementSyncPolicy 仅汇总菜品编码,不依赖具体分类标签;菜品目录的分类请求映射、接口模型及服务端协议均不修改。
验证与回滚
./gradlew :app:testDebugUnitTest :app:assembleDebug 已执行并通过,git diff --check 已通过。真机仍需在两个入口逐一切换六个分类,检查分类、全部汇总、搜索和刷新结果。
若服务端确认
/p/api/getMeal 的编号契约不同,应回滚当前两个展示入口的映射,并以服务端正式契约为唯一来源,同步调整菜品目录请求映射。结论
两个菜单展示入口已统一为菜品目录使用的六级分类契约,修复荤菜/素菜及水果/蛋奶坚果的分类互换问题。自动化验证已通过,真机分类切换回归待执行。