Нам нужно отфильтровать записи по дате последнего изменения для каждого номера (пример: DB1902718), но не со статусом отмены, как в примере - PullRequest
0 голосов
/ 21 апреля 2020

Вход:

{
  "files-list": [
    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902717-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-16T12:26:37"
    },
    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902718-CANCELLED-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-17T12:26:38"
    },
    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902718-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-16T12:26:35"
    },
    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902719-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-18T12:26:39"
    },
     {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902719-CANCELLED-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-17T12:26:39"
    },
     {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902719-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-16T12:26:39"
    }
  ]
}

Выход:

{
  "files-list": [

    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902717-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-16T12:26:37"
    },
    {
      "fileName": "esp/outbound/poacks/b2bi/input/ESP-Load-DB1902719-COMPLETE-20200415155427_115768.xml",
      "fileSize": 2001,
      "lastModified": "2020-04-18T12:26:39"
    }
  ]
}

Я создал несколько dw, но не смог получить точный результат. Пожалуйста, найдите ниже, что я попробовал с моей стороны:

%dw 2.0 
output application/json 
fun splitByLoadNumber(aString) = ((aString splitBy "/")[5] splitBy "-")[2] 
fun isCancelled(item) = item contains( "CANCELLED" )
var orderedData={ "files-list": payload."files-list" orderBy ((record,index) -> (record.lastModified)) groupBy splitByLoadNumber($.fileName) pluck $ map $[-1] } 
--- 
"files-list":orderedData."files-list"

1 Ответ

0 голосов
/ 21 апреля 2020

Вы были почти там. Вам просто нужно отфильтровать по статусу.

Пример:

%dw 2.0 
output application/json 
fun splitByLoadNumber(aString) = ((aString splitBy "/")[5] splitBy "-")[2] 
fun isCancelled(item) = item contains( "CANCELLED" )
var orderedData={ "files-list": payload."files-list" orderBy ((record,index) -> (record.lastModified)) groupBy splitByLoadNumber($.fileName) pluck $ map $[-1] } 
--- 
"files-list":orderedData."files-list" filter !isCancelled($.fileName)

Обратите внимание, что моя проверка статуса несколько наивна. Я просто проверяю имя файла на строку CANCELED. Если формат имени файла фиксирован, вы можете выполнить более строгую проверку, которую я рекомендую.

...