找不到匹配的方法--JIRA / Groovy

时间:2018-04-25 15:09:04

标签: groovy jira

我正在尝试计算问题在状态中花费的时间。但遇到一些错误。下面的脚本进入脚本字段。以下是我的剧本:

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

错误位于脚本的最后一行(return语句)。 我不确定我做错了什么。

我得到的错误是:

  

静态类型检查 - 找不到匹配的java.lang.Object#sum()并且找不到匹配方法java.lang.Match #round(java.lang.Object)

1 个答案:

答案 0 :(得分:1)

您正在两个rt块中将if分配给一个Long。 (只是一个很长的,而不是一长串的。)因此,没有.sum()方法可用。

您可以使用

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

将timeDiff添加到数组中而不是重新定义它。

您也可以将rt初始化为0,然后根据需要使用rt += timeDiffrt -= 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