查询WMS未维护物料重量订单接口字段手册:从MySQL到钉钉提醒的实战教程
这个接口解决什么问题
在WMS出库环节,经常会出现物料主数据里「毛重」未维护或为0的订单——这类订单到了物流计费、重量校验环节就会出问题。常见做法是定期从MySQL出库订单库中把这类异常明细捞出来,推送到钉钉机器人提醒运营及时补全物料重量。这个接口就是为这种「订单数据质量巡检」场景设计的纯查询能力。
接口能力总览
- 数据源:MySQL(私有化部署,WMS出库订单库)
- 请求方式:POST,方法为
select(MySQL直连查询) - 策略类型:QUERY(仅查询,结果推送至钉钉机器人,不写入目标系统)
- 关联表:
outbound_order(o,出库订单主表)、outbound_orderitem(oi,出库订单明细表)、base_goods(g,物料基础表) - 过滤条件:
o.createTime >= :realTime AND o.houseId = '指定仓库ID' AND (g.grossWeight IS NULL OR g.grossWeight = '0') - 增量模式:按
createTime增量查询,使用:realTime占位符 - 执行频率:crontab
0-59/10 * * * *,每10分钟跑一次 - 响应结构:标准MySQL二维结果集,metadata中
id为主键、number为业务编码
典型字段映射
| 字段名 | 类型 | 含义 | 实战注意事项 |
|---|---|---|---|
| outOrderItemId | string | 出库订单明细主键,行内码唯一标识 | 作为metadata的id配置项,用于增量同步去重 |
| outorderno | string | 出库订单业务编号 | 作为metadata的number,推送钉钉时映射到提醒消息的number字段 |
| goodsCode | string | 商品编码,对应base_goods主数据 | 推送钉钉时映射到problem字段,提示需维护哪个物料 |
| goodsName | string | 商品名称 | 推送钉钉时映射到solution字段,便于人工快速识别 |
| outTaskNo | string | 出库任务编号 | response配置字段,真实场景中常与outorderno等价映射 |
| createTime(筛选) | datetime | 出库订单创建时间 | 增量查询锚点,使用:realTime占位符 |
| houseId(筛选) | string | 仓库ID | 硬编码限定仓库,避免跨仓数据混入 |
| grossWeight(筛选) | decimal/string | 物料毛重 | 判空条件必须同时覆盖IS NULL和'0'两种情况 |
在轻易云上如何配置
在轻易云数据集成平台里,这类MySQL直连的查询接口通常用「数据库适配器」封装。配置时主要关注三点:
- 数据源配置:填入MySQL连接信息(库名、账号、读权限账号即可),平台会自动生成
select请求模板。 - SQL模板:在轻易云的「自定义SQL」步骤里写入三表JOIN语句,把
:realTime作为参数传入,增量值由平台根据上一次成功时间自动维护。轻易云的字段映射器会自动把metadata中的id对应到outOrderItemId、number对应到outorderno。 - 目标端推送:钉钉机器人在轻易云里有内置的「消息推送」组件,把查询结果用
{{outorderno}}、{{goodsCode}}、{{goodsName}}这三个变量拼装成提醒消息即可,无需额外写代码。
跨方案实战要点
从多个客户的MySQL+金蝶云星空销售订单集成方案里提炼出以下共性经验:
- 三表JOIN是标配:订单明细缺重量,必须关联主表拿订单号、关联物料表拿重量,没有捷径。
- NULL和'0'必须同时判:物料主数据里重量字段类型不统一,有的存NULL,有的存字符串'0',过滤条件漏一个就会漏数据。
- 仓库ID硬编码要慎重:真实场景中不同客户用不同houseId,建议把仓库ID抽成参数,便于多仓切换。
- 增量锚点用createTime而非updateTime:出库订单一旦创建很少改动,用createTime增量稳定;updateTime反而会被各种无关更新干扰。
- 每10分钟一次足够:这种巡检类查询不要求实时,10分钟间隔既能及时发现问题,还不会给MySQL造成压力。
- 钉钉提醒要带「可操作信息」:光推订单号没意义,必须带上商品编码和商品名称,运营才能直接定位去维护。
踩坑复盘
-
坑一:grossWeight类型不一致 有的物料存的是decimal
0.00,有的是字符串'0',还有的是NULL。稳妥的做法是过滤条件写成(g.grossWeight IS NULL OR CAST(g.grossWeight AS CHAR) = '0' OR g.grossWeight = 0),把三种情况全覆盖。 -
坑二:仓库ID漏配导致全仓扫描 早期方案没限定houseId,结果把其他仓库的订单也捞进来,钉钉消息爆炸。务必在SQL里硬编码
o.houseId = '具体仓库ID'。 -
坑三:增量时间窗口重叠 每10分钟跑一次,但MySQL时区和服务器时区可能差8小时,导致同一批订单被重复推送。建议统一使用服务器时区,并在轻易云里开启「按主键去重」。
-
坑四:钉钉消息频率超限 一个批次可能捞出几百条明细,钉钉机器人单群消息频率有上限。稳妥的做法是在轻易云里加一个聚合步骤,把同一订单号的明细合并成一条消息。
-
坑五:物料已删除但订单仍在
base_goods里的物料被物理删除后,LEFT JOIN会丢记录。稳妥的做法是用LEFT JOIN+IS NULL判断,但同时把oi.goodsId作为兜底,确保能定位到问题订单。
何时选用
适用场景:WMS物料主数据治理、出库订单重量校验、物流计费前置检查、钉钉机器人定时巡检。不适用:需要实时重量校验的高频计费场景(应改用重量校验接口而非巡检查询),以及物料重量已100%维护的成熟WMS。