MDM 产品数据一体化改造 - 前端文档
概述
本次改造将 MDM 物料作为统一产品主数据,CRM 和 ERP 模块的产品数据统一使用 MDM 物料(itemType=2 产品类型)。
一、改造清单
后端改造(已完成)
| 文件 |
改动说明 |
yudao-module-mdm-api/ |
MDM 物料 API 模块 |
MdmItemApi.java |
物料 API 接口 |
MdmItemRespDTO.java |
物料响应 DTO |
MdmItemCreateReqDTO.java |
物料创建请求 DTO |
MdmItemUpdateReqDTO.java |
物料更新请求 DTO |
MdmItemTypeEnum.java |
物料类型枚举 |
ErpProductServiceImpl.java |
使用 MDM 物料 API |
CrmProductServiceImpl.java |
使用 MDM 物料 API |
二、涉及页面
ERP 产品管理
| 页面 |
路径 |
改动说明 |
| 产品列表 |
/erp/product/index |
无需改动,接口兼容 |
| 产品表单 |
/erp/product/form |
无需改动,接口兼容 |
CRM 产品管理
| 页面 |
路径 |
改动说明 |
| 产品列表 |
/crm/product/index |
无需改动,接口兼容 |
| 产品表单 |
/crm/product/form |
无需改动,接口兼容 |
MDM 物料管理
| 页面 |
路径 |
说明 |
| 物料列表 |
/mdm/item/index |
统一产品主数据入口 |
| 物料表单 |
/mdm/item/form |
创建/编辑物料 |
三、数据模型映射
MDM 物料类型
| 类型值 |
说明 |
用途 |
| 1 |
物料 |
原材料、辅料等 |
| 2 |
产品 |
销售产品(CRM、ERP 使用) |
| 3 |
半成品 |
生产中间件 |
字段映射(MDM -> ERP)
| MDM 字段 |
ERP 字段 |
说明 |
| id |
id |
编号 |
| name |
name |
名称 |
| barCode |
barCode |
条码 |
| specification |
standard |
规格 |
| categoryId |
categoryId |
分类编号 |
| unitMeasureId |
unitId |
单位编号 |
| status |
status |
状态 |
| purchasePrice |
purchasePrice |
采购价格 |
| salesPrice |
salePrice |
销售价格 |
| costPrice |
minPrice |
成本价 -> 最低价 |
| expiryDay |
expiryDay |
保质期 |
| weight |
weight |
重量 |
| remark |
remark |
备注 |
字段映射(MDM -> CRM)
| MDM 字段 |
CRM 字段 |
说明 |
| id |
id |
编号 |
| code |
no |
编码 |
| name |
name |
名称 |
| unitMeasureId |
unit |
单位 |
| salesPrice |
price |
价格 |
| status |
status |
状态 |
| categoryId |
categoryId |
分类编号 |
| remark |
description |
描述 |
四、API 接口
MDM 物料 API
| 方法 |
路径 |
说明 |
| POST |
/rpc-api/mdm/item/create |
创建物料 |
| PUT |
/rpc-api/mdm/item/update |
更新物料 |
| GET |
/rpc-api/mdm/item/get |
获取物料 |
| POST |
/rpc-api/mdm/item/list |
获取物料列表 |
| POST |
/rpc-api/mdm/item/page |
获取物料分页 |
| GET |
/rpc-api/mdm/item/validate-exists |
校验物料存在 |
| GET |
/rpc-api/mdm/item/get-by-code |
根据编码获取物料 |
| GET |
/rpc-api/mdm/item/get-by-bar-code |
根据条码获取物料 |
ERP 产品 API(保持不变)
| 方法 |
路径 |
说明 |
| POST |
/erp/product/create |
创建产品 |
| PUT |
/erp/product/update |
更新产品 |
| DELETE |
/erp/product/delete |
删除产品 |
| GET |
/erp/product/get |
获取产品 |
| GET |
/erp/product/page |
获取产品分页 |
| GET |
/erp/product/simple-list |
获取产品精简列表 |
CRM 产品 API(保持不变)
| 方法 |
路径 |
说明 |
| POST |
/crm/product/create |
创建产品 |
| PUT |
/crm/product/update |
更新产品 |
| DELETE |
/crm/product/delete |
删除产品 |
| GET |
/crm/product/get |
获取产品 |
| GET |
/crm/product/page |
获取产品分页 |
| GET |
/crm/product/simple-list |
获取产品精简列表 |
五、前端修改点
5.1 产品选择组件(可选优化)
如果需要统一产品选择体验,可以创建 MDM 物料选择组件:
<!-- MdmItemSelect.vue -->
<template>
<el-select v-model="selectedValue" placeholder="请选择产品" filterable>
<el-option
v-for="item in itemList"
:key="item.id"
:label="item.name"
:value="item.id"
>
<span>{{ item.name }}</span>
<span style="color: #999; margin-left: 8px;">{{ item.barCode }}</span>
</el-option>
</el-select>
</template>
<script>
import { getItemList } from '@/api/mdm/item'
export default {
props: {
value: [Number, String],
itemType: {
type: Number,
default: 2 // 默认产品类型
}
},
data() {
return {
itemList: []
}
},
computed: {
selectedValue: {
get() {
return this.value
},
set(val) {
this.$emit('input', val)
}
}
},
created() {
this.loadItemList()
},
methods: {
async loadItemList() {
const { data } = await getItemList({ itemType: this.itemType, status: 0 })
this.itemList = data
}
}
}
</script>
5.2 使用方式
<!-- ERP 销售订单中选择产品 -->
<MdmItemSelect v-model="form.productId" :item-type="2" />
<!-- 采购订单中选择物料 -->
<MdmItemSelect v-model="form.itemId" :item-type="1" />
六、注意事项
6.1 数据迁移
如果已有 ERP 或 CRM 产品数据,需要迁移到 MDM 物料表:
-- 迁移 ERP 产品到 MDM 物料(示例)
INSERT INTO mdm_item (id, code, name, bar_code, specification, category_id, unit_measure_id,
item_type, status, purchase_price, sales_price, cost_price, expiry_day, weight, remark,
creator, create_time, updater, update_time, deleted, tenant_id)
SELECT
id,
bar_code AS code,
name,
bar_code,
standard AS specification,
category_id,
unit_id AS unit_measure_id,
2 AS item_type, -- 产品类型
status,
purchase_price,
sale_price AS sales_price,
min_price AS cost_price,
expiry_day,
weight,
remark,
creator,
create_time,
updater,
update_time,
deleted,
tenant_id
FROM erp_product
WHERE deleted = 0;
-- 迁移 CRM 产品到 MDM 物料(需要处理 ID 冲突)
-- 注意:如果 ID 与 ERP 产品冲突,需要重新分配 ID 并更新关联数据
6.2 接口兼容性
- ERP 和 CRM 的产品接口保持不变,前端无需修改
- 数据实际从 MDM 获取,对前端透明
- 创建/更新操作通过 MDM API 执行
6.3 权限管理
- CRM 产品保留本地记录用于权限管理
- 产品 ID 与 MDM 物料 ID 保持一致
- 权限验证仍然通过 CRM 权限系统
6.4 废弃说明
erp_product 表:保留但不再作为主数据源
crm_product 表:保留用于权限管理,数据同步自 MDM
- 建议后续版本在前端菜单中统一使用 MDM 物料管理
七、后续计划
| Phase |
内容 |
状态 |
| Phase 1 |
客户数据统一 - ERP 使用 CRM 客户 |
已完成 |
| Phase 2 |
产品数据统一 - CRM/ERP 使用 MDM 物料 |
已完成 |
| Phase 3 |
合同生成销售订单 |
待开始 |
| Phase 4 |
销售全流程追溯 |
待开始 |
| Phase 5 |
营销数据报表 |
待开始 |
| Phase 6 |
数据迁移与清理 |
待开始 |