【基础】物料产品、分类、计量单位
物料产品模块,由 yudao-module-mes 后端模块的 md 包实现,主要有物料产品管理、物料产品分类、计量单位等功能。
- 物料产品:MES 系统最核心的基础数据,几乎所有业务模块(生产、仓库、质检)都依赖于此。
- 物料产品分类:以树形结构组织物料和产品的分类体系,区分「物料」与「产品」两种类型,为物料产品提供归类管理。
- 计量单位:定义物料产品的度量基准,支持主单位与辅助单位的换算关系配置。
TODO 
# 1. 物料产品分类
物料产品分类,由 MesMdItemTypeController 提供接口。
# 1.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_item_type` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类编号',
`code` varchar(64) NOT NULL COMMENT '分类编码',
`name` varchar(255) NOT NULL COMMENT '分类名称',
`sort` int NOT NULL DEFAULT '0' COMMENT '显示排序',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
`parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父分类编号',
`item_or_product` varchar(20) NOT NULL COMMENT '物料/产品标识',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 物料产品分类表';
① parent_id 为父分类编号,顶级分类为 0,支持无限层级树形结构。
② item_or_product 为物料/产品标识,对应 MesItemOrProductEnum 枚举,区分该分类下挂的是物料(ITEM)还是产品(PRODUCT)。系统建议将从供应商采购且本厂不生产的物资指定为「物料」,将任何可以生产的物资指定为「产品」(实际生产中,同一个对象既可能是物料也可能是半成品/产品)。
③ status 为分类状态,对应 CommonStatusEnum 枚举。
# 1.2 管理后台
对应 [MES 系统 -> 基础数据 -> 物料产品管理] 菜单左侧的分类树,对应 yudao-ui-admin-vue3 项目的 @/views/mes/md/item 目录下的 ItemTypeTree.vue 组件。系统采用树形结构组织整个工厂中使用到的物料和产品分类信息,用户可根据工厂实际情况自行指定父子级关系。在父级分类下点击「新增」按钮,新增的分类默认作为子分类,需要指定当前分类是「物料」还是「产品」。
TODO 
# 2. 计量单位
计量单位,由 MesMdUnitMeasureController 提供接口。
# 2.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_unit_measure` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '单位编号',
`code` varchar(64) NOT NULL COMMENT '单位编码',
`name` varchar(255) NOT NULL COMMENT '单位名称',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
`primary_flag` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否主单位',
`primary_id` bigint DEFAULT NULL COMMENT '主单位编号',
`change_rate` decimal(12,4) DEFAULT NULL COMMENT '与主单位换算比例',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 计量单位表';
① primary_flag 标识是否为主单位。计量单位分为主单位和非主单位两种,主单位可被其它辅助单位引用作为换算基准。
② primary_id 为主单位编号,当 primary_flag = false(非主单位)时,需要选择对应的主单位(关联 mes_md_unit_measure 表的 id 字段),并指定与主单位的换算关系。
change_rate 为与主单位的换算比例,精度 4 位小数。例如主单位为「千克」,辅助单位「克」的换算比例为 0.0010。
③ status 为单位状态,对应 CommonStatusEnum 枚举。
# 2.2 管理后台
对应 [MES 系统 -> 基础数据 -> 计量单位] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/mes/md/unitmeasure 目录。新建单位时主要填写单位的编码和名称。如果选择「非主单位」,则需要选择对应的主单位,并指定与主单位的换算关系。
TODO 
# 3. 物料产品
物料产品,由 MesMdItemController 提供接口。
# 3.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '物料编号',
`code` varchar(64) NOT NULL COMMENT '物料编码',
`name` varchar(255) NOT NULL COMMENT '物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
`unit_measure_id` bigint NOT NULL DEFAULT '0' COMMENT '计量单位编号',
`item_type_id` bigint NOT NULL DEFAULT '0' COMMENT '物料分类编号',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',
`safe_stock_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用安全库存',
`min_stock` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT '最低库存量',
`max_stock` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT '最高库存量',
`high_value` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否高值物料',
`batch_flag` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用批次管理',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 物料产品表';
① item_type_id 为物料分类编号,关联 mes_md_item_type 表的 id 字段。通过分类的 item_or_product 字段区分当前记录是物料还是产品。
③ unit_measure_id 为计量单位编号,关联 mes_md_unit_measure 表的 id 字段。
④ safe_stock_flag 为安全库存开关。启用后 min_stock(最低库存量)、max_stock(最高库存量)生效,用于库存预警;关闭时自动清零。
⑤ batch_flag 为批次管理开关。启用后需配置批次属性(见下方 ★ 批次属性配置),且至少勾选一个属性。
⑥ high_value 为高值物料标记,仅作为信息标识,无特别的业务逻辑。
⑦ status 为物料状态,对应 CommonStatusEnum 枚举。注意:启用产品类(PRODUCT)物料时,会校验是否已配置 BOM。
该表包含四个子表,在管理后台的修改弹窗中以 Tab 页形式维护:
mes_md_product_bom(产品 BOM):产品级物料清单,定义生产该产品需要消耗的物料/半成品。mes_md_item_batch_config(批次属性配置):配置该物料在批次管理中需要记录哪些属性。mes_md_product_sip(SIP 检验规程):挂载该物料的 SIP 检验标准文件。mes_md_product_sop(SOP 操作规程):配置该产品在某道工序中的标准操作规程。
# 3.2 管理后台
对应 [MES 系统 -> 基础数据 -> 物料产品管理] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/mes/md/item 目录。
# 列表
页面左侧为分类树,点击分类可过滤右侧物料列表。
TODO 
# 新增
点击【新增】按钮,弹出物料新增表单。
TODO 
# 修改
点击【编辑】按钮,弹出物料修改表单,底部包含以下 Tab 页:
TODO 
★ 产品 BOM(物料详情 Tab):产品类物料的 BOM(Bill of Materials)组成清单,由 mes_md_product_bom 表存储。启用产品类物料前需先配置 BOM。点击「新增」按钮,可在弹出的物料产品清单中选择当前产品生产时需要消耗的物料/半成品。例如:产成品「螺丝刀」的 BOM 应配置为「螺丝刀刀头」和「螺丝刀刀柄」;「螺丝刀刀头」的 BOM 应配置为「螺纹钢」;「螺丝刀刀柄」的 BOM 应配置为「PVC 颗粒」。按照此逻辑可一直追溯到原材料级别。
mes_md_product_bom 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_product_bom` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'BOM 编号',
`item_id` bigint NOT NULL COMMENT '物料产品 ID(父产品)',
`bom_item_id` bigint NOT NULL COMMENT 'BOM 物料 ID(子物料)',
`quantity` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT '物料使用比例',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '是否启用',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 产品BOM表(物料清单)';
① item_id 为父产品编号,关联 mes_md_item 表的 id 字段,表示这个 BOM 属于哪个产品。
② bom_item_id 为子物料编号,同样关联 mes_md_item 表的 id 字段,表示生产该产品所需的原材料。
③ quantity 为物料使用比例,即生产一个父产品需要多少数量的子物料。
TODO 
★ 批次属性配置(物料详情 Tab):由 mes_md_item_batch_config 表存储,配置该物料在批次管理中需要记录哪些属性(生产日期、有效期、供应商、客户等)。
mes_md_item_batch_config 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_item_batch_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`item_id` bigint NOT NULL COMMENT '物料编号',
`produce_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-生产日期',
`expire_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-有效期',
`receipt_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-入库日期',
`vendor_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-供应商',
`client_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-客户',
`sales_order_code_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-销售订单编号',
`purchase_order_code_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-采购订单编号',
`work_order_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-生产工单',
`task_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-生产任务',
`workstation_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-工作站',
`tool_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-工具',
`mold_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-模具',
`lot_number_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-生产批号',
`quality_status_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '批次属性-质量状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_item_id` (`item_id`)
) ENGINE=InnoDB COMMENT='MES 物料批次属性配置表';
① item_id 关联 mes_md_item 表的 id 字段,一对一关系。每个 *_flag 字段控制该物料在仓库批次流转时是否需要记录对应属性。
② 各 *_flag 字段为布尔开关,按需勾选。勾选后,该物料在仓库出入库生成批次记录时,对应属性将作为必填项。例如勾选 vendor_flag,则入库时必须选择供应商;勾选 expire_date_flag,则必须填写有效期。
TODO 
★ SIP 检验规程(物料详情 Tab):由 mes_md_product_sip 表存储,挂载该物料的 SIP 检验标准文件。
mes_md_product_sip 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_product_sip` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'SIP 编号',
`title` varchar(255) DEFAULT NULL COMMENT '标题',
`description` varchar(500) DEFAULT NULL COMMENT '详细描述',
`url` varchar(255) DEFAULT NULL COMMENT '图片地址',
`sort` int DEFAULT NULL COMMENT '排列顺序',
`item_id` bigint NOT NULL COMMENT '物料产品 ID',
`process_id` bigint DEFAULT NULL COMMENT '工序 ID',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 产品标准检验程序表(SIP)';
① item_id 关联 mes_md_item 表的 id 字段,表示该 SIP 属于哪个物料产品。
② process_id 关联工序表,指定该检验规程对应的生产工序。
③ url 为检验规程的图片/文件地址,支持上传检验标准截图或文档附件。
TODO 
★ SOP 操作规程(物料详情 Tab):由 mes_md_product_sop 表存储,用于配置当前产品在某道工序生产过程中使用到的 SOP(Standard Operating Procedure,标准操作规程)。用户将 SOP 信息扫描为图片上传后,工厂在实际生产此产品时,MES 系统可自动在对应工序展示 SOP 信息。
mes_md_product_sop 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_md_product_sop` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'SOP 编号',
`title` varchar(255) DEFAULT NULL COMMENT '标题',
`description` varchar(500) DEFAULT NULL COMMENT '详细描述',
`url` varchar(255) DEFAULT NULL COMMENT '图片地址',
`sort` int DEFAULT NULL COMMENT '排列顺序',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`item_id` bigint NOT NULL COMMENT '物料产品 ID',
`process_id` bigint DEFAULT NULL COMMENT '工序 ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 产品标准作业程序表(SOP)';
① item_id 关联 mes_md_item 表的 id 字段,表示该 SOP 属于哪个物料产品。
② process_id 关联工序表,指定该操作规程对应的生产工序,详见 《【生产】工序设置、工艺流程》。