【发布时间】:2020-07-24 08:32:44
【问题描述】:
采用以下 JSON。它是一个对象数组。
[
{
"objects": [
{
"saleItems": [
{
"itemID": 1,
"saleItemType": "Sale",
"productCode": "072",
"legacyProductCode": "1071",
"legacyCategoryCode": "1071",
"categoryCode": "1071",
"subCategoryCode": "101",
"amount": 12,
"originalAmount": 15,
"netAmount": 10,
"originalNetAmount": 12.5,
"vat": 2.5,
"unitVAT": 1,
"vatRate": 20,
"unitMeasure": "EA",
"unitPrice": 15,
"quantity": 1,
"saleChannel": 0
}
]
}
]
},
{
"objects": [
{
"saleItems": [
{
"itemID": 1,
"saleItemType": "Sale",
"productCode": "072",
"legacyProductCode": "1071",
"legacyCategoryCode": "1071",
"categoryCode": "1071",
"subCategoryCode": "101",
"amount": 12,
"originalAmount": 15,
"netAmount": 10,
"originalNetAmount": 12.5,
"vat": 2.5,
"unitVAT": 1,
"vatRate": 20,
"unitMeasure": "EA",
"unitPrice": 15,
"quantity": 1,
"saleChannel": 0
}
]
}
]
},
{
"objects": [
{
"saleItems": [
{
"itemID": 1,
"saleItemType": "Sale",
"productCode": "072",
"legacyProductCode": "1071",
"legacyCategoryCode": "1071",
"categoryCode": "1071",
"subCategoryCode": "101",
"amount": 12,
"originalAmount": 15,
"netAmount": 10,
"originalNetAmount": 12.5,
"vat": 2.5,
"unitVAT": 1,
"vatRate": 20,
"unitMeasure": "EA",
"unitPrice": 15,
"quantity": 1,
"saleChannel": 0
}
]
}
]
}
]
此数据的示例输出需要是:
{
"sales": {
"saleItems": [
{
"saleChannel": "1",
"categoryCode": "1071",
"productCode": "072",
"salesAmountIncludingTax": 11.79,
"salesAmountExcludingTax": 9.82,
"discountAmountIncludingTax": 1.0,
"discountAmountExcludingTax": 0.83,
"salesQuantity": 10.0
}
],
"totalSalesAmountIncludingTax": 11.79,
"totalSalesAmountExcludingTax": 9.82,
"totalSalesQuantity": 10.0
},
"refunds": {
"refundItems": [
{
"saleChannel": "1",
"categoryCode": "1010",
"productCode": "033",
"refundAmountIncludingTax": 11.79,
"refundAmountExcludingTax": 9.82,
"discountAmountIncludingTax": 1.0,
"discountAmountExcludingTax": 0.83,
"refundQuantity": 10.0
}
],
"totalRefundAmountIncludingTax": 11.79,
"totalRefundAmountExcludingTax": 9.82,
"totalRefundQuantity": 10.0
}
}
复杂性在于聚合/总计。例如:
在有效负载数组的每个元素中,必须有一个基于值的值聚合。每个对象都包含 saleItems 对象数组。如果 saleChannel = 0 和 saleItemType = "Sale" 并且 productCode = "X"(以前没有见过),这意味着 productCode = X 的每个 saleItem 的值必须“求和”。
示例:因此对于前 2 个对象,productCode 可能为“001”。这意味着必须合计这些值。第三个对象 productCode 可以是“002”,必须在输出的 saleItems 数组中创建一个新对象。
示例:(如果 saleItemType = "Refund",如果基于 if 语句的退款也可以这样)
"sales": {
"saleItems": [
{
productCode 001
salesAmountIncludingTax: **The sum of "amount" field, if saleChannel = 0 && saleItemType = "Sale**
},
{
productCode 002
}
]
}
数值的合计必须遵循这个逻辑:
if saleChannel = 0
group by subCategoryCode
salesAmountIncludingTax = sum(saleItems.amount where saleItemType="Sale")
salesAmountExcludingTax = sum(saleItems.netAmount where saleItemType="Sale")
if saleChannel != 0
group by productCode
salesAmountIncludingTax = sum(saleItems.originalAmount where saleItemType="Sale")
salesAmountExcludingTax = sum(saleItems.originalNetAmount where saleItemType="Sale")
【问题讨论】:
-
嘿,杰克,您是否错过了输入中的
productCode: 033? -
您的示例所有产品代码都相同。关于如果你有
[pc=1,id =A, pc=1, id=B,pc=2,id=C,pc=1,id=D]这种情况是否可能,如果可以,他们应该如何分组?[sum(A,B), sum(C), sum(D)]或[sum(A,B,D), sum(C)]或[sum(A,B), sum(C)] -
输出中的折扣从何而来?
-
pastebin.com/N5sRvBC9 请检查 pastebin 链接。这就解释了聚合逻辑
标签: dataweave anypoint-studio mulesoft