我正在尝试计算问题在状态中花费的时间。但遇到一些错误。下面的脚本进入脚本字段。以下是我的剧本:
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)
答案 0 :(得分:1)
您正在两个rt
块中将if
分配给一个Long。 (只是一个很长的,而不是一长串的。)因此,没有.sum()
方法可用。
您可以使用
rt << -timeDiff
// or
rt << timeDiff
将timeDiff添加到数组中而不是重新定义它。
您也可以将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