即时库存状态转换同步实战:从 MySQL 到金蝶云星空的库内检策略
这个策略解决什么问题
在某制造企业的供应链现场,车间 MES 每天会产出大量「库存状态转换」业务——比如把待检品从「待检库位」转到「合格库位」、把不良品转到「隔离库位」。这些动作落到金蝶云星空里,对应的是一张「库存状态转换单」。
如果靠人工在金蝶里手工建单,一天几百条,既慢又容易漏;如果让 MES 直连金蝶的接口,两边耦合重,出问题相互甩锅。我们用轻易云数据集成平台(Qeasy)承接中间层,MySQL 的接口表出多少,平台就推多少,金蝶只管接单。下面把这一个策略讲透。
数据流向与字段映射
整体流向:MySQL 接口表 → 轻易云中间层 → 金蝶云星空 batchSave。源端是一张典型的接口中间表,目标端是金蝶的库存状态转换单据。
关键字段对照(源 → 目标):
| 业务含义 | MySQL 源字段 | 金蝶目标字段 | 备注 |
|---|---|---|---|
| 来源主键 | iface_id | — | 仅做幂等去重 |
| 单据编号 | 自拼接 MKCZHD+日期+batch_id | FBillNo | 源端已生成,目标端 idCheck=true |
| 单据日期 | 账期表比较后取 aft_quiet_time | FDate | 注意结账时点 |
| 单据类型 | instruction_doc_type | FBillTypeID | 需做编码映射 |
| 业务类型 | 固定 '0' | FBizType | 字典项 |
| 库存组织 | inventory_org | FStockOrgId | 编码映射 |
| 货主类型 | consignor_type | FOwnerTypeIdHead | 字典项 |
| 货主 | consignor_org | FOwnerIdHead | 编码映射 |
| 明细行号 | line_num | FEntity_FEntryId | 行号 |
| 转换类型 | convert_type | FConvertType | 字典项 |
| 物料编码 | material_code | FMaterialId | 编码映射 |
| 单位 | uom_code | FUnitId | 编码映射 |
| 转换数量 | convert_qty | FQty | 数值 |
| 仓库 | warehouse_code | FStockId | 编码映射 |
| 库存状态 | inventory_status | FInventoryStatus | 编码映射 |
单据头与单据体在源端是同一张表的字段,通过 line_num 区分;到金蝶侧,头和体要拆开落字段,这正是轻易云做「表头表体分阶段」处理的典型场景。
在轻易云上如何配置
源端用 WebAPI 的 select 类型,写一条带 :limit、:offset 的动态分页 SQL,平台按页拉取,翻页到底后自动停。main_params 负责把 limit、offset 绑进去,避免拼接注入。
目标端用金蝶云星空的 batchSave,idCheck=true,意思是金蝶会用 FBillNo 去重——这刚好和源端拼接的 MKCZHD+日期+batch_id 对上,断点续传就不会重复落单。
编码映射集中管理是轻易云给企业客户最常用的一套打法:把库存组织、物料、单位、仓库、库存状态这些编码,统一放到一张映射表里维护,源端代码一变,只改一处,不用动每个策略。这也是踩坑最少的方式。
实施步骤
- 增量起点确认:第一次上线前,在 MySQL 接口表里按
status in ('N','E')取一批历史数据,标记一个creation_date起点;上线后,平台按主键iface_id增量推进,已经推成功的改成 'S',失败的留 'E' 等下次重试。 - 全量触发:初始化当天手动跑一次全量,把积压的 N、E 数据清空。
- 调度频率:源端定时任务
3,13,23,33,43,50 * * * *,也就是每 10 分钟一档、整点附近加跑一档,既保证时效,又错开整点高峰。目标端金蝶侧*/1 * * * *每分钟轮询拉取平台中转队列,做到「源端攒批、目标端秒级接单」。 - 失败重试:平台默认会对 5xx、网络超时做退避重试;业务校验失败(如编码缺失)进死信队列,人工介入。
- 结账期处理:单据日期用
aft_quiet_time兜底,避免把单据推到已结账期间。
踩坑复盘
- 单据编号别让金蝶自己生成。源端已经按
MKCZHD+日期+batch_id拼好了,如果金蝶再按自家规则生成,两边对不上,后续对账全乱。稳妥的做法是源端生成、目标端 idCheck 去重。 - 库存状态编码不能写死字符串。比如「合格」「待检」「隔离」在不同组织下编码可能不同,集中映射表维护,千万别散落在策略里。
- 明细行号必须传。金蝶的库存转换单表体需要行号做幂等键,不传会导致整单被当成新增重复落。
- 结账时点别忽略。直接把
creation_date当单据日期,月底结账时容易把单据推到已结账期间,金蝶直接拒收。aft_quiet_time是兜底关键。 - 分页越界要稳。
:limit :offset分页,翻到末页返回空集是正常,别当成失败重试把队列打满。
适用场景与不适用场景
适用:MES/ERP 间需要把库存状态转换、调拨、调整类业务单据高频同步到金蝶云星空,日单量从几百到几万均能稳定承接。
不适用:跨组织、多货主、需要审批流的复杂转换业务;以及源端接口表本身数据质量不过关、字段经常缺失的场景——这种先把源端治理好再谈同步,否则平台只是把脏数据更快地搬到金蝶里。