金蝶云星空采购订单交期回复回写 MES:单策略深度实战教程
MySQL金蝶云星空采购订单交期回写MES供应链
这个策略解决什么问题
在制造业里,采购员在金蝶云星空里下完单,供应商把回复交期填回去之后,MES 这边要立刻看到——只有这样,车间排产、齐套检查、来料计划才能往下走。我们这次的策略只做一件事:从金蝶云星空按单据号查明细,把"销售回复交期"和"销售订单二次交期回复"写回 MES 的采购订单行表。听起来很轻,但交期回写这类小链路往往是供应链数字化的"最后一公里"。
数据流向与字段映射
流向:金蝶云星空(源)→ 轻易云数据集成平台(中间编排与映射层)→ MySQL MES 库(目标)。
源侧关键字段(金蝶云星空 executeBillQuery):
| 字段 | 含义 | 用途 |
|---|---|---|
FBillNo | 单据编号 | 主键 / 定位 |
FPOOrderEntry_FEntryID | 采购订单明细 ID | 行级定位,写回用 |
F_ReplyDeliveryDateBySale | 销售订单交期回复 | 待回写值 1 |
F_ReplyDeliveryDate2BySale | 销售订单二次交期回复 | 待回写值 2 |
目标侧 SQL(MySQL WebAPI execute):
update ty_mes.mt_po_line
set REPLY_DELIVERY_DATE=:REPLY_DELIVERY_DATE,
REPLY_DELIVERY_DATE2=:REPLY_DELIVERY_DATE2
where KINGDEE_ENTRYID=:KINGDEE_ENTRYID
映射对应表:
| 源字段(Kingdee) | 目标列(MySQL) | 备注 |
|---|---|---|
FPOOrderEntry_FEntryID | KINGDEE_ENTRYID | 定位行 |
F_ReplyDeliveryDateBySale | REPLY_DELIVERY_DATE | 首次回复 |
F_ReplyDeliveryDate2BySale | REPLY_DELIVERY_DATE2 | 二次回复 |
在轻易云上如何配置
在 Qeasy 平台里,这条策略的形态是"源 Query + 目标 Execute"的组合,配置要点我都习惯这么定:
- 源接口:金蝶云星空的
executeBillQuery,方法 POST,单据号FBillNo作为请求条件,明细 ID 作为返回定位字段。注意把Limit设为 5000,避免一次拉太多行被服务端截断。 - 目标接口:MySQL 的 WebAPI
execute,走main_sql模板,把:REPLY_DELIVERY_DATE、:REPLY_DELIVERY_DATE2、:KINGDEE_ENTRYID三个参数从源数据里塞进去。 - 编码映射:源里的明细 ID 是金蝶内部键,我一般在轻易云的映射层集中维护一份"金蝶 EntryID ↔ MES 行号"的对照,避免每个策略都重写一次 SQL。
- 响应处理:源端
autoFillResponse打开即可,目标端是 UPDATE,没有返回行也正常。
实施步骤
分阶段调度,建议这样铺:
- 首次全量回灌:用一张历史单据号清单做驱动,把近三个月的采购订单交期一次性拉回来,确保 MES 里至少有一份"基准交期"。这一步先于调度上线。
- 增量起点:以系统当前时间为基准,从这一刻开始只处理新增 / 变更的明细。源 Query 用
FBillNo限定本次扫描范围即可。 - 调度频率:源
8,18,28,38,48,58 * * * *(每 10 分钟一次,分钟点 8 偏置),目标9,19,29,39,49,59 * * * *(比源晚 1 分钟)。两次都错开分钟点,是为了让源先落库、目标再追写,避免瞬时竞争。 - 监控与对账:在轻易云的运行日志里盯失败行,把 UPDATE 影响行数 = 0 的行捞出来,往往是
KINGDEE_ENTRYID没对上——也就是接下来要说的踩坑。
踩坑复盘
- EntryID 漂移最常见。典型错误是直接拿金蝶的
FEntryID当目标主键写进去,结果 MES 这边一查对不上。稳妥的做法是:在轻易云里专门维护一张 ID 映射表,源端的FPOOrderEntry_FEntryID只作为回查条件,不直接当业务键写库。 - 空值把 UPDATE 写空了。源里如果交期没填,返回的就是空字符串而不是 NULL,UPDATE 进去会把原本的日期清掉。建议在目标 SQL 里加
WHERE (:REPLY_DELIVERY_DATE IS NOT NULL AND :REPLY_DELIVERY_DATE <> '')之类的过滤,或者在映射层做兜底。 - 调度频率踩点撞车。源和目标都用
*通配的整分钟,遇到大单据时两边并发跑同一行,目标 UPDATE 会被源的前一次读取覆盖。我们当时是把目标整体延后 1 分钟,问题就消失了。 - Limit 截断不报警。金蝶那侧一次最多返回 5000 行,超过就静默截断。看似正常跑完,实则漏了行。稳妥的做法是在轻易云的分页器里显式翻页,或者按
FBillNo切片多次拉。 - 二次交期被忽略。很多项目上线后才发现,
F_ReplyDeliveryDate2BySale这条字段从来没被映射,因为测试数据只填了首次交期。复盘时建议把两条字段都纳入测试用例。
适用场景与不适用场景
适用:金蝶云星空与 MES 都需要采购订单行级交期数据、供应商回复后需要尽快回写、且已有明细 ID 映射基础的制造型项目。
不适用:源端交期字段命名在升级后变更、目标表没有 KINGDEE_ENTRYID 这种稳定定位键,或者需要把整张采购订单(含表头审批流、付款条款)都同步过来的场景——那是另一个层级的策略。
本文为原创内容,转载请注明出处:https://www.qeasy.cloud/insights/solutions/strat-mysql-kingdee-cloud-2246-mom-cgdd-31878dc9