Правила редактирования для списка сотрудников - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я внедряю this для моего проекта.

Мне нужно добавить правило для "не более четырех смен в неделю на сотрудника". Я новичок в Java и слюни. Есть ли простой способ отредактировать приведенное ниже правило, чтобы оно соответствовало искомому ограничению?

rule "At most one shift assignment per day per employee"
when
    $s : Shift(
            employee != null,
            $e : employee,
            $leftDay : startDateTime.toLocalDate())
    Shift(
            employee == $e,
            startDateTime.toLocalDate() == $leftDay,
            this != $s)
then
    scoreHolder.addHardConstraintMatch(kcontext, -10);
end

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете попытаться использовать накопить

Ваше правило может выглядеть следующим образом (я не проверял его, но оно должно указывать вам правильное направление):

rule "At most four shift assignment per week per employee"
when
    $shiftWeek: ShiftWeek() //assuming this is some kind of problemfact you have in your session
    $employee: Employee()
    $count: Number(intValue() > 4) //conditional, only fire rule when $count > 4
        from accumulate(
            $shift: Shift(
                $employee == employee,
                $shiftWeek == shiftWeek
            ),
            count($shift)
        )
then
    scoreHolder.addHardConstraintMatch(kcontext, 4 - $count.intValue()); //You could also just do "- $count.intValue()", but I like the constraint match to start at -1
end
...