Grails中的月份分组

Grails中的月份分组,grails,groovy,Grails,Groovy,我有两个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 war

我有两个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,你知道如何实现吗?
谢谢大家。

您可以使用
groupBy

grouped = transfers.groupBy { it.transferDate.month }
然后你可以迭代分组的元素

您可以将其置于
TransactionMaster
s
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
            }
        }
    }
}

首先,我应该在哪里键入此代码?在transactionmaster.groovy或transfer.groovy |中,当值到达新月份时,如何使其再次从零开始?例如,7月份的数字是0049,8月份的数字应该是0001,而不是0050,但感谢您的回答,先生:)它显示错误:HTTP状态500-创建名为“org.grails.internal.SESSION\u FACTORY\u HOLDER”的bean时出错:无法创建类型为“internal bean”(internal bean)的bean[org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean]设置bean属性“sessionFactory”时;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“(内部bean)的bean时出错#4”:调用init方法失败;嵌套异常为org.hibernate.InstantiationException:无法实例化test objectcom.revengtest.TransactionMaster除此之外,我将自动编号的代码放在Transfer.Groovy中,而不是TransactionMaster.Groovy中,也许您又有了解决方案,先生?谢谢您之前..嗯,作为Transfer的编号ers依赖于TransactionMaster保留的集合中的其他传输,最好是从那里调用编号例程,因为您必须记住循环中的编号状态。您可能会从每次传输中引用TransactionMasters Transger集合,但这不是一个好主意。