You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DataWeave实现发货与销售数组的映射及拆分

用DataWeave实现发货项与取消项数组生成

完全可以通过DataWeave 2.x完成这个需求,核心思路是先对销售数据按SKU分组,匹配发货项分配orderItemId,再提取未被分配的销售项生成取消数组。

输入数据定义

先明确示例中的发货数组(shipment)和销售数组(sales):

var shipment = [
    {
        "sku": "0A6910XL",
        "giQty": "1.000",
        "pickedQty": "1.000",
        "requiredQty": 0,
        "externalItemNumber": "14303087"
    },
    {
        "sku": "01100M",
        "giQty": "1.000",
        "pickedQty": "1.000",
        "requiredQty": 0,
        "externalItemNumber": ""
    }
]

var sales = [
    {
        "sku": "06910XL",
        "quantity": 1,
        "orderItemId": "14303087"
    },
    {
        "sku": "01100M",
        "quantity": 1,
        "orderItemId": "14303088"
    },
    {
        "sku": "01100M",
        "quantity": 1,
        "orderItemId": "14303089"
    }
]

核心转换代码

// 按SKU分组销售数据,快速定位对应SKU的所有orderItemId
var groupedSales = sales groupBy $.sku

// 处理发货项:为externalItemNumber为空的项分配orderItemId
var processedShipment = shipment map (item) -> {
    (item) when item.externalItemNumber != ""
    otherwise do {
        var skuSales = groupedSales[item.sku] default []
        var assignedOrderId = skuSales[0].orderItemId default ""
        item ++ { externalItemNumber: assignedOrderId }
    }
}

// 收集所有已分配的orderItemId,用于筛选取消项
var assignedOrderIds = processedShipment.pluck($.externalItemNumber) filter ($ != "")

// 生成取消项数组:过滤未被分配的销售项,映射为要求的格式
var cancellationItems = sales 
    filter !(assignedOrderIds contains $.orderItemId)
    map (saleItem) -> {
        sku: saleItem.sku,
        giQty: "1.000",
        pickedQty: "1.000",
        requiredQty: 0,
        externalItemNumber: saleItem.orderItemId
    }

// 输出最终结果
{
    "发货项数组": processedShipment,
    "取消项数组": cancellationItems
}

逻辑说明

  1. 分组销售数据:用groupBy将销售项按SKU归类,后续可以快速找到对应SKU的所有orderItemId。
  2. 处理发货项:遍历发货数组,保留已有externalItemNumber的项;对空值项,从对应SKU的分组销售数据中取第一个可用的orderItemId赋值。
  3. 筛选取消项:提取所有已分配的orderItemId,过滤销售数组中未被匹配的项,再映射为要求的取消项格式。

输出结果

运行代码后,输出完全符合预期:

{
  "发货项数组": [
    {
      "sku": "0A6910XL",
      "giQty": "1.000",
      "pickedQty": "1.000",
      "requiredQty": 0,
      "externalItemNumber": "14303087"
    },
    {
      "sku": "01100M",
      "giQty": "1.000",
      "pickedQty": "1.000",
      "requiredQty": 0,
      "externalItemNumber": "14303088"
    }
  ],
  "取消项数组": [
    {
      "sku": "01100M",
      "giQty": "1.000",
      "pickedQty": "1.000",
      "requiredQty": 0,
      "externalItemNumber": "14303089"
    }
  ]
}

内容的提问来源于stack exchange,提问作者maomifadacai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:52:49