闭环一:订单到交付

第 2 课 · 共 7 课 约 9 分钟

订单确认后检查物料是否齐套,起草下达建议,由计划员批准,一路走到发运。

本课目标

读完这一课,你将能够

  • 为「订单确认后检查齐套、建议下达工单」设计对象、关系、Action 和触发条件
  • 说清哪些数字由计算步骤算、哪些由 AI 分析步骤写,并为它选定自主程度
  • 在打开之前,用验收问题、只校验、预演和只通知的首个版本验证它

对象、关系与动词

上一课的会议留下一张清单。这一课用它做第一个完整设计:一张销售订单确认之后,怎样一路走到发运。这里的决定只有一个:这张订单的物料齐了吗,能不能放行工单?

OBJECTS

对象

salesOrder、orderLine、product、workOrder、productionLine、shipment;物料只读进来,做齐套判断。

LINKS

关系

orderOrderLines、orderWorkOrders、lineWorkOrders、orderShipments,加上带 quantityPerUnit 的 productMaterials(物料清单)。

ACTIONS

动词

confirm-order、release-work-order、report-output、ship-order。

齐套的判断很朴素:对订单里的每一行,用数量乘以物料清单里的 quantityPerUnit,汇总成每种物料的需求,再和库存比一比。

接口 Schedulable 让销售订单、工单、采购订单都有 dueAt 和 status,「未来三天到期的所有事」一句话就能问出来。每天早上的延期提醒(自动化⑤)靠它。

下达工单是这个闭环的关键动词,只允许「计划中」的工单。人点按钮和自动化调用,走的是同一个 Action:

{
  "kind": "actionType",
  "apiName": "release-work-order",
  "title": "下达工单",
  "schema": {
    "parameters": [
      { "name": "workOrder", "type": "object", "objectType": "workOrder", "required": true },
      { "name": "note", "type": "string", "maxLength": 200 }
    ],
    "rules": [
      { "type": "modifyObject", "objectType": "workOrder", "object": "$workOrder", "values": { "status": "released" } }
    ],
    "submissionCriteria": [
      { "condition": { "type": "comparison", "left": { "param": "workOrder", "property": "status" }, "operator": "is", "right": { "literal": "planned" } },
        "failureMessage": "只有计划中的工单才能下达" }
    ],
    "summary": "{workOrder} 下达",
    "actionLog": true
  }
}

数据从哪来,多新才够

怎么用为什么
ERP:订单、订单行数据变化触发 change订单一确认就要开始检查,不需要轮询
ERP:物料库存只被读取,不触发它是判断的依据;库存陈旧,缺料的订单就会被放行
MES:工单、产出同步进来,只被读取MES 同步提供工单状态与产出。Action 写入的 edits 优先,后续源同步不会覆盖已有改动。
延期风险提醒定时触发 schedule时间本身就是条件:每天早上一次

先问「是不是数据一变才需要做」。齐套检查是,用 change;延期提醒不是,用每天一次的 schedule。库存最要紧:陈旧的库存会让整个判断作废,所以自动化⑥的数据看门狗要先于这个闭环就位。

再估一笔账。假设示例工厂每天确认 40 张订单,这个工作流每天最多跑 40 次。每次占多少计算分钟,预演几次之后用 aidc app usage 看,再和每月缺省 2000 的上限对一对,比上线后才发现要好。

自动化:条件、效果与关口

触发条件写在工作流清单里:订单变成 confirmed 就开跑,同一张订单 12 小时内最多跑一次。

"trigger": {
  "manual": { "roles": ["developer", "editor"], "preview": "members" },
  "change": {
    "type": "salesOrder",
    "when": "=object.status == 'confirmed'",
    "cooldown": "12h",
    "input": { "order_no": "=object.orderNo" }
  }
}
  1. 01查询订单行、物料清单、库存
  2. 02计算逐个物料算缺口
  3. 03AI 分析起草建议:哪条线、几号开工
  4. 04通知把建议发给计划员
  5. 05人来批准计划员执行 release-work-order

分工是这个设计的核心:数字由计算步骤算,判断与措辞由 AI 分析步骤写。缺口是多少,不能让模型估;它只负责解释哪条线更合适、风险在哪。

自主程度停在「建议」。工作流不写数据,只把建议发给计划员,下达那一步由计划员点一次,这就是人工关口。智能体在这里读订单和库存、算缺口、起草、通知,不写任何东西。建议的采纳率稳定之后,再考虑升级。

战略客户的订单风险更高。再加一个带 when 的通知步骤,客户等级是 strategic 时多发一份给生产经理。收件人写死在清单里,最多 5 个,必须是本公司账号。

会出什么错,怎样先验证再打开

  • 库存陈旧:放行了缺料的订单。对策是数据看门狗,并在通知里写明库存数据的时间。
  • 订单改了没人知道:冷却期内的变化只推进游标,不开跑。冷却时长要和业务节奏一致。
  • 本体(Ontology)和 MES 不一致:本例没有配置 writeback webhook,下达只记在本体里,计划员仍需在 MES 下达。配置获授权的 writeback webhook 后,Action 可以修改 MES。被 edits 盖住的源值会出现在 overridden 里。
  1. 先答验收问题

    「订单 SO-2609-014 要哪些物料、缺哪些?」「未来三天到期的有哪些?」人和智能体都答得出,再往下走。

  2. 只校验 Action

    对一张生产中的工单执行 --validate-only,应当失败,并给出「只有计划中的工单才能下达」。

  3. 用历史订单预演

    取三张历史订单:齐套、缺料、临界,在 test 通道预演,对照当时计划员的实际决定。

  4. 先发只通知的版本

    第一个带自动触发的版本只通知,跑两周,看建议和人的决定有多接近,再加别的。

aidc semantic apply release-work-order --param workOrder=WO-2609-031 --validate-only
aidc semantic automate run order-release --param order_no=SO-2609-014 --channel test --preview
aidc app deploy order-release --dry-run

要点

  • 先用一个决定框定闭环:订单确认后,物料齐了吗,能不能放行工单?
  • 数据一变才需要做的用 change;时间本身是条件的用 schedule;库存陈旧是最大的隐患。
  • 数字由计算步骤算,判断与措辞由 AI 分析步骤写。
  • 先发只通知的版本,再用预演和历史订单对照,最后才加写入。

练一练

把这个闭环改成你的业务

用你在上一课写的一页设计,挑一个「某个单据确认后要检查条件」的场景。

照 release-work-order 写出你的放行动作:参数、规则、一条提交条件和失败信息。

小测

选一个答案,马上看解析。

Q1齐套检查里,「缺多少」这个数应该由谁来定?

Q2为什么先发一个只通知的版本,而不是一上来就写入?

Q3工单已在本体里被下达,MES 里还是「计划中」。你会在哪里看到差异?

延伸阅读