2. 多工厂运营对象建模

多工厂订单分配与协同排产之所以比单厂排产困难,根本原因不在于算法,而在于对象没有建模清楚。当工厂、产线、工序、物料、订单、库存、运输这些对象各自散落在 ERP、MES、WMS、TMS 和 Excel 中,且字段口径不一致时,任何分配规则都会在数据层面失效。本节的任务是把这些运营对象抽象成一套可计算的主数据结构,并把约束条件显式表达出来。

一、主数据对象的分层结构

多工厂运营对象可以按“资源—能力—需求—流动”四层组织。资源层描述“有什么”,包括工厂、车间、产线、设备;能力层描述“能做什么、做多快、做多少”,包括工序、工艺路线、标准工时、换型时间、产能上限;需求层描述“要做什么”,包括订单、订单行、交期、优先级;流动层描述“怎么连起来”,包括物料、BOM、库存、运输线路与时效。四层之间通过外键关系连接,形成一张可查询、可校验的对象网络。

以工厂对象为例,最小可用字段集应包括:工厂编码、工厂名称、地理位置(经纬度,用于运输距离计算)、可用日历(工作日、班次、节假日)、所属组织、是否可接单、产能等级。产线对象则需挂接在工厂之下,字段包括产线编码、所属工厂、产线类型(如SMT、组装、注塑)、日可用工时、并行工位数、可执行的工序集合。工序对象是能力层的核心,字段包括工序编码、工序名称、适用产线类型、标准工时(分钟/件)、准备时间、良率、是否可外协。

二、订单、库存与运输的结构化表达

订单对象需要区分订单头与订单行。订单头承载客户、下单时间、整体优先级、允不允许拆单;订单行承载物料编码、数量、需求交期、可接受的最早/最晚到货窗口。多工厂场景下,订单行还必须增加“可分配工厂集合”字段,用于表达客户指定、认证限制或区域限制。

库存对象要区分位置与状态。位置包括工厂原料库、线边库、成品库、在途库存、第三方仓;状态包括可用、锁定、质检中、不良品。只有“可用”状态的库存才能参与分配计算。运输对象则建模为“起点—终点—运输方式—时效—成本—批量约束”的线路记录,例如:

线路ID: L-001
起点: 工厂A(华东)
终点: 客户C(华南)
运输方式: 公路整车
时效: 2天
成本: 3.2元/件
最小起运量: 500件

这些字段一旦结构化,订单分配就可以转化为“在满足交期、产能、物料、运输约束的前提下,最小化总成本”的约束满足问题。

三、约束条件的分类与表达

约束条件可分为硬约束与软约束。硬约束不可违反,包括:产能上限、工序先后顺序、物料齐套、交期不可晚于客户最晚到货窗口、认证工厂限制。软约束可以权衡,包括:运输成本最低、换型次数最少、工厂负荷均衡、优先使用自有产能而非外协。

在结构化表达中,硬约束通常写成等式或不等式,例如某产线某日产能约束:

sum(订单行i在产线j第d天的加工时间) ≤ 产线j第d天可用工时

软约束则写成目标函数中的惩罚项或权重项。例如换型惩罚:若同一产线连续生产不同物料,则增加换型时间与成本。这样,分配引擎在求解时就能自动在“交期优先”与“成本优先”之间做权衡。

四、对象关系与约束传导的可视化

下图展示了多工厂运营对象之间的核心关系:订单行如何通过物料与BOM关联到工序,工序如何绑定到产线,产线归属于工厂,库存与运输又如何作为约束参与分配判断。图中同时标注了硬约束与软约束的作用位置,便于理解约束是如何在对象之间传导的。

多工厂运营对象关系与约束传导 订单头 客户 / 优先级 / 是否拆单 下单时间 订单行 物料 / 数量 / 交期窗口 可分配工厂集合 硬约束:交期不可晚 物料主数据 物料编码 / 规格 / 单位 是否可替代 BOM 结构 父件 → 子件 / 用量 层级 / 损耗率 硬约束:齐套才能开工 工序 标准工时 / 准备时间 良率 / 是否可外协 产线 日可用工时 / 并行工位 可执行工序集合 硬约束:产能上限 工厂 地理位置 / 日历 / 班次 是否可接单 库存 位置 / 状态 / 可用量 线边库 / 在途 / 成品库 运输线路 起点 / 终点 / 方式 时效 / 成本 / 起运量 约束传导说明 硬约束:交期窗口、产能上限、BOM齐套、认证工厂限制、工序先后顺序 软约束:运输成本最低、换型次数最少、工厂负荷均衡、优先自有产能 分配判断:订单行 → 可分配工厂 → 产线可用产能 → 物料齐套 → 运输时效 → 成本排序 输出:工厂-产线-工序-日期 的排产方案,以及订单行到工厂的分配结果

五、建模落地时的关键检查点

在实际项目中,对象建模最容易出问题的地方不是字段不够,而是字段口径不统一。例如,A工厂的“日可用工时”按8小时计,B工厂按两班16小时计,但字段名都叫“日产能”,分配引擎就会误判。因此,建模完成后必须做三项校验:第一,所有时间单位统一为分钟;第二,所有数量单位统一为最小计量单位;第三,所有工厂日历必须覆盖排产周期内的每一天,缺失日期按不可用处理。

另一个常见问题是约束的优先级没有显式声明。建议在模型配置中为每条约束标注类型(硬/软)和权重。硬约束违反时直接判定方案不可行;软约束违反时计入惩罚分。这样,当交期与成本冲突时,系统能按预设策略给出可解释的结果,而不是随机选择一个方案。

建模阶段建议先冻结对象字段,再开发分配算法。字段频繁变更会导致历史数据无法回溯,排产结果也无法复现。可以先从订单行、产线、工序、库存四个核心对象开始,运输和BOM作为第二阶段扩展。