我試圖通過在連接時間和每次調用的退出時間將新的Date值傳遞給應用程序來獲取基於Web的電話調用的持續時間。檢查Groovy/Grails中的已用時間
代碼看起來有點像這樣:
class Call {
Date startTime = new Date()
Date endTime = new Date()
String callLength = ""
String Id = UUID.randomUUID()
}
class callController {
def connected = {
callInstance = Call.findById(params.Id)
//Id params are passed through from external voice call
Call.executeUpdate("update Call a set a.startTime=? where a.Id='${params.id}'", [new Date()])
}
def callEnded = {
callInstance = Call.findById(params.Id)
Call.executeUpdate("update Call a set a.endTime=? where a.Id='${params.id}'", [new Date()])
timeHandler(callInstance.endTime, callInstance.startTime)
}
def timeHandler = {end, start->
TimeDuration duration = TimeCategory.minus(end, start)
Call.executeUpdate("update Call a set a.callLength='$duration' where a.Id = '${params.id}'")
}
}
編輯:代碼稍有編輯以產生更好的輸出。
編輯2:
我在Call對象上爲startTime和endTime創建了變量。但是,現在我無法更新日期 - 我想呢,Grails不喜歡更新日期?它說它無法將新日期傳遞給日期變量。這是確切的錯誤:
java.lang.ClassCastException: [Ljava.util.Date; cannot be cast to java.util.Date
和Stacktrace指向我嘗試更新調用的行。有沒有解決方法?
再次感謝!
編輯3:
修復了正確的代碼。
感謝大家的幫助!
Re:編輯2嘗試'executeUpdate(query,[new Date()])',列表中的參數。但不是'executeUpdate',是否有理由不更新域對象並保存? – ataylor
謝謝!在你提到它之前,我實際上已經實施了這個改變,但它確實解決了一切。爲什麼我選擇使用executeUpdate沒有什麼真正的原因,而不是我習慣於使用它的事實。會更新 - >保存更快完成? –