基础数据 → 物料管理在保存物料并勾选「同步到 MES」时提示「物料分类不存在」。
根因是物料分类存在两套表且未同步:
MesMdItemTypeServiceImpl,只写 mes_md_item_type;/mes/md/item-type/simple-list,读的也是 mes_md_item_type;MdmItemServiceImpl#syncItemToMes)按分类 ID 查 mdm_item_category,查不到即抛 MDM_ITEM_CATEGORY_NOT_EXISTS。因此老分类可用(历史数据两表都有),新分类必报错。
物料分类统一以 mdm_item_category 为唯一数据源:
/mes/md/item-type/* 保留,前端路径与出入参不变,但底层读写全部改为 mdm_item_category;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/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(物料);迁移后新分类由 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 解析 |
mes_md_item_type 与 mdm_item_category 记录数、ID 一一对应。mdm_item_category 出现记录、mes_md_item_type 不新增。