Я новичок в Drools, и я использую Drools 7.12.0, чтобы попытаться проверить набор показаний счетчиков, который выглядит как
public class MeterReading() {
private long id;
private LocalDate readDate;
private int value;
private String meterId
private boolean valid;
/* Getters & Setters omitted */
}
В рамках проверки мне нужно сравнить значениякаждого MeterReading с его непосредственным предшественником readDate.
Сначала я попытался использовать «накопить»
when $mr: MeterReading()
$previousDate: LocalDate() from accumulate(MeterReading($pdate: readDate < $mr.readDate ), max($pdate))
then
System.out.println($mr.getId() + ":" + $previousDate);
end
, но затем обнаружил, что это возвращает только дату предыдущего чтения счетчика, а не объектаэто содержит это.Затем я попробовал пользовательское накопление с помощью
when
$mr: MeterReading()
$previous: MeterReading() from accumulate(
$p: MeterReading(id != $mr.id),
init( MeterReading prev = null; ),
action( if( prev == null || $p.readDate < prev.readDate) {
prev = $p;
}),
result(prev))
then
System.out.println($mr.getId() + ":" + $previous.getId() + ":" + $previous.getReadDate());
end
, но при этом выбирается самое раннее чтение из набора показаний счетчика, а не непосредственный предшественник.Может ли кто-нибудь указать мне правильное направление относительно того, что я должен делать или читать, чтобы иметь возможность выбрать непосредственного предшественника для каждого отдельного показания счетчика.
С уважением