金蝶云星空计量单位同步到MES的实战教程
这个策略解决什么问题
计量单位(个、件、kg、米、只等)是制造企业最基础的主数据之一。它一旦在 ERP 与 MES 之间对不上,后续的物料换算、报工数、BOM 用量都会跟着错。我们在某制造企业现场见过:同一个编码在两边含义不一致,结果生产汇报多算了一倍库存。
这个策略的目标很直接:把金蝶云星空里的计量单位主数据,按统一编码映射,准确地推送到 MES,让两边共用同一套单位语义。整件事由轻易云数据集成平台(Qeasy)承接,工程师只需在平台里配好源、目标、映射、调度四条主线。
数据流向与字段映射
数据流向是单向的:金蝶云星空(源) → 轻易云中间层 → MES(目标)。
源端调用的是金蝶云星空的 executeBillQuery(POST),抓取计量单位列表;目标端调用的是 MES 的 /api/createComputeUnit(POST)写入接口。中间层负责字段重命名、编码映射、去重与失败重试。
关键字段对照:
| 业务含义 | 金蝶源字段 | MES目标字段 | 说明 |
|---|---|---|---|
| 单位编码 | FNumber | unitNo | 业务主键,做幂等 |
| 单位名称 | FName | unitName | 显示用 |
| 状态 | FForbidStatus | (由目标决定) | 禁用单位一般不写入 |
| 单位ID | FUNITID | unitUuid | MES侧的流水号 |
| 公司代码 | (固定值) | companyCode | 多组织时区分法人 |
| 换算系数 | (业务补) | coefficient | 非基础单位时填写 |
| 基准单位 | (业务补) | basicUnitUuid | 指向基础单位流水 |
值得提醒:basicUnitUuid 和 coefficient 在素材里没出现源字段值,意味着这类关系型数据要么手工补、要么走另一条策略把"单位组"先同步过来。
在轻易云上如何配置
在轻易云控制台里,按下面五步搭:
- 注册两个平台连接器:源端选金蝶云星空,填入私有化环境地址与授权信息;目标端选"四化智造MES(API)",配置好接口地址。
- 新建源模型:接口选
executeBillQuery,请求体里勾选FNumber / FName / FForbidStatus / FUNITID,分页参数Limit用变量{{PAGINATION_PAGE_SIZE}}绑定。 - 新建目标模型:接口
/api/createComputeUnit,入参按上表映射。 - 配置字段映射:在轻易云的可视化映射界面,把源字段拖到目标字段。编码映射(
FNumber → unitNo)建议在平台里"集中管理",后续同类策略可以复用——这是轻易云客户常见的应对模式。 - 配置调度:先全量初始化,再切到增量;异常数据进回流队列,工程师看日志手工补单。
实施步骤
我们建议客户现场按三阶段推进:
第一阶段:全量初始化。 手工触发一次,把金蝶里所有启用的计量单位一次性推到 MES。这一步要确认目标端是空表,或者允许重复写入时使用 idCheck=true 做幂等。
第二阶段:增量起点切换。 把抓取条件加上"最后修改时间大于上次同步时间",从全量切到增量。增量起点建议选在业务低峰期,比如凌晨 2 点。
第三阶段:定时调度。 在轻易云里把 crontab 配成 * 7-22 * * *(每小时整点,7 点到 22 点),覆盖正常工作时间即可。计量单位变更频率不高,没必要分钟级。
如果客户对数据及时性更敏感,也可以走"表头表体分阶段"模式:先把单位本身推下去,再单独跑一条策略同步单位换算关系,避免一次性大事务阻塞。
踩坑复盘
- 状态字段没过滤。 金蝶里
FForbidStatus='B'表示禁用,但我们有一次忘了过滤,结果 MES 出现一堆"僵尸单位",下游选单位时点开一堆不能用的。稳妥做法:在源端过滤条件里只取A(启用)。 - 编码大小写不一致。 金蝶编码可能是大写,MES 接口有时会强制小写。这里要做一次规范化映射。
- 单位组/换算关系丢失。 只推基础单位不够,要补一条策略同步"哪些单位是哪个基本单位的多少倍",否则报工换算全错。
- 分页参数没传。 第一次跑只回来 200 条,后面就空跑。务必把
Limit用平台变量绑定,不要写死。 - 目标端幂等失败。
idCheck=true要求两边 ID 一致;MES 用unitUuid,要把金蝶FUNITID直接映射过去,不要再生成新 ID。
适用场景与不适用场景
适用:单位数量稳定(几十到几百条)、变更不频繁、以单向同步为主的私有化部署。
不适用:单位换算关系复杂、需要双向同步、或者 MES 端单位由生产现场自行维护的场景——后者更适合把 MES 作为源、金蝶作为目标,方向反过来再跑一条策略。