阅读要点

  • 每种数据需要明确权威来源、可修改方和生效条件。
  • 收到消息与完成业务处理是两个状态。
  • 重复、乱序和冲销都应进入接口验收。

对接的终点是业务状态一致

“ERP 下达工单,MES 回传产量”只有一句话,真正落地却涉及订单版本、单位换算、工序含义、报废与返工以及入库边界。如果两边对“完工”理解不同,接口返回成功也可能留下数量差异。

ISA-95 为企业业务与制造运营之间的信息交换提供模型和术语框架,其价值之一是帮助团队讨论活动边界与交换对象。[1] 项目中仍需要把这些概念落到具体字段、责任人和状态规则,不能以“符合某个分层图”代替现场确认。

本文以一张离散制造工单为例,整理可用于接口评审的数据契约思路。字段与编号均为设计示例,不限定采用哪一家消息平台。

主数据与执行数据,谁负责维护? 先约定权威来源与生效条件,再决定接口的方向和更新规则。 点击放大
配图 01 · 主数据与执行数据,谁负责维护?

先约定权威来源与生效条件,再决定接口的方向和更新规则。

第一层:谁维护,谁可以改

产品、工艺路线、物料清单和工作中心并不一定来自同一个系统。应先列出每类主数据的权威来源、业务负责人、发布条件和下游使用方式,再安排接口方向。

例如,ERP 维护物料经营信息,工艺系统维护批准后的路线版本,MES 维护具体执行记录。这是一种可讨论的分工,不是所有企业的固定答案。关键是避免同一字段两边都能修改,而又没有冲突处理规则。

工单必须引用明确的产品与路线版本。新版路线发布后,已开工工单是否继续使用旧版,应由工艺变更规则决定;接口不能静默替换已经执行过的工序依据。

方法图解从业务发布到可核对的处理结果
  1. 01

    发布业务事件

    对象、版本、事件标识

  2. 02

    校验与防重

    字段、状态、重复事件

  3. 03

    执行业务规则

    事务、数量、状态变更

  4. 04

    回执与对账

    目标单据、差异与补偿

消息中间件去重与业务幂等分工不同,二者都需要按实际架构验证。

第二层:把事件身份与数量含义写清

工单号只标识业务对象,不足以唯一标识一次完工事件。一张工单可能分多次报工,也可能发生撤销与重新确认。事件应有稳定标识,并同时携带工单、工序、数量类型、单位、业务发生时间与来源版本。

以教学编号 WO-260911-008 为例,第一次报工与第二次报工使用不同事件标识;第一次事件因网络重试而再次发送时,必须保留原标识。接收方先判断它是否已经处理,再决定是否改变业务累计数。

Microsoft 的消息去重说明展示了基于消息标识和时间窗口消除重复发送的机制。[2] 这不能替代业务侧幂等:如果接收程序更新了产量却未记录处理结果,下一次消费仍可能再次增加数量。需要让业务写入与已处理事件记录保持一致,或设计可恢复的处理流程。

完工事件的数据契约示例
字段 / 规则示例需要确认的问题
事件标识EVT-WO008-OP20-001重试时保持不变;重复内容冲突如何处理
工单 / 工序WO-260911-008 / OP20目标工单存在且允许执行
数量 / 单位合格 96、不良 4 / 件首次产出与返工分别记录
路线版本ROUTE-A / V3绑定已批准版本,保留生效依据
业务时间 / 回执发生时间、接收时间、目标单号跨日补传与失败状态可追踪

字段名称仅用于评审示例,正式契约还需包含类型、精度、必填条件与错误码。

一次完工事件,需要携带哪些信息? 工单号标识对象,稳定的事件标识用于识别一次业务动作。 点击放大
配图 02 · 一次完工事件,需要携带哪些信息?

工单号标识对象,稳定的事件标识用于识别一次业务动作。

第三层:回执要说明业务有没有完成

建议至少区分“已接收”“业务处理成功”“业务拒绝”和“处理中”。返回 HTTP 200 可以表达通信或接收层面的成功,但它本身不能说明工单已被业务系统接受,更不能说明实物已经完成入库。

回执应携带事件标识、处理结果、目标单据号和可解释的失败原因。产品编码不存在、路线版本未生效、工单已关闭等情况,通常需要先修正业务条件;反复自动重试不会消除这些问题。

网络超时则要先查目标状态,再使用相同事件标识重试。接收方不确定是否已执行时,应给出可查询状态,而不是要求发送方不断生成新事件来“再试一次”。

已接收,不等于业务已经处理成功 通信结果、业务结果和目标单据,分别表达不同阶段的事实。 点击放大
配图 03 · 已接收,不等于业务已经处理成功

通信结果、业务结果和目标单据,分别表达不同阶段的事实。

第四层:乱序、补传和冲销怎么处理

当完工消息先于工单到达,接收方需要明确是暂存等待、返回可重试状态,还是转入异常队列。延迟补传也要保留业务发生时间与系统接收时间,避免夜班产量被错误算到次日白班。

数量更正宜关联原事件,采用约定的撤销、冲销或差额事件。应说明更正影响生产累计、质量状态还是库存,不要让两边各自修改总数后失去原始依据。

消息保存和重试窗口应覆盖可接受的故障恢复周期。跨系统的权限、时区、精度和计量单位也属于契约内容。比如“件”与“箱”转换需要绑定明确装箱数量,不能只改单位名称。

网络异常后,怎样避免重复报工? 查询目标状态,保留事件身份,让补传与业务更正都可追踪。 点击放大
配图 04 · 网络异常后,怎样避免重复报工?

查询目标状态,保留事件身份,让补传与业务更正都可追踪。

最后用异常和对账来验收

把接口测试从一条正常路径扩展到重复消息、相同标识不同内容、乱序、下游停机、跨日补传与已入库后的更正。每种情况都应说明预期单据、累计数量、异常状态与负责岗位。

日常对账可以按工厂、日期、工单和事件范围比较:下达数、已接收数、已完成数、失败数与待处理数。数量差异要能下钻到单个事件,技术人员看传输日志,业务人员看对应单据与处理动作。

接口验收的重点,是在故障发生后仍能恢复到可解释的一致状态。先把这些规则约定清楚,后续增加物料、质量或库存接口时,才能沿用可靠的协作方式。

参考资料

方法概念参照以下公开资料。文中的配置、演算与检查清单为本站整理的应用示例。

  1. ISA:ISA-95 Series of Standards ↗企业业务与制造运营的信息交换模型。
  2. Microsoft:Duplicate detection in Azure Service Bus ↗基于消息标识的重复检测及其处理边界。
返回新闻资讯 讨论你的业务场景