编辑 | blame | 历史 | 原始文档

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 数据迁移与清理 待开始