Поиск значений с помощью динамических искателей для двух полей в граалях - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь выполнить поиск с использованием динамических искателей для двух полей: status и OpenOn (дата).

render(view:'list', model:[incidentInstanceList:Incident.findAllByStatusIlikeAndOpenOnGreaterThan("closed",new Date()-7,[sort:"id",order:"desc"])]) 

Приведенный выше запрос выполняет поиск за последние 7 дней, но я хочу выполнить поискза "последнюю неделю", а не за последние 7 дней.Как я могу это сделать?

1 Ответ

1 голос
/ 26 августа 2011

Вы можете захотеть что-то вроде этого:

def lastWeek
use(org.codehaus.groovy.runtime.TimeCategory) {
    lastWeek = new Date() - 1.week
}

render(view:'list', model: [incidentInstanceList: Incident.findAllByStatusIlikeAndOpenOnGreaterThan( "closed", lastWeek, [sort:"id", order: "desc"])] )

UPDATE:

import java.util.Calendar
import groovy.time.TimeCategory

def roundToLastMonday(date) {
    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) - cal.get(Calendar.DAY_OF_WEEK) + Calendar.MONDAY)
    cal.getTime()
}

def getLastWeekRange() {
    def startDate, endDate
    use(TimeCategory) {
      startDate = roundToLastMonday(1.week.ago)
      endDate = startDate + 1.week - 1.second
    }
    [startDate, endDate]
}

def range = getLastWeekRange()
def result = Incident.withCriteria {
    like ("status", "closed")
    between ("open", range[0], range[1])
}
render(view:'list', model: [incidentInstanceList: result]
...