如何通过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 }
逻辑说明
- 分组销售数据:用
groupBy将销售项按SKU归类,后续可以快速找到对应SKU的所有orderItemId。 - 处理发货项:遍历发货数组,保留已有
externalItemNumber的项;对空值项,从对应SKU的分组销售数据中取第一个可用的orderItemId赋值。 - 筛选取消项:提取所有已分配的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
相关产品推荐
相关产品推荐

