Возьмите следующий 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 (ранее не встречался), это означает, что должно быть суммирование значений для каждого saleItem, для которого productCode = X.
Пример. Итак, для первых двух объектов может быть productCode 001. Это означает, что эти значения должны быть суммированы. Третьим объектом productCode может быть 002, новый объект должен быть создан в массиве вывода saleItems.
Пример: (то же самое может быть и для возвратов, если операторы if основаны на saleItemType = Refund)
"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")