Не удается найти подходящий метод - JIRA / Groovy - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь подсчитать, сколько времени проблема потратила на статус. Но испытывают некоторые ошибки. Сценарий ниже переходит в поле сценария. Ниже мой сценарий:

import com.atlassian.jira.component.ComponentAccessor

def changeHistoryManager = ComponentAccessor.changeHistoryManager
def currentStatusName = issue?.status?.name

def rt = [0L]
changeHistoryManager.getChangeItemsForField (issue, "status").reverse().each {item ->

    def timeDiff = System.currentTimeMillis() - item.created.getTime()
    if (item.fromString == currentStatusName) {
        rt = -timeDiff
    }
    if (item.toString == currentStatusName){
        rt = timeDiff
    }
}
return (Math.round(rt.sum() / 3600000)) as Double

Ошибка в последней строке скрипта (оператор возврата). Я не уверен, что я делаю не так.

Я получаю следующие ошибки:

Проверка статического типа - не удается найти соответствующий java.lang.Object # sum () и не удается найти соответствующий метод java.lang.Match # round (java.lang.Object)

1 Ответ

0 голосов
/ 25 апреля 2018

Вы присваиваете rt лонгу в двух if блоках. (Просто long, а не массив long.) Следовательно, метод .sum() недоступен.

Вы можете использовать

rt << -timeDiff
// or
rt << timeDiff

чтобы добавить ваши timeDiffs в массив, а не переопределять его.

Вы также можете просто инициализировать rt как 0, а затем использовать rt += timeDiff или rt -= timeDiff, если хотите. Не похоже, что вам действительно нужно это для существования в виде массива.

Пример, который может работать для вас:

import com.atlassian.jira.component.ComponentAccessor

def changeHistoryManager = ComponentAccessor.changeHistoryManager
def currentStatusName = issue?.status?.name

def rt = 0L
changeHistoryManager.getChangeItemsForField (issue, "status").reverse().each {item ->

    def timeDiff = System.currentTimeMillis() - item.created.getTime()
    if (item.fromString == currentStatusName) {
        rt -= timeDiff
    }
    if (item.toString == currentStatusName){
        rt += timeDiff
    }
}
return rt / 3600000
// this could still be Math.round(rt/3600000) as Double if you need that; not sure what you're trying to do with the actual result
...