Dataweave фильтрует вложенные массивы и отображает их в порядке убывания

Я пытаюсь отфильтровать массив на основе некоторых значений, вложенных в объекты.

Мои данные относятся к предложениям (массив), клиентам (массив) с билетами (массив) и другим дочерним массивам. Я хочу, чтобы orderBy получил всю информацию о клиентах, заказанную по последней временной метке (атрибут в массиве билетов)

Из примера в предложении 1 есть клиент 50001 с билетами 1001, 1002 и клиент 50002 с билетами 1003, 1004. Я хочу, чтобы клиент, у которого есть последняя метка времени во всех доступных билетах, отображался первым: (Порядок выписки) со всеми остальными пассажирами заказал соответственно.

Запрос полезной нагрузки:

{
    "count": 1,
    "offers": [{
        "offerInfo": {
            "orderNumber": "1",
            "orderCreationDtTime": "2023-01-10 00:00:00"
        },
        "customers": [{
                "customerInfo": {
                    "name": {
                        "frstNm": "JOHN",
                        "lstNm": "DOE"
                    }
                },
                "customerNum": "50001",
                "tickets": [{
                        "timestamp": "2023-01-07 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1001",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    },
                    {
                        "timestamp": "2023-01-11 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1002",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "3",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "4",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    }
                ]
            },
            {
                "customerInfo": {
                    "name": {
                        "frstNm": "FAN",
                        "lstNm": "SING"
                    }
                },
                "customerNum": "50002",
                "tickets": [{
                        "timestamp": "2023-01-10 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1003",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    },
                    {
                        "timestamp": "2023-01-19 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1004",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    }
                ]
            }
        ]
    }]
}

Ожидание полезной нагрузки после сообщения преобразования:

{
    "count": 1,
    "offers": [{
        "offerInfo": {
            "orderNumber": "1",
            "orderCreationDtTime": "2023-01-10 00:00:00"
        },
        "customers": [{
                "customerInfo": {
                    "name": {
                        "frstNm": "FAN",
                        "lstNm": "SING"
                    }
                },
                "customerNum": "50002",
                "tickets": [{
                        "timestamp": "2023-01-19 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1004",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    },
                    {
                        "timestamp": "2023-01-10 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1003",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    }
                ]
            },
            {
                "customerInfo": {
                    "name": {
                        "frstNm": "JOHN",
                        "lstNm": "DOE"
                    }
                },
                "customerNum": "50001",
                "tickets": [{
                        "timestamp": "2023-01-11 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1002",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "3",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "4",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    },
                    {
                        "timestamp": "2023-01-07 00:38:00.167000",
                        "ticketService": {
                            "ticketNum": "1001",
                            "ticketType": "3"
                        },
                        "ticketReps": [{
                                "seq": "1",
                                "comment": "1st",
                                "location": "US"
                            },
                            {
                                "seq": "2",
                                "comment": "2nd",
                                "location": "US"
                            }
                        ]
                    }
                ]
            }
        ]
    }]
}
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
0
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Скрипт ниже поможет вам.

%dw 2.0
output application/json
import * from dw::util::Values
---
 payload update ["offers","customers"] with (
    (($ map (
        $  update {
                case .tickets ->  ($ orderBy $.timestamp  as LocalDateTime {format : "yyyy-MM-dd HH:mm:ss.SSSSSS"}) [-1 to 0]
        }
    )) orderBy $.tickets[0].timestamp as LocalDateTime {format : "yyyy-MM-dd HH:mm:ss.SSSSSS"}) [-1 to 0]
 )

Решение с использованием оператора обновления для каждого шага и вспомогательных функций для наглядности.

%dw 2.0
output application/json
fun convertTimestampToNumber(t)=t as LocalDateTime {format: "yyyy-MM-dd HH:mm:ss.SSSSSS"} as String {format: "yyyyMMddHHmmssSSSSSS"} as Number
fun getMaxTimestamp(t)=max(t map convertTimestampToNumber($.timestamp))
---
payload update {
    case offers at .offers -> 
        offers map ($ update {
            case customers at .customers ->    
                customers map ($ update {
                    case tickets at .tickets ->  tickets orderBy ( -convertTimestampToNumber($.timestamp) )
                })
                orderBy ( -getMaxTimestamp($.tickets) )
            }
        )
}

Выход:

{
  "count": 1,
  "offers": [
    {
      "offerInfo": {
        "orderNumber": "1",
        "orderCreationDtTime": "2023-01-10 00:00:00"
      },
      "customers": [
        {
          "customerInfo": {
            "name": {
              "frstNm": "FAN",
              "lstNm": "SING"
            }
          },
          "customerNum": "50002",
          "tickets": [
            {
              "timestamp": "2023-01-19 00:38:00.167000",
              "ticketService": {
                "ticketNum": "1004",
                "ticketType": "3"
              },
              "ticketReps": [
                {
                  "seq": "1",
                  "comment": "1st",
                  "location": "US"
                },
                {
                  "seq": "2",
                  "comment": "2nd",
                  "location": "US"
                }
              ]
            },
            {
              "timestamp": "2023-01-10 00:38:00.167000",
              "ticketService": {
                "ticketNum": "1003",
                "ticketType": "3"
              },
              "ticketReps": [
                {
                  "seq": "1",
                  "comment": "1st",
                  "location": "US"
                },
                {
                  "seq": "2",
                  "comment": "2nd",
                  "location": "US"
                }
              ]
            }
          ]
        },
        {
          "customerInfo": {
            "name": {
              "frstNm": "JOHN",
              "lstNm": "DOE"
            }
          },
          "customerNum": "50001",
          "tickets": [
            {
              "timestamp": "2023-01-11 00:38:00.167000",
              "ticketService": {
                "ticketNum": "1002",
                "ticketType": "3"
              },
              "ticketReps": [
                {
                  "seq": "3",
                  "comment": "1st",
                  "location": "US"
                },
                {
                  "seq": "4",
                  "comment": "2nd",
                  "location": "US"
                }
              ]
            },
            {
              "timestamp": "2023-01-07 00:38:00.167000",
              "ticketService": {
                "ticketNum": "1001",
                "ticketType": "3"
              },
              "ticketReps": [
                {
                  "seq": "1",
                  "comment": "1st",
                  "location": "US"
                },
                {
                  "seq": "2",
                  "comment": "2nd",
                  "location": "US"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Другие вопросы по теме