我有2个groovy格式的文件。
首先是Transfer.Groovy
package com.revengtest
class Transfer {
Date dateCreated
Date lastUpdated
Date transferDate
String number
Float latitude
Float longitude
TransactionMaster transactionMaster
Warehouse warehouseSource
Warehouse warehouseDest
String reffNo
String toString() { return number }
static hasMany = [transferItems: TransferItem]
static belongsTo = [TransactionMaster, Warehouse]
static mapping = {
version false
}
static constraints = {
transferDate nullable: true
number nullable: true, maxSize: 45
longitude nullable: true
latitude nullable: true
}
//this is the code to automatic create the number in transfer
def beforeInsert(){
Integer count= Transfer.count()+1
Integer width= transactionMaster.width
String c = sprintf("%0${width}d",count)
number = transactionMaster.code+"/"+c
}
}
接下来是TransactionMaster.groovy
package com.revengtest
class TransactionMaster {
static constraints = {
numbering(inList:["Monthly","Yearly"])
}
String code
Date dateCreated
Date lastUpdated
String name
String numbering
Integer width
TransferType transferType
String toString() { return name }
static hasMany = [transfers: Transfer]
static belongsTo = [TransferType]
}
在这里,我从我的网站获得了图片
这是交易主页
这是转移页面 - >
现在问题是,我希望月份更改时数字返回0001,所以如果日期是2013-08-14,那么数字应该从0001开始。 在我的代码中它仍然是0003,任何想法如何实现它? 谢谢你们。
答案 0 :(得分:0)
您可以使用groupBy
:
grouped = transfers.groupBy { it.transferDate.month }
然后你可以迭代分组元素。
您可以将其放在TransactionMaster
beforeUpdate
和/或beforeInsert
方法中。
def beforeInsert() {
grouped.each { month, transfers ->
if(transfers.size() == 1) {
transfers[0].number = "0001"
} else {
transfers.eachWithIndex { t, idx ->
t.number = "${idx}".padLeft(4,"0") // will prepend zeros before number
}
}
}
}