# 物料分类统一到 mdm_item_category 方案 ## 背景 基础数据 → 物料管理在保存物料并勾选「同步到 MES」时提示「物料分类不存在」。 根因是物料分类存在两套表且未同步: - 「基础数据 → 物料分类」页面的新增/修改/删除走 MES 接口 `MesMdItemTypeServiceImpl`,只写 `mes_md_item_type`; - 物料表单的分类下拉走 `/mes/md/item-type/simple-list`,读的也是 `mes_md_item_type`; - 但 MDM 物料同步到 MES 时(`MdmItemServiceImpl#syncItemToMes`)按分类 ID 查 `mdm_item_category`,查不到即抛 `MDM_ITEM_CATEGORY_NOT_EXISTS`。 因此老分类可用(历史数据两表都有),新分类必报错。 ## 目标 物料分类统一以 `mdm_item_category` 为唯一数据源: - MES 分类接口 `/mes/md/item-type/*` 保留,前端路径与出入参不变,但底层读写全部改为 `mdm_item_category`; - MDM 与 MES 的分类下拉、物料保存、同步、导入全部基于同一张表; - `mes_md_item_type` 不再写入,仅作为历史备份保留。 ## 改动范围 ### 后端 | 模块 | 文件 | 改动 | |------|------|------| | mdm | `MdmItemCategoryApi` | 增加 create / update / delete / 全量列表 RPC 方法 | | mdm | `MdmItemCategoryApiImpl` | 实现上述方法 | | mdm | `MdmItemCategorySaveReqDTO`(新增) | RPC 写入参数 | | mdm | `MdmItemCategoryRespDTO` | 补 `remark`、`createTime` | | mdm | `MdmItemCategoryService(Impl)` | 增加全量列表方法 | | mes | `MesMdItemTypeServiceImpl` | 增删改查、子分类、导入全部改为调用 MDM 分类 API | ### 前端 **无需改动。** 页面调用的仍是对外路径: - 分类管理页:`/mes/md/item-type/list|get|create|update|delete|import` - 分类下拉:`/mes/md/item-type/simple-list` - MDM 物料页分类下拉:同样调用 `/mes/md/item-type/simple-list` 响应字段保持 `id / parentId / code / name / itemOrProduct / sort / status / remark / createTime`。 ## 数据迁移 上线前执行 `docs/sql/mdm_item_category_migration.sql`,把 `mes_md_item_type` 全量(含已逻辑删除记录)按**原 ID** 迁移到 `mdm_item_category`,保证: - `mes_md_item.item_type_id`、`mdm_item.category_id` 等历史外键继续有效; - `item_type` 由 `item_or_product` 推导:`PRODUCT → 2(产品)`,其余 `→ 1(物料)`; - 脚本可重复执行(按主键 upsert)。 迁移后新分类由 `mdm_item_category` 自增 ID 生成,两套 ID 体系自然收敛为一套。 ## 业务规则 | 场景 | 规则 | |------|------| | 新增分类 | 写 `mdm_item_category`,编码全局唯一、同一父级下名称唯一(由 MDM 校验) | | 修改分类 | 按原 ID 更新 `mdm_item_category` | | 删除分类 | 先校验 MES 物料引用,再由 MDM 校验子分类与 MDM 物料引用 | | 物料保存 + 同步 MES | 按 `categoryId` 查 `mdm_item_category` 取 code,正常同步 | | 物料导入 | 按分类名称在 `mdm_item_category` 中解析 | | 设备联动物料 | `EQUIPMENT` 分类迁移后 MDM 侧可正常按 code 解析 | ## 验证 1. 执行迁移 SQL,核对 `mes_md_item_type` 与 `mdm_item_category` 记录数、ID 一一对应。 2. 「基础数据 → 物料分类」新增「测试」分类,确认 `mdm_item_category` 出现记录、`mes_md_item_type` 不新增。 3. 「基础数据 → 物料管理」编辑物料,选择「测试」,勾选「同步到 MES」保存,应成功。 4. 分类下拉、物料列表分类名称展示、分类编辑回显(含备注)正常。 5. 分类导入、物料按分类名称导入正常。