我必须跟踪每个会计年度的连续提交。鉴于2015财年'那么编号应该是2015,2015002,2015003等等。
我已经定义了一个域类来跟踪这些设置:
class MYAPPConfig {
String fiscalYear
Integer requestCount
static constraints = {
fiscalYear (size: 4..4, nullable: false)
requestCount(max: 999, nullable: false)
}
}
我们的想法是,在新的财政年度,我会添加一条新记录和“请求帐户”。将重置为0(或1,取决于Grails想要如何管理它)。
理想情况下,此字段应映射到Oracle序列字段。如果那不可能,那么我应该在服务方法中管理增量逻辑吗?
我的Grails版本是2.4.2
感谢。
答案 0 :(得分:1)
我明白了。
我采取了不同的路线(更多谷歌搜索后)。我将dateCreated
添加到我的模型中,该模型由Grails管理,因此会自动更新。因此,我需要做的就是获取最新日期的记录(每年我们将为下一个会计年度添加新记录)。记下调用结束时的[0]
,它会使返回的数组变平,并允许我处理单个对象。
我的模特现在看起来像这样( MYAPPConfig.groovy ):
class MYAPPConfig {
String fiscalYear
Integer requestCount
Date dateCreated
static constraints = {
fiscalYear (size: 4..4, nullable: false)
requestCount(max: 999, nullable: false)
}
}
我创建了以下服务( ManageRequestsService.groovy )
import grails.transaction.Transactional
@Transactional
class ManageRequestService {
def getNextTrackingId() {
def latestConfig = MYAPPConfig.listOrderByDateCreated(max:1, order: "desc")[0]
def latestFiscal = latestConfig.fiscalYear
Integer sequence = latestConfig.requestCount
sequence++
latestConfig.requestCount = sequence
latestConfig.save(flush:true)
return latestFiscal + sprintf('%03d', sequence)
}
}
在我的控制器( MyTestController.groovy )中,我有:
class MyTestController {
def manageRequestsService
def test() {
def trackingId = manageRequestsService.getNextTrackingId()
render "Next id is: ${trackingId}"
}
}
提供以下输出(http://localhost:8080/MYAPP/myTest/test
):
下一个ID是:2015001
刷新页面!
下一个ID是:2015002
再次刷新!
下一个ID是:2015003