Technical Development Design
菜品自定义分类管理、导入与双屏消费机分类展示
当前分工已冻结:本线程只开发 store 的数据库、PC、普通导入和设备接口;Android 消费机由另一位同学负责,双方以 custom_category_v1 接口合同联调。
当前分工已冻结:本线程只开发 store 的数据库、PC、普通导入和设备接口;Android 消费机由另一位同学负责,双方以 custom_category_v1 接口合同联调。
本线程只交付 store;Android APK、动态 Tab 和真机验收已明确交给消费机同学。
store_id,原营养分类字段保持不变。/p/api/getMeal 增加版本化动态响应,旧固定 1…6 响应保留。| 证据 | 等级 | 结论 |
|---|---|---|
| 云效正文与 3 个附件 | A | 明确全局共享、系统其他、导入和双屏验收 |
| store 当前源码 | A | 当前分支没有自定义分类;普通导入固定列且存在先删后验风险 |
CusumptionMachine master@54623f4f | A | 真实菜单调用 /p/api/getMeal,6 类、7 Tab、响应键均写死 |
| 历史国信提交 | B | 可复用 CRUD/PC 结构,但旧合同按商户隔离且不接导入/双屏 |
| 权限与统计建议 | D | 需要产品和研发评审后冻结 |

分类管理:系统“其他”锁定,普通分类支持 CRUD 和启停。

双屏:只替换顶部分类来源,营养、购物车与支付结构保持。
旧 APK 不传 group_mode,继续获得旧结构;新 APK 请求 custom_category_v1。这允许后端先发、APK 后发。
store_idcode=other 标识系统分类active_name 保证有效名称全局唯一ydy_dishes.custom_category_id历史表门禁:若目标库已部署过国信版带 store_id 的分类表,必须先做名称合并和菜品重映射,不能直接删除租户字段。
| 模块 | 关键规则 | 优先级 |
|---|---|---|
| 分类管理 | 名称 20 字、全局唯一、系统其他保护、启停二次确认、全局占用删除 | P0 |
| 菜品表单 | 非必填;只选启用分类;空值归其他;当前停用值可保留 | P0 |
| 列表/查看 | 单分类筛选;停用分类可筛选;回显名称和状态;当前商户菜品隔离 | P0 |
| 普通导入 | 第 8 列;旧模板兼容;精确匹配;整批预校验;全部行级错误 | P0 |
| AI 导入 | 本期不增加列,所有新菜品默认归其他 | P1 |
现有普通导入会在遍历中先删除同名菜品,再继续校验后续行。改造必须先完成整份文件校验,之后才允许任何删除或写入。
POST /p/api/getMealgroup_mode=custom_category_v1schema_version/categories/dishes1…6 字段作为回退Map<Long,List<DishBean>>| 阶段 | 发布门禁 | 回滚入口 |
|---|---|---|
| 数据库 | 版本确认、备份、旧表预检、低峰 DDL | 已使用后保留表/字段,不物理删除 |
| store 后端 | 新旧 getMeal 合同、所有写路径默认其他 | 旧响应始终保留;恢复后重跑回填 |
| PC | 分类/菜品/导入实页和权限 | 隐藏入口,保留数据 |
| Android | 单测、构建、目标样机和支付全链路 | 安装上一版 APK |
当前可以进入技术评审和任务拆分;上述门禁未确认前,不建议直接编码。