连接任何 ERP

SkyPlanner 的开放 REST API 可连接 ERP、MES 和运营系统,包括内部 ERP。您可以自行构建集成,也可以让我们的团队协助。

也可独立运行 — ERP 集成是可选的,非必需的。

讨论集成项目

连接 ERP 和 MES 系统,如

集成 / ERP / Odoo

Odoo 集成指南:连接 SkyPlanner APS 生产排程

本指南面向 Odoo 合作伙伴、开发人员和 IT 负责人,介绍如何将 Odoo Manufacturing 连接到 SkyPlanner APS。如需了解集成的业务价值,以及 Odoo 的 Plan 按钮已有的功能,请阅读 Odoo 生产排程页面和《Odoo 是否支持生产排程?》。

SkyPlanner APS 甘特图时间轴,显示各工作中心的生产任务安排,下方为订单列表。

产品、物料清单、工序、制造订单、库存和成本核算仍以 Odoo 中的记录为准。SkyPlanner 使用 Arcturus 引擎,根据这些数据生成排程。它与 Odoo 双向集成:

  • 从 Odoo 导入制造订单、工单、BoM 工序、工作中心和采购订单。
  • 将计划开始时间、结束时间和工作中心回写到 mrp.workorder。
  • 将进度和已记录工时以 Odoo Time Logs 的形式回传。
  • 排程一有变化,SkyPlanner webhook 就会推送更新。

在上线准备期间,SkyPlanner 团队会通过 Odoo 的标准外部 API 配置集成,适配您的版本、托管方式和定制内容,并在上线后提供支持。本指南面向希望参与集成的合作伙伴和开发人员,也适用于希望自行基于 SkyPlanner 已公开文档的 REST API 进行开发的团队(API 参考)。产品、物料和采购订单的处理方式见公开的 SkyPlanner 文档。

第零步:确认 Odoo 套餐和托管方式

先确认客户使用的是哪种 Odoo 配置,再据此选择集成路径。

部署配置外部 API自定义模块可行路径
Odoo Online,One App Free 或 Standard 套餐不支持不支持使用 CSV/XLSX,或升级到 Custom 套餐
Odoo Online,Custom 套餐支持不支持外部 API
Odoo.sh(Custom 套餐)支持支持外部 API,可选配模块
本地部署,Community 或 Enterprise 版支持支持外部 API,可选配模块

Odoo 的 API 文档明确说明,外部 API 访问权限“only available on Custom Odoo pricing plans”(仅适用于 Odoo Custom 套餐),One App Free 和 Standard 均不提供。其定价页面说明,Standard 托管于 Odoo Online,“without custom modules”(不支持自定义模块)。这些问题应在需求调研阶段确认,不要等到开发进行了一半才问。

Odoo 的集成选项

集成方式版本身份验证在排程集成中的用途
外部 JSON-2 API:POST /json/2/<model>/<method>19.0 新增在 Authorization: bearer <key> 中传入 API 密钥,可选用 X-Odoo-Database 请求头新建集成的默认选择:用 search_read 读取数据,用 write 回写日期
外部 XML-RPC / JSON-RPC:/xmlrpc/2、/jsonrpc,服务为 common、object截至 19.0 仍可用;已计划移除使用登录名及密码或 API 密钥调用 common.authenticate,然后调用 execute_kw使用 16.0 至 18.0 的客户必须采用此方式
模块中的自定义控制器所有版本按路由设置,例如 auth='bearer'合并传输数据:一次调用传输生产订单及其工单
自动化规则:“Send Webhook Notification”(发送 Webhook 通知)自 17.0 起在文档中提供说明向外部 URL 发送 POST 请求创建或编辑生产订单和工单时推送
导入记录(CSV、XLSX)及导出所有版本用户会话试用数据和一次性主数据导入

现在就为接口移除做好准备。Odoo 已计划移除 XML-RPC 和 JSON-RPC,涉及 Odoo 22(2028 年秋季)和 Odoo Online 21.1(2027 年冬季)。针对 19.0,应基于 JSON-2 开发;针对旧版数据库,应将 RPC 调用封装在一个适配器中,这样升级时只需改动一处。使用 @route(type='jsonrpc') 的自定义控制器不受此次移除影响。

身份验证

创建专用集成用户,授予 Manufacturing 和 Inventory 的读取权限,以及工单的写入权限。在 Preferences > Account Security > New API Key 下为该用户生成密钥。19.0 版本的密钥有效期最长为三个月,因此中间件需要支持密钥轮换,并在身份验证失败时发出告警。否则,密钥过期会导致同步停止,却无人察觉。SkyPlanner 端的 REST API 使用 JWT,因此中间件需要保管两端的凭据。

每次 JSON-2 调用都在独立的 SQL 事务中运行,因此跨多次调用的写入操作不具备原子性。应按工单逐一写入,并记录每次结果。

事件

Odoo 通过自动化规则推送变更。在 mrp.production 或 mrp.workorder 上设置规则,将触发条件设为创建和编辑时,操作设为“Send Webhook Notification”(发送 Webhook 通知),即可向指定 URL 发送包含所选字段的 POST 请求。可在 Studio 中创建规则,也可在开发者模式下通过自动化规则表单创建。同时应定期使用 search_read 按 write_date 轮询,补齐导入的数据以及规则遗漏的变更。反向传输时,SkyPlanner webhook 会在排程和状态发生变化时即时推送。

不同版本的字段名称有所差异。在 19.0 中,每个数据库都通过 /doc 列出自身的模型、字段和方法;旧版则需调用 fields_get。应以这些信息为依据建立映射,不要凭记忆。

数据映射:从 Odoo 到 SkyPlanner

Odoo 模型SkyPlanner 对象传输方向同步频率
product.product / product.template (default_code, uom_id, qty_available)产品或物料Odoo → SkyPlanner首次导入,之后每天或发生变更时同步
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproduct多层级产品、各工序的物料需求Odoo → SkyPlanner发生变更时
mrp.routing.workcenter(工序选项卡:workcenter_id、sequence、time_mode、time_cycle_manual、blocked_by_operation_ids)工序及其顺序和加工时长Odoo → SkyPlanner发生变更时
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids)工作中心、效率、准备与清理、备选工作中心Odoo → SkyPlanner,之后在 SkyPlanner 中维护首次导入
mrp.workcenter.capacity (capacity)每周期产出件数、各产品的准备和清理时间Odoo → SkyPlanner首次导入
resource.calendar, resource.calendar.attendance, resource.calendar.leaves班次和休假Odoo → SkyPlanner首次导入,休假数据发生变更时同步
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids)订单及其交期和优先级Odoo → SkyPlanner确认时通过 Webhook 推送,并配合轮询
mrp.workorder (operation_id, workcenter_id, duration_expected, state)工作中心上的生产任务Odoo → SkyPlannerWebhook 推送并配合轮询
stock.quant、stock.move(组件库存移动)现有库存和物料需求,用于物料驱动排程Odoo → SkyPlanner定时同步,例如每 15 至 60 分钟
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received)采购订单和在途物料,按预计交货日期计为可用Odoo → SkyPlanner采购订单确认或编辑时通过 Webhook 推送,并配合相同的定时轮询
计划开始时间、结束时间和工作中心mrp.workorder.date_start, date_finished, workcenter_idSkyPlanner → Odoo排程发生变更时,通过 SkyPlanner webhook 推送
Mobile Confirmations、工时记录mrp.workcenter.productivity(Time Logs:workcenter_id、workorder_id、date_start、date_end、loss_id)SkyPlanner → Odoo每次确认时
完工数量、工序完工状态设置工单的 qty_producing,然后调用 button_finish;对生产订单调用 button_mark_doneSkyPlanner → Odoo,或在 Odoo Shop Floor 中完成每次确认时

集成模式

先导入主数据。

先加载工作中心和日历,再加载产品、BoM 和引用工作中心的工序。在 30 天试用期间,也通过导出的 CSV 文件导入这些列表。Odoo 的导入导出工具可用于任何列表视图。

订单同步。

导入状态为 confirmed 和 progress 的生产订单及其工单。草稿生产订单不导入,或将其视为暂定需求。有独立物料清单的子装配件可作为单独的子生产订单传入,Odoo 会分别为各生产订单制定计划。将这些订单映射到 SkyPlanner 子产品,确保子装配件在上层产品开始生产前完工。

排程回写。

排程发生变化时,SkyPlanner webhook 会触发集成程序,程序随后调用 ORM 的 write 方法,更新每条受影响的 mrp.workorder 记录。在 Odoo 19.0 中,每张工单需要发送一次 JSON-2 请求:

“ POST /json/2/mrp.workorder/write Authorization: bearer <api-key> {"ids": [4711], "vals": {"date_start": "2026-11-03 06:00:00", "date_finished": "2026-11-03 09:30:00", "workcenter_id": 7}} “

JSON-2 按名称接收各个方法参数,以及 ids 和 context,因此 write(vals) 中的参数会作为 vals 键传入。在 16.0 至 18.0 中,同一调用通过 XML-RPC 或 JSON-RPC 执行,形式为 execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]);16.0 使用的键名则是 date_planned_start 和 date_planned_finished。日期时间统一使用 UTC。为确保正确写入,请遵守以下规则:

  • 在同一次调用中发送两个日期。
  • 仅在引擎选择了备选设备时才添加 workcenter_id。
  • 只写入排程字段,绝不修改数量或 BoM。

写入日期后,Odoo 自身的工作中心预订时段会随之调整,因此 Odoo 的计划视图会显示 SkyPlanner 的排程。

将车间数据传回 Odoo。操作员在 SkyPlanner Mobile Confirmations 中记录作业。每次确认后,集成程序都会调用 create 方法,在 mrp.workcenter.productivity 中创建记录(JSON-2:向 POST /json/2/mrp.workcenter.productivity/create 传入 vals_list)。程序填入 workorder_id、workcenter_id、date_start、date_end,以及类型为 Productive 的 loss_id,工时和成本核算数据随即记入 Odoo。

工序完成后,集成程序会设置已生产数量,并对工单调用 button_finish。最后一张工单完成后,生产订单即可执行 button_mark_done。每次确认只提交一次,其 Odoo 记录 ID 会随 SkyPlanner 工时记录一同保存,因此 webhook 重试绝不会重复创建 Time Log。

使用 Enterprise Shop Floor 应用的工厂则采用相反的数据流向:SkyPlanner 读取工单状态和 qty_produced,生产发生变化时,Autopilot 会自动重新排程。

数据管理权。上线前应将以下规则明确记录下来:

数据管理系统
产品、BoM、工序、数量、MO 状态Odoo
工单顺序、开始和结束时间、工作中心选择SkyPlanner
准备及换型时间矩阵、工具和操作人员要求、替代资源SkyPlanner
工作中心日历和 Time Off由一个系统统一管理,在范围评估时确定
Time Logs、库存和成本核算Odoo,接收 SkyPlanner 回传的报工数据

对于由 SkyPlanner 排程的 MO,计划员不再在 Odoo 中点击 Plan 和 Unplan。否则,Odoo 会自行预订时段,覆盖 SkyPlanner 的日期安排。

典型项目步骤

实施通常在上线准备启动后的数周内完成。在此之前,您可以将自己的 Odoo 数据导出为 CSV,进行 30 天免费试用。项目本身包括:

  1. 主数据映射:核对各版本的 Odoo 模型和字段(查看 /doc 或调用 fields_get)、计量单位,并明确由哪个系统维护日历和 Time Off。
  2. 数据整理:整理工作中心日历、Setup Time 和 Cleanup Time,并将 BoM 工序的时长设为 Fixed,而非 Computed。
  3. 首次加载:导入产品、工作中心及其日历、BoM 及其工序。
  4. 订单和采购订单同步:同步已确认和进行中的生产订单及其工单,以及 purchase.order 明细行和相应的预计到货日期。
  5. 排程回写:将日期和工作中心写入 mrp.workorder,并在 Odoo 端轮换 API 密钥。
  6. 车间报工:将 Time Logs 和工单完工信息回传到 Odoo。
  7. 与现行计划并行测试,然后上线。

Odoo 常见陷阱

  • 日期字段已更名。截至 16.0,date_planned_start 和 date_planned_finished 存储计划时间,date_start/date_finished 存储实际时间。从 17.0 起,date_start 和 date_finished 改为计划日期。将 16.0 项目的映射直接复制到 17+,会在没有提示的情况下把实际时间当作计划时间读取。
  • 工单日期对应工作中心的占用时段。在 19.0 中,date_start 和 date_finished 这两个字段位于 mrp.workorder 上,其值根据工作中心日历中的一条 resource.calendar.leaves 记录(leave_id)计算得出。写入工单日期会更新该占用时段。切勿直接写入 leave 表。
  • 工单一旦开工,就无法取消排程。当“Some work orders have already started”(部分工单已经开工)时,Odoo 会拒绝取消该生产订单的排程。回写时应跳过状态为 progress 或 done 的工单,只调整尚未开工的工单。
  • 工序时长会变动。设为 Computed 的工序会根据最近的工单(默认为 10 张)计算时长,并按 Time Efficiency 调整。试用时将其设为 Fixed,否则就要接受输入数据持续变化。工序分别维护在各个 BoM 中,没有共用的工艺路线主数据,因此每个 BoM 都需要单独整理。
  • 日历配置有误。每个工作中心都需要工作时间日历。Odoo 自带的排程功能最多向后查找 700 天,之后便会停止并提示“Impossible to plan the workorder”(无法为该工单排程)。首次加载数据前,应先修正日历。
  • 计量单位。mrp.bom.line 有自己的 product_uom_id,可能与产品的库存单位不同。检查物料可用量之前,先换算单位。

谁来配置 Odoo 集成

每家工厂的 Odoo 配置都不同:BoM 工序、工作中心日历、替代工作中心和自定义模块各有差异。针对这些配置建立准确的数据映射,正是 SkyPlanner 团队的专长。

  1. 由 SkyPlanner 团队配置。团队会在上线准备期间根据您的 Odoo 配置完成集成,并在上线后提供支持。集成基于 SkyPlanner REST API、webhook,以及 Odoo 的 JSON-2 或 RPC API 运行。这是默认路径。
  2. 您的 Odoo 合作伙伴也可参与。合作伙伴熟悉您的配置和自定义模块,可以使用同一套 REST API 进行开发,并参考其文档。该 API 可读写订单、产品、物料、工序和工时记录,采用 JWT 身份验证,并提供 Swagger/OpenAPI 文档。
  3. 您的内部开发人员也可以采用同样的方式,通常是为 Odoo 配套开发轻量中间件,或在 Odoo.sh 或本地部署环境中开发模块。只需一个 API 密钥即可开始(集成教程),SkyPlanner 团队会在需要时提供协助。

同样的模式已在其他 ERP 的生产环境中运行。在 Laboratory & Allied,内部 IT 团队在 SkyPlanner 的协助下,基本独立完成了 SAP Business One 集成。使用 NetSuite 的 UTU 则将 SkyPlanner 与 ERP 配合运行。

集成为何能带来回报

回写让集成在日常工作中真正发挥价值。启用后:

  • Odoo 工单中有了切实可用的排程日期。Arcturus AI 引擎可在数秒内为所有未结生产订单排序,并将日期和所选工作中心写入 mrp.workorder,直接显示在 Odoo 的计划视图中。
  • 无需人工重新排程。生产发生变化时,Autopilot 会自动重新排程,webhook 则将新日期推送到 Odoo。
  • 车间反馈形成闭环。操作人员使用手机或平板电脑,通过 Mobile Confirmations、Production Timer 和 Quick Log Mode 记录作业,Time Logs 随后回传到 Odoo,用于库存和成本核算。排程与执行在同一工具中完成,Community 和 Enterprise 版均可使用。
  • 排程考虑了 Odoo 未涵盖的约束。准备时间矩阵按产品组合定义与加工顺序相关的换型时间。工装是设备之间共用的有限资源,一项生产任务也可能同时需要多名操作员。主要设备或人员不可用时,引擎会选用备选设备或人员。回写到 mrp.workorder 的日期符合所有这些约束。
  • 按物料到货情况排程。现有库存和 Odoo 中未结采购订单为物料驱动排程提供数据。已订购的组件在采购订单交货日期视为可用,采购订单标记为 Delivered 后,库存随之更新。每项生产任务都会核对仓库现有物料和在途物料。

在开展任何集成工作之前,您就可以评估排程效果。使用导出的 CSV 文件开启30 天免费试用,在甘特图上查看自己的 Odoo 工单,最多支持 20 个工作中心,无需信用卡。价格每月 199 € 起,包含 5 个工作中心,按月计费,可随时取消。集成费用会根据您的流程和需求,与所选套餐一并提前报价,让您在开始前了解全部费用。查看功能和客户案例,或预约演示。

制造企业对 SkyPlanner 的评价

UTU 供应链专员 Kalle Kalliomäki 在 Ulvila 的配电盘生产车间

2 h每周节省的时间

“SkyPlanner 让我们的生产计划从 Excel 表格迈向了实时生产优化。”

Kalle Kalliomäki,供应链专员
UTU · 配电盘与开关设备

生产计划工作每周节省 2 小时,新的作业队列几秒内即可下达到产线。

阅读 UTU 的评价

在内罗毕 Laboratory & Allied 制药厂的瓶装灌装线上,操作人员身穿洁净服作业

+90%生产效率提升

“生产效率提高了 90%。”

Abdul Rucyinga,IT 主管
Laboratory & Allied · 制药

生产效率提高了 90%,为所有工作中心编制覆盖三个月的优化计划,用时不到 30 分钟。

阅读 Laboratory & Allied 的评价

Mamec 首席执行官 Hannu Ryynänen 在公司位于洛赫亚的生产车间内

1,000s工单自动排程

“我们对生产的管控有了新的方式,对产能的了解也达到了全新的水平。”

Hannu Ryynänen,首席执行官
Mamec · 工业搅拌机、泵及高科技产品合同制造

数千份工单自动完成排程,全公司都能实时掌握生产情况。

阅读 Mamec 的评价

Piristeel 位于考哈瓦的屋面安全设施工厂鸟瞰图

99.2%准时交付率

“SkyPlanner 让生产瓶颈清晰可见,也让生产管理更加清楚有序。”

Toni Tuori,生产经理
Piristeel · 屋面安全设施与雨水系统

今年准时交付率达到了 99.2%,排程每天最多可节省四小时的工作时间。

阅读 Piristeel 的评价

常见问题

Odoo Online 支持这项集成吗?

Custom 套餐支持,可通过外部 API 实现集成。One App Free 和 Standard 均不提供外部 API 访问权限,而且 Standard 不支持自定义模块,因此这两种套餐只能通过 CSV/XLSX 导入和导出数据。

应该使用 JSON-2 还是 XML-RPC?

Odoo 19.0 及更高版本应使用 JSON-2。16.0 至 18.0 仍需使用 XML-RPC 和 JSON-RPC,但这两种接口计划在 Odoo 22 中移除。

如何将排程结果写回 Odoo?

通过 ORM 的 write 方法更新每条 mrp.workorder 记录:在 19.0 中,向 POST /json/2/mrp.workorder/write 传入 ids 和 vals;在 16.0 至 18.0 中,通过 XML-RPC 或 JSON-RPC 使用 execute_kw 调用 write。写入的字段为 date_start、date_finished(16.0 中为 date_planned_start 和 date_planned_finished),以及发生变化时的 workcenter_id。Odoo 会随之调整工作中心的占用时段,因此其计划视图会显示 SkyPlanner 的排程日期。

操作人员的报工信息如何传入 Odoo?

以 Time Logs 的形式传入:集成程序为对应工单创建 mrp.workcenter.productivity 记录,填入开始时间、结束时间,并将损失原因设为 Productive,然后在工序完成时调用 button_finish。每次确认只提交一次,因此重试不会造成工时重复记录。

上线后由谁维护集成?

SkyPlanner 团队会在上线准备期间配置集成,并在上线后提供支持;当您的 Odoo 配置发生变化时,也会相应调整集成。如果由您的合作伙伴或开发人员构建集成,他们可依据 REST API 文档和 SkyPlanner 文档开展工作,SkyPlanner 团队会在需要时提供协助。

已经开工的工单会如何处理?

写回时不要改动这些工单。一旦有工单正在执行或已经完成,Odoo 就不允许取消该生产订单(MO)的排程。SkyPlanner 会读取这些工单的状态和进度,在安排剩余工作时将它们纳入考虑。

Odoo 集成需要多长时间?

实施通常在上线准备启动后的几周内完成。先用导出的 CSV 数据进行 30 天试用,就能在 API 开发开始前,用您自己的 Odoo 数据验证排程效果。