# MDM 物料同步到 MES ## 涉及页面 - MDM 物料管理 - 新增物料弹窗 - MDM 物料管理 - 编辑物料弹窗 ## 功能说明 在 MDM 物料「新增 / 编辑」时,新增「同步到 MES」开关。勾选后,MDM 物料保存成功的同时,会自动在 MES 侧创建/更新一条对应的物料产品(`mes_md_item`),实现主数据向 MES 的同步。 - 新增(create):勾选同步 → MDM 新建 + MES 新建。 - 编辑(update):勾选同步 → MDM 更新 + MES 更新(MES 侧按物料编码 code 匹配:已存在则更新,不存在则新建,即 upsert)。 - 不勾选或 `syncMes=false`:仅操作 MDM,不影响 MES。 ## API 接口路径不变,仅在请求体新增 `syncMes` 字段。 | 方法 | 路径 | 说明 | |------|------|------| | POST | /admin-api/mdm/item/create | 创建物料(可同步 MES) | | PUT | /admin-api/mdm/item/update | 更新物料(可同步 MES) | **请求参数(仅列出新增/相关字段):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | syncMes | Boolean | 否 | 是否同步到 MES,默认 false。勾选时触发 MES 同步 | | code | String | 是 | 物料编码(MDM/MES 关联键,两边须一致) | | name | String | 是 | 物料名称 | | unitMeasureId | Long | 是 | MDM 计量单位 id(同步时按 code 映射到 MES 单位) | | categoryId | Long | 是 | MDM 物料分类 id(同步时按 code 映射到 MES 物料分类) | **响应:** 创建返回 `{ "code": 200, "data": <物料id> }`;更新返回 `{ "code": 200, "data": true }`(与原接口一致)。 > 注意:同步失败时(如 MES 侧找不到对应 code 的单位/分类、或 MES 名称重复等),接口会返回错误,且 **MDM 的创建/更新会一并回滚**(同一事务)。 ## 前端修改点 ### 1. 表单增加「同步到 MES」开关 在物料新增/编辑表单(`mes/pd/...` 或 `mdm/item` 对应表单组件)中新增一个开关: ```html ``` ### 2. data 数据 ```js data() { return { formData: { // ... 原有字段 syncMes: false, // 是否同步到 MES,默认不勾选 }, } } ``` > 编辑回显时,`syncMes` 默认置为 `false`(不同步)即可,由用户按需勾选。 ### 3. 提交方法 无需改动提交逻辑,`syncMes` 随表单一并提交即可: ```js submitForm() { this.$refs['form'].validate(valid => { if (!valid) return // formData 中已包含 syncMes,正常调用 create / update 接口 if (this.formData.id) { updateItem(this.formData).then(...) } else { createItem(this.formData).then(...) } }) } ``` ## 注意事项 - **仅 create / update 生效**:删除、状态变更不同步 MES。 - **同步失败会回滚**:勾选同步后若 MES 侧出错,MDM 的保存也会回滚,前端会收到错误提示,需根据错误信息处理(通常是 MES 侧缺对应单位/分类)。 - **MES 物料默认禁用**:同步创建的 MES 物料状态为「禁用」,需在 MES 物料产品页面另行启用。 - **前提:单位/分类编码须一致**:同步按 `code` 映射——MDM 的计量单位 `code` 必须在 MES `mes_md_unit_measure` 中存在,MDM 的物料分类 `code` 必须在 MES `mes_md_item_type` 中存在(且为叶子分类),否则同步报错回滚。请确保两边主数据编码已对齐。 - **字段映射**:MDM `isHighValue`→MES `highValue`,MDM `isBatchManaged`→MES `batchFlag`,`minStock/maxStock/specification/remark` 直传;MES `safeStockFlag` 固定为 true 以保留库存上下限。