销售订单→出库单同步策略实战教程
这个策略解决什么问题
在某零售企业的实际项目里,营销云承接前端门店与渠道的订单,后台 ERP(这里指金蝶云星辰)负责出库与库存账。一个典型痛点是:营销云里审核通过的「新订单」要尽快变成 ERP 里的出库单,否则发货延迟、库存不准、对账扯皮。我们这次只聚焦一条策略:把营销云的新版订单按增量方式同步到 ERP 的销售出库单。整体供应链有几十条策略,我们用这一条把"单据同步"的最小闭环讲透。
数据流向与字段映射
整体流向是:营销云(源) → 轻易云集成平台(中间层) → ERP 目标系统。中间层负责做编码映射、字段转换、幂等控制,源和目标不直接对话。
关键字段对照(基于源/目标接口元数据整理):
| 业务含义 | 营销云源字段 | ERP 目标字段 | 处理方式 |
|---|---|---|---|
| 单据编码 | no | bill_no | 直接传,作为幂等键 |
| 审核时间 | approveDt | bill_date | 取日期部分 |
| 客户编号 | clientAppNo | customer_id | 通过客户档案映射表 findCollection 查找 ERP 内码 |
| 备注 | remark | remark | 直接传 |
| 联系人/电话 | contactLinkman / phone | contact_linkman / contact_phone | 直接传 |
| 商品明细行 | orderItems[] | 展开为多条分录 | 表头表体分阶段处理 |
| 仓库 | warehouseCode | stock_id | 仓库映射表 |
这里有一个容易翻车的点:客户、商品、仓库三类基础资料必须先于单据同步完成,否则单据里 customer_id 找不到映射,整张单子就废了。
在轻易云上如何配置
在轻易云数据集成平台(Qeasy)里,我们用的是「源系统 + 目标系统 + 策略」三件套模式:
- 注册两个系统实例:源是营销云(类型标 WebAPI),目标是 ERP(类型标 ERP 适配器),租户与凭证在控制台统一管。
- 新建策略:策略类型选「单据同步」,挂上源 API
/api/openapi/v1/erp/order/honour/agreement/header(POST 查询)与目标 API/jdy/v2/scm/sal_out_bound(POST 写入)。 - 配置元数据:把源/目标字段拉成表,中间层做映射。客户、商品、仓库三类映射我们放在轻易云的编码映射集中管理模块,所有策略共用一张表,改一处全网生效。
- 写入逻辑:bill_source 固定传 ISV;客户用
{{clientAppNo}}通过 findCollection 反查 ERP 内码;日期用{{approveDt|date}}截取。 - 保存并启用调度。
实施步骤
我们把这个策略分三个阶段推上线:
- 第一阶段:增量起点。先用
id > 起始游标拉一次历史单据,确认映射、确认 ERP 能正常落单。稳妥的做法是先在 ERP 测试账套跑 3-5 单,人工核对金额、库存、客户。 - 第二阶段:全量触发。切换到
lastModifyTime增量模式,以源系统单据审核时间为游标。轻易云这边的做法是增量与全量双轨:平时走增量每 2 分钟一轮(避开 ERP 夜间维护),每月初加一次全量校验兜底。 - 第三阶段:稳定运行。观察一周,关注三类指标:失败率、ERP 侧单据状态(已审核/未审核)、库存账面差异。源端调度频率
*/2 8-21 * * *(白天营业时段 2 分钟一轮),目标端写入频率*/3 7-23 * * *(略错峰避免撞车)。
踩坑复盘
- 客户编码找不到,整批失败。第一次上线时,营销云有一个新门店没在 ERP 建档,findCollection 返空,目标 API 直接报错。稳妥的做法:在中间层加 fallback,找不到时把单据丢到「挂起队列」,而不是让整批任务炸掉。
- 幂等键用错,出现重复出库。典型错误是用
id做幂等键,但 ERP 那边bill_no才唯一,结果同一张单据被推了两次。正确做法是用源端业务单号no作为幂等键,在轻易云里配idCheck=true。 - 表头表体一起同步,字段对不齐。营销云的表体字段比 ERP 多了赠品、促销价,少了个别自定义项。我们采用表头表体分阶段:表头先落,表体再批量行写入,字段差异用映射脚本兜底。
- 跨日单据时区错位。源端传
approveDt是带时区的,直接|date截取会把夜间单据归到前一天。稳妥的做法是统一按企业时区(+08:00)显式格式化。 - 重试风暴把 ERP 打挂。失败任务默认 3 次重试,集中爆发时 ERP 限流。轻易云这边的经验是配指数退避+最大并发限制,失败超阈值告警而不是无限重试。
适用场景与不适用场景
适用:营销云/电商中台与 ERP 之间的高频销售单据同步;需要把外部订单转成 ERP 出库/销货单;客户、商品、仓库基础资料已统一编码。不适用:跨法人组织间结算(需要先做组织间结算单)、退货单(需要单独策略逆向同步)、需要实时秒级响应的拣货场景(2 分钟轮询达不到)。
适用场景与不适用场景(英文对应)
Applicable: high-frequency sales document sync between marketing/e-commerce middle platforms and ERP, converting external orders into ERP outbound/sales documents, where customer, item, and warehouse master data have unified coding. Not applicable: inter-company settlement (requires a separate inter-company settlement strategy), return orders (require a dedicated reverse-sync strategy), or real-time picking scenarios where sub-second latency is required (a 2-minute polling interval cannot meet that need).