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

本课目标
读完这一课,你将能够
- 为「订单确认后检查齐套、建议下达工单」设计对象、关系、Action 和触发条件
- 说清哪些数字由计算步骤算、哪些由 AI 分析步骤写,并为它选定自主程度
- 在打开之前,用验收问题、只校验、预演和只通知的首个版本验证它
对象、关系与动词
上一课的会议留下一张清单。这一课用它做第一个完整设计:一张销售订单确认之后,怎样一路走到发运。这里的决定只有一个:这张订单的物料齐了吗,能不能放行工单?
对象
salesOrder、orderLine、product、workOrder、productionLine、shipment;物料只读进来,做齐套判断。
关系
orderOrderLines、orderWorkOrders、lineWorkOrders、orderShipments,加上带 quantityPerUnit 的 productMaterials(物料清单)。
动词
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" }
}
}
- 01查询订单行、物料清单、库存
- 02计算逐个物料算缺口
- 03AI 分析起草建议:哪条线、几号开工
- 04通知把建议发给计划员
- 05人来批准计划员执行
release-work-order
分工是这个设计的核心:数字由计算步骤算,判断与措辞由 AI 分析步骤写。缺口是多少,不能让模型估;它只负责解释哪条线更合适、风险在哪。
自主程度停在「建议」。工作流不写数据,只把建议发给计划员,下达那一步由计划员点一次,这就是人工关口。智能体在这里读订单和库存、算缺口、起草、通知,不写任何东西。建议的采纳率稳定之后,再考虑升级。
战略客户的订单风险更高。再加一个带 when 的通知步骤,客户等级是 strategic 时多发一份给生产经理。收件人写死在清单里,最多 5 个,必须是本公司账号。
会出什么错,怎样先验证再打开
- 库存陈旧:放行了缺料的订单。对策是数据看门狗,并在通知里写明库存数据的时间。
- 订单改了没人知道:冷却期内的变化只推进游标,不开跑。冷却时长要和业务节奏一致。
- 本体(Ontology)和 MES 不一致:本例没有配置 writeback webhook,下达只记在本体里,计划员仍需在 MES 下达。配置获授权的 writeback webhook 后,Action 可以修改 MES。被 edits 盖住的源值会出现在
overridden里。
- 先答验收问题
「订单 SO-2609-014 要哪些物料、缺哪些?」「未来三天到期的有哪些?」人和智能体都答得出,再往下走。
- 只校验 Action
对一张生产中的工单执行
--validate-only,应当失败,并给出「只有计划中的工单才能下达」。 - 用历史订单预演
取三张历史订单:齐套、缺料、临界,在 test 通道预演,对照当时计划员的实际决定。
- 先发只通知的版本
第一个带自动触发的版本只通知,跑两周,看建议和人的决定有多接近,再加别的。
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 写出你的放行动作:参数、规则、一条提交条件和失败信息。
写出 change 的类型、when 和冷却时间,并说明冷却为什么是这个长度。
列出效果的每一步,标出哪些是计算、哪些是 AI 分析、哪一步是人。
小测
选一个答案,马上看解析。
Q1齐套检查里,「缺多少」这个数应该由谁来定?
数字要可重复、可核对,由计算步骤算。模型只写解释与风险,不改数字。
Q2为什么先发一个只通知的版本,而不是一上来就写入?
自主程度是逐级升的。只通知的版本没有副作用,还能积累采纳率这类证据。
Q3工单已在本体里被下达,MES 里还是「计划中」。你会在哪里看到差异?
本例没有配置 writeback webhook,所以 Action 只改本体。edits 优先于后续源同步;被 edits 盖住且源值不同的属性会出现在 overridden 里。配置获授权的 writeback webhook 后,Action 可以修改源系统。