Grails中的月份分组

时间:2013-07-17 05:51:35

标签: grails groovy

我有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]


}

在这里,我从我的网站获得了图片

这是交易主页master page

这是转移页面 - > transfer page

现在问题是,我希望月份更改时数字返回0001,所以如果日期是2013-08-14,那么数字应该从0001开始。 在我的代码中它仍然是0003,任何想法如何实现它? 谢谢你们。

1 个答案:

答案 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
            }
        }
    }
}