销售出库单同步实战:金蝶云星空到小蜜蜂WMS
这个策略解决什么问题
某制造企业的销售流程是这样的:销售订单和发货指令在金蝶云星空里跑,仓库实物出库在小蜜蜂WMS里完成。两边都有出库单据,但来源不同——云星空是业务侧的发货凭证,WMS是实物侧的执行凭证。
实际项目里常见的情况是:销售内勤在云星空做完发货登记后,仓库并不知道该拣哪些货、按什么顺序、交给谁;而仓库拣完货做的出库确认,又得有人手动回填到云星空,库存和应收才走得动。
这条策略干的事就是:以云星空的销售出库单为驱动,把出库指令按既定节奏推到WMS,WMS执行完毕后回传结果。中间件由轻易云数据集成平台承接,调度、字段映射、幂等校验都在平台里配。
数据流向与字段映射
数据流向:金蝶云星空(销售出库单)→ 轻易云中间层 → 小蜜蜂WMS(线下出库订单)。
源端通过云星空的 executeBillQuery 接口查询销售出库单,目标端通过WMS的 /outOrders/v4_1 接口写入线下出库订单。关键字段对照如下:
| 业务含义 | 金蝶云星空字段 | WMS字段 | 备注 |
|---|---|---|---|
| 单据编号 | FBillNo | outOrderNo | 主键,用于幂等 |
| 单据类型 | FBillTypeID_FNumber | collectionType 等 | 映射到收款/业务类型 |
| 日期 | FDate | orderDate | 出库业务日期 |
| 销售组织 | FSaleOrgId_FNumber | shipperCode | 货主编码由组织映射 |
| 客户 | FCustomerID_FNumber | customerCode | 编码映射集中管理 |
| 仓库 | FBranchId_FNumber | houseCode | 仓库编码映射 |
| 表体明细 | FEntity 系列 | orderLines | 分阶段处理 |
轻易云客户的常见做法是把编码映射(客户、组织、仓库、物料)抽成独立的映射表,单独维护。这样业务系统字段调整时,只改映射表,不动主链路。
在轻易云上如何配置
第一步,建数据源连接。在轻易云数据集成平台里分别注册金蝶云星空和小蜜蜂WMS两个数据源,私有化环境填内网地址,账号走密钥托管,不要在策略里硬编码。
第二步,配置源端查询。云星空侧用 executeBillQuery,按单据类型筛选销售出库单,把 FBillNo、FDate、FSaleOrgId_FNumber、FCustomerID_FNumber、FBranchId_FNumber 这些字段都勾上。表头的过滤条件里建议加 FDocumentStatus='A'(已审核),避免把草稿态的单子推下去。
第三步,配目标端写入。WMS侧接口是 /outOrders/v4_1,POST写入。表头字段(outOrderNo、houseCode、shipperCode 等)直接映射,表体行项目走轻易云的表体解析器。
第四步,配置映射和脚本。编码映射用轻易云的查表组件,把云星空的 FSaleOrgId_FNumber 映射成 WMS 的 shipperCode。表头表体的关系键用 FBillNo ↔ outOrderNo。
第五步,启用幂等。WMS的 outOrderNo 设唯一约束,重跑不会重复建单。轻易云的策略里把 idCheck 打开,回写失败的单子会进重试队列。
实施步骤
第一阶段:全量回灌。 项目上线初期,先做一次历史数据全量。把云星空近 N 个月已审核的销售出库单全部查出来,按 FBillNo 升序推到 WMS。这一步是打地基,轻易云里配置一个手动触发的全量任务即可,不需要走定时。
第二阶段:增量起点。 全量完成后,记录下最后一个 FBillNo 或最后修改时间,作为增量起点。轻易云的增量策略从这一点开始往后捞新单。
第三阶段:双轨运行。 上线后建议保留 1-2 周双轨。轻易云跑新链路,老链路(如果有)继续跑,每天对账——两边 FBillNo 一致、数量一致、状态一致,发现差异立刻查。
第四阶段:切换与定时调度。 双轨没问题后,切换到新链路为唯一通道。调度频率建议 0-59/5 * * * *(源端)和 3-59/5 * * * *(目标端错峰),每 5 分钟跑一次。源端取整分钟,目标端偏移 3 分钟,避免同一时刻两边同时抢占资源。
踩坑复盘
-
草稿态单子被推下去。 没加
FDocumentStatus='A'过滤,把未审核的销售出库单也推到了WMS,仓库拣完货结果云星空那边审核驳回了,两边状态对不上。稳妥做法:源端查询条件里硬性卡死已审核状态。 -
编码映射散落在策略里。 客户编码、组织编码映射直接写在字段转换脚本里,业务系统一调整组织架构,二十条策略全部要改。典型错误是把映射当字段处理。正确做法是用轻易云的映射表组件集中维护,策略只引用不写死。
-
表头表体一起推导致回滚困难。 表头推到WMS成功了,但表体某一行校验失败,整单回滚,仓库那边已经看到半条单子。常见应对模式是分阶段:先把表头推下去占位,再异步推表体行,最后做一次完整校验。
-
调度时间撞车导致丢单。 源端和目标端都设
0-59/5,在同一分钟窗口同时跑,单子进了源端队列但目标端还没处理完上一批,堆积。建议目标端偏移几分钟,错峰执行。 -
幂等键没用对。 拿
FEntity_FENTRYID当幂等键,结果表头改了行项目没改,WMS重复建行。幂等键必须用业务主键FBillNo,不能拿分录ID。
适用场景与不适用场景
适用:销售订单和仓库执行解耦的两套系统、云星空做业务单据WMS做实物执行、双方都有标准接口、需要近实时同步、对账要求高的零售或制造企业。
不适用:业务和实仓在同一个系统里(直接走系统内功能即可);WMS没有 outOrders 这类出库接口,只能靠Excel导入;或者业务方对延迟容忍度高(小时级),没必要上5分钟调度。