一、为什么通用工单模型不够用
机加工场景里,核心对象是:工单 → 工序 → 工件 → 报工。
食品场景里,核心对象变成:
物料批(供应商批 / 内部批 / 成品批)
配方版本(同 SKU 不同客户参数)
称量记录(谁、哪台秤、什么时间、误差多少)
CCP(关键控制点:杀菌温度、金属检测、清洗参数)
效期(FIFO / FEFO)
如果直接用“工单 + 产品 ID”建模,后面做追溯时会发现:
能查到“哪天生产的”,但查不到“用了哪批黄油、哪台搅拌机、杀菌曲线长什么样”。
食品 MES 的本质,是把“批次谱系”当成一等公民。
二、核心实体关系
SupplierLot(原料批)
│
▼
InternalLot(内部批:脱包/分装/称量后)
│
▼
WorkOrder(工单,绑定配方版本)
│
├── WeighingRecord(称量记录)
├── ProcessParameter(CCP 采集)
├── BatchStep(工序过站)
│
▼
FinishedLot(成品批)
│
▼
PackageUnit(箱/瓶/袋,赋码后一物一码)
正向追溯:FinishedLot → WorkOrder → InternalLot → SupplierLot
反向召回:SupplierLot → 受影响 FinishedLot → 出货客户/门店
三、几张关键表怎么建
- 内部批次表 internal_lot
CREATE TABLE internal_lot (
lot_no VARCHAR(64) PRIMARY KEY,
source_supplier_lot VARCHAR(64),
material_code VARCHAR(32),
qty DECIMAL(18,3),
uom VARCHAR(8),
expiry_date DATE,
status SMALLINT, -- 0待检 1合格 2隔离 3报废
created_by VARCHAR(32),
created_at DATETIME
);
重点不是字段多,而是 status 必须参与业务流程:隔离批不能被发料。 - 称量防错表 weighing_record
CREATE TABLE weighing_record (
id BIGINT PRIMARY KEY,
work_order VARCHAR(64),
material_code VARCHAR(32),
target_weight DECIMAL(18,3),
actual_weight DECIMAL(18,3),
tolerance DECIMAL(18,3),
scale_no VARCHAR(32),
operator VARCHAR(32),
result SMALLINT, -- 0超差 1通过
created_at DATETIME
);
投料防错的逻辑很简单:
IF ABS(actual_weight - target_weight) > tolerance THEN
result = 0
锁下一工序
ELSE
result = 1
写电子批记录
END IF
系统层面要做到:秤不回传、扫码不匹配、超差,就不允许点“投料完成”。 - CCP 采集表 ccp_sample
CREATE TABLE ccp_sample (
id BIGINT PRIMARY KEY,
work_order VARCHAR(64),
point_code VARCHAR(32), -- KILL_TEMP / METAL_DETECT / CIP_PH
sample_value DECIMAL(18,4),
lower_limit DECIMAL(18,4),
upper_limit DECIMAL(18,4),
in_limit BOOLEAN,
device_no VARCHAR(32),
captured_at DATETIME
);
CCP 数据尽量走 PLC / 仪表直采,不要让人敲键盘录。
审计员最信的,是“设备时间戳”,不是“班长补录单”。
四、电子批记录怎么拼出来
电子批记录(EBR)不是一张表,是一次工单的快照聚合:
EBR = WorkOrder- BOM/配方版本
- 所有 WeighingRecord
- 所有 CcpSample
- 所有 BatchStep 过站记录
- 设备/班次/原料批号
导出格式建议同时支持:
PDF(验厂用)
JSON(系统间流转)
Parquet/ODS(后续做 SPC、良率分析)
HACCP / ISO22000 / GMP 审计时,最怕“记录有但连不上”。
所以 EBR 的关键不是“有记录”,是记录之间能互相证明。
五、和 ERP / WMS / PLC 的边界
六、中小食品厂落地顺序(避坑)
先跑追溯:internal_lot + weighing_record + ccp_sample
再做防错:秤/扫码/PLC 不达标就锁工序
再补排产:换线清洗时间、同配方连产、FIFO 约束
最后上一物一码:包装赋码、渠道反查、消费者扫码
别一上来做“大屏 + 20 个模块”,先让车间主管愿意用系统报工,比什么都重要。
七、小结
食品 MES 的技术难点,不在前端页面,而在三件事:
批次谱系是否闭环
称量/投料是否系统强制
CCP 是否设备直采、可审计
把这三件事的数据模型打牢,后面接 ERP、接 IoT、接质量分析都不会散。
如果你在做 MES / 工业数据中台,欢迎在评论区聊具体场景:饮料 CIP 互锁、预制菜解冻计时、烘焙配方权限,这几个坑都挺有意思。