我有一个包含交易的 Json 数组。基本上,在这里我试图过滤掉具有等额付款的记录(收到的付款的日期应该大于退回/撤回的付款的日期)。
示例输入:
[
{
"CreatedDate": "2023-11-05T23:56:34.000Z",
"payment": "76.25",
"invNum": {
"Name": "OB-0153834"
},
"type": "Payment - Received"
},
{
"CreatedDate": "2023-11-05T00:05:18.000Z",
"payment": "-76.25",
"invNum": {
"Name": "OB-0153834"
},
"type": "Payment - Refunded"
},
{
"CreatedDate": "2023-11-06T00:47:30.000Z",
"payment": "-45.0",
"invNum": {
"Name": "OB-0153837"
},
"type": "Payment - Reversed"
},
{
"CreatedDate": "2023-11-06T00:26:07.000Z",
"payment": "110.0",
"invNum": {
"Name": "OB-0153837"
},
"type": "Payment - Received"
},
{
"CreatedDate": "2023-11-06T00:43:46.000Z",
"payment": "45.0",
"invNum": {
"Name": "OB-0153837"
},
"type": "Payment - Received"
},
{
"CreatedDate": "2023-11-02T18:59:18.000Z",
"payment": "50.0",
"invNum": {
"Name": "OB-0153817"
},
"type": "Payment - Received"
}
]
预计:
[
{
"CreatedDate": "2023-11-02T18:59:18.000Z",
"payment": "50.0",
"invNum": {
"Name": "OB-0153817"
},
"type": "Payment - Received"
},
{
"CreatedDate": "2023-11-06T00:26:07.000Z",
"payment": "110.0",
"invNum": {
"Name": "OB-0153837"
},
"type": "Payment - Received"
}
]
筛选条件:
同名
过滤掉具有相同金额但带有“-”符号的记录集(即应过滤掉相同金额的76和-76)并在同一日期创建。
带有 - 值的记录应在 + 值之后有日期。
你提到了3件事
根据您的示例,以下条件失败,因为创建日期 2023-11-05T00:05:18.000Z 不大于 2023-11-05T23:56:34.000Z
[
{
"CreatedDate": "2023-11-05T00:05:18.000Z",
"payment": "-76.25",
"invNum": {
"Name": "OB-0153834"
},
"type": "Payment - Refunded"
},
{
"CreatedDate": "2023-11-05T23:56:34.000Z",
"payment": "76.25",
"invNum": {
"Name": "OB-0153834"
},
"type": "Payment - Received"
}
]
DW
我按
paymentNumber ++ - ++ Name
分组,因为我们想消除匹配姓名的匹配付款号码
%dw 2.0
output application/json
---
flatten(
(payload orderBy($.payment as Number)
groupBy (($.payment replace "-" with "")++"-"++($.invNum.Name)) pluck $)
filter(item,index)->
!(((("-" ++ item.payment[1]) default "") == ((item.payment[0]) default ""))
and (((item.CreatedDate[1]) default "") < ((item.CreatedDate[0]) default ""))
and (((item."type"[1]) default "") == "Payment - Received" and ((item."type"[0]) default "") != "Payment - Received")))
注意 - > 请验证此条件。我不能百分百确定这是否是您所期望的。
(((item.CreatedDate[1]) default "") < ((item.CreatedDate[0]) default ""))