销售订单状态回写实战:用友YS采购入库单到小满CRM备货完成的同步方案
这个策略解决什么问题
在一个销售订单全链路里,CRM侧负责接单与客户跟进,ERP侧负责采购入库与库存确认。订单什么时候算"备货完成",本来由ERP里的采购入库单说了算,但业务员每天在CRM里反复询问仓库,效率很低。这条策略要做的就是:一旦用友YS的采购入库单完成,就把销售订单在小满OKKICCRM里打上"备货完成"标记,让一线与后台看到同一份事实。
数据流向与字段映射
整体流向是「用友BIP(采购入库单)→ 轻易云集成平台 → 小满OKKICRM(销售订单状态)」。
| 字段含义 | 源:用友YS采购入库单 | 中间层(轻易云) | 目标:小满销售订单 |
|---|---|---|---|
| 业务单据号 | 采购入库单号 | 原值透传 | 关联的销售订单号 |
| 行项目号 | 入库单行号 | 拼接为"订单号+行号" | 订单行号 |
| 入库状态 | 审核标志/入库完成标志 | 归一化为布尔或枚举 | 备货完成(custom字段) |
| 入库数量 | 实际入库数量 | 与销售订单数量比对 | 写入备货数量或备注 |
| 入库日期 | 业务日期 | 格式化 | 备货完成时间 |
| 关联销售订单号 | 源头携带或回查 | 关键关联键 | 主键匹配 |
关键点在于"关联销售订单号":用友YS的入库单不一定直接带销售订单号,往往需要通过采购订单或行项目反查。我们在轻易云里用集中维护的编码映射表来管理这种跨系统关联,避免在脚本里散落硬编码。
在轻易云上如何配置
第一步,注册源系统连接器,指向用友BIP的采购入库单接口(通常是按单查询或按增量时间戳拉取),并配置目标端的写接口。
第二步,在轻易云的「字段映射」中按上表做一对一映射,重点处理两件事:入库状态的枚举归一化、关联销售订单号的多级回查。建议把关联查询封装成自定义函数,复用到同一方案里其他几条策略。
第三步,写入策略启用幂等控制:同一条入库单多次触发不会在小满侧重复更新。轻易云默认带幂等键(源单据号+行号),一般不需要额外开发。
第四步,启用运行日志与异常告警。私有化环境里,轻易云的对接通常会写到内网日志中心,建议把"目标接口调用失败"、"关联订单号未找到"这两类异常单独路由,方便值班同事一眼定位。
实施步骤
我们把这个策略拆成三段式调度,与客户现场经验一致。
第一阶段:全量初始化。 项目上线当天跑一次全量,把历史已完成的入库单对应到现有销售订单上。全量跑完立即停掉,避免重复触发。
第二阶段:增量起点对齐。 记录全量结束时刻的时间戳,作为增量起始点。轻易云支持按"最后修改时间>=起始点"过滤增量。
第三阶段:高频增量调度。 调度频率设在5分钟一次。私下与客户沟通时,有人问"要不要做成实时"?我们一般不建议——5分钟既能满足业务感知,又能在网络抖动时保留重试窗口。如果业务确实对延迟敏感,可以压到1分钟,但要在轻易云里把并发与限流参数调高。
三个阶段切换前,必须在测试环境跑通,再用同一份配置在生产触发。
踩坑复盘
坑一:关联订单号找不到。 采购入库单的源头如果是手工录入的采购订单,而不是直接由销售订单转过来的,关联就会断。稳妥做法是在轻易云的映射中心里同时维护"采购订单号→销售订单号"的中间表,并设置人工兜底任务。
坑二:枚举值不一致。 用友侧可能是"01/02/03",小满侧要"是/否"或"完成/未完成"。典型错误是直接在脚本里写if-else散落各处。建议在轻易云里建一张统一的枚举映射表,所有策略共用,改一处即生效。
坑三:时区与日期格式。 私有化部署下,源和目标系统时区未必一致,日期格式也不同。看似小问题,但月末跨天时容易漏单。我们在轻易云的全局参数里固定了"业务日期"取数规则,并在日志里打印原始与归一化后的值,便于排查。
坑四:回写触发风暴。 一个销售订单对应多张入库单,全部完成后状态被覆盖多次。严格意义上不影响最终结果,但小满侧的活动流会被刷屏。我们的处理方式是只在状态由"未完成"切换为"完成"的边界写一次,靠轻易云的"目标字段当前值"做条件判断。
坑五:权限。 用友侧的查询接口需要专门的单据权限,初始化时只给了一个账号,结果发现部分组织的入库单查不到。补账号后即恢复,但这种权限问题在测试环境不容易暴露。
适用场景与不适用场景
适用:CRM与ERP需要状态联动、业务强依赖"备货完成"这类客观信号、组织愿意维护一套轻量级映射规则的场景。不适用:订单行项目数量特别大且每行都需独立状态、多组织多账套需要复杂权限隔离,或者业务对"备货完成"的定义本身就不统一的场景。