领星辅料到金蝶物料的主数据同步:轻易云实战教程
这个策略解决什么问题
辅料主数据从领星ERP推到金蝶云星空,看似只是「换张表」,但一旦编码映射和描述口径没设计好,3 个月后两边对账就会错位。我们用轻易云数据集成平台(Qeasy)承接这条策略,目标是把辅料 SKU、名称、报关规格等基础资料稳定、低时延地落到目标系统,作为后续采购、销售、库存链路的前置条件。
数据流向与字段映射
整体流向为:领星ERP(源,按创建时间增量拉取辅料列表)→ 轻易云中间层(字段映射、编码补齐、清洗)→ 金蝶云星空物料(目标,batchSave 写入)。
关键字段对照表(仅列代表性字段):
| 语义 | 源端(领星辅料接口) | 中间层处理 | 目标端(金蝶物料 batchSave) |
|---|---|---|---|
| 唯一编码 | sku | 直接透传,作为唯一键 | FNumber |
| 物料名称 | product_name | 直接透传 | FName |
| 描述/规格 | declaration.customs_declaration_spec | 透传,必要时兜底空串 | FDescription |
| 创建组织 | — | 常量 100 | FCreateOrgId |
| 使用组织 | — | 常量 100 | FUseOrgId |
| 源系统内部 id | id | 仅作为幂等键参考 | — |
| 拉取窗口 | create_time_start/end | 用 {{LAST_SYNC_TIME}} / {{CURRENT_TIME}} 维护 | — |
补充说明:源端 id 与目标端 id 都设为 0,配合 idCheck=true 由目标系统按编码判重,这是金蝶物料去重的稳妥做法。
在轻易云上如何配置
在 Qeasy 上把这条策略拆成「源数据源 + 目标数据源 + 集成流」三块配置,典型要点如下。
- 源数据源(领星ERP):API 选
/erp/sc/routing/data/local_inventory/productAuxList,方法 POST,类型 WebAPI,作用 QUERY。请求体固定offset=0、length=100,时间窗用变量{{LAST_SYNC_TIME}}与{{CURRENT_TIME}}。开启autoFillResponse,避免手写响应结构。 - 目标数据源(金蝶云星空):API 选
batchSave,方法 POST,类型 EXECUTE。请求体里FCreateOrgId、FUseOrgId用常量 100,FNumber、FName、FDescription通过变量绑定源字段。 - 集成流编排:拉取 → 字段映射 → 批量提交 → 写日志。编码映射建议在轻易云里「集中管理」:单独建一张映射表,专门处理特殊字符、空值兜底、长度截断,轻易云客户常见做法是把这类映射抽成可复用节点,方便后续「领星-产品—》金蝶-物料」等同类策略复用。
- 幂等与去重:依靠目标系统按编码判重(
idCheck=true),中间层只做轻量校验,不做硬去重,避免重复写入被误拦截。
实施步骤
我们建议分三阶段上线。
第一阶段:增量起点。先跑一次「按创建时间」的全量回溯,把历史辅料一次性灌入金蝶;灌完后再切到「按 {{LAST_SYNC_TIME}} 起、{{CURRENT_TIME}} 止」的增量窗口。源端 crontab 58 0 * * *,目标端 59 0 * * *,源在前、目标在后,自然形成「先拉后写」的串行节拍。
第二阶段:全量触发。每周固定一次(如周日 02:00)触发一次全量对账,把增量期间可能漏掉的数据补齐。轻易云上把全量触发单独配一个定时器即可,与日常增量并行。
第三阶段:调度频率稳定化。日常增量保持每日一次即可;辅料主数据变更频率通常不高,过密反而放大接口压力。一旦上游领星批次切到小时级,再同步把 crontab 调成每小时。
踩坑复盘
- 描述字段为空直接报错。源端
declaration.customs_declaration_spec偶尔为空,目标端FDescription又是必填。这里容易翻车,稳妥做法是在中间层做空串兜底,而不是让 batchSave 整批失败。 - 编码大小写不一致。领星侧 SKU 多为大写,金蝶侧历史上混入小写会导致「同物不同码」。典型错误是直接透传,正确做法是在映射层统一转大写并去前后空格。
- 页长 100 的隐藏分页。源端接口默写
length=100,但很多同学忘了分页,单次只拿到前 100 条且不报错。应在轻易云里打开自动分页,按返回字段判断是否继续拉取。 - 组织常量写死。
FCreateOrgId/FUseOrgId直接写常量 100,多组织客户一旦换组织就要全量重配。较稳的做法是用变量绑定组织字典,按物料所属组织动态传入。 - 增量起点没记录。第一次上线时没保留
LAST_SYNC_TIME的初始值,结果第二次跑就漏了一批数据。我们现在每次运行结束后把CURRENT_TIME落库作为下次起点。
适用场景与不适用场景
适用:辅料/成品 SKU 数量在万级、变更频率以「天」计、目标系统需要按编码判重的供应链集成。 不适用:需要实时秒级同步的物料状态、跨多语言多币种复杂规格、以及目标系统不开放 batchSave 写入的私有部署。