使用 Mule4 dataweave 根据条件从 JSON 数组中过滤出对象

问题描述 投票:0回答:1

我有一个包含交易的 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"
    }
]

筛选条件:

  1. 同名

  2. 过滤掉具有相同金额但带有“-”符号的记录集(即应过滤掉相同金额的76和-76)并在同一日期创建。

  3. 带有 - 值的记录应在 + 值之后有日期。

filter mule dataweave mulesoft mule4
1个回答
0
投票

你提到了3件事

  1. 姓名匹配
  2. 正负号匹配
  3. 如果点 2 匹配,则其 - CreatedDate 应大于 + CreatedDate

根据您的示例,以下条件失败,因为创建日期 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 ""))

© www.soinside.com 2019 - 2024. All rights reserved.