各通話の接続時と終了時に新しい Date 値をアプリケーションに渡すことで、Web ベースの通話時間を取得しようとしています。
コードは次のようになります。
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:
startTime と endTime の Call オブジェクトに変数を作成しました。しかし、今は日付を更新するのに問題があります.Grailsは日付を更新するのが好きではありません. 新しい日付を日付変数に渡すのに問題があると言っています。これは正確なエラーです:
java.lang.ClassCastException: [Ljava.util.Date; cannot be cast to java.util.Date
Stacktrace は、呼び出しを更新しようとしている行を指しています。これに対する回避策はありますか?
再度、感謝します!
編集3:
正しいコードで修正。
助けてくれてありがとう!