Я новичок в Drools, но хотел использовать его для дела, которое мне нужно решить.
В основном мои правила должны делать следующее:
- Отфильтровать заданный исходный (полный) список местоположений, доступный только для чтения, на основе заданного расстояния до текущего местоположения человека
- Создайте новый список с местоположениями в пределах заданного радиуса расстояния
- Передайте этот новый список следующему правилу
- Отфильтруйте новый список местоположений по определенному заголовку
- Создайте новый список с местоположениями (теперь отфильтрованный по расстоянию и заголовку)
Итак, я хочу связать несколько правил ... сначала сделайте это, создайте новый список с результатами, используйте новый список в следующем правиле, выполните дальнейшую фильтрацию по нему, создайте новый список с еще большим количеством отфильтрованных элементов ... и так далее .. .
Честно говоря, как упоминалось ранее, я абсолютно застрял и подумал, что могу получить дополнительную информацию ...
Мое первоначальное правило, которое я придумал, выглядит так:
package com.acme.rulesets
import com.acme.domain.TopLocation
import com.acme.domain.Person
import com.acme.storage.LocationContainer
import com.acme.helper.GeoHelpers
rule "Get by Distance"
salience 10
when
$allLocations: LocationContainer()
$person: Person()
$loc: TopLocation() from $allLocations.getAllLocations()
then
double distance = GeoHelpers.getInstance().getHaversineInMiles($person.getLat(), $person.getLon(), $loc.getLat(), $loc.getLon());
System.out.println($loc.getTitle() + " -- distance in miles to person: " + distance);
end;
Это далеко не то, чего я хочу достичь ... но, возможно, вы можете дать несколько намеков ...
Итак, прежде всего я думаю, что мне нужно вызвать мой статический java-метод (который просто вычисляет расстояние между двумя заданными точками) в LHS правила, но как только я (пытаюсь) сделать это, он не может скомпилировать правило. Затем мне нужно использовать результат $ dist, чтобы определить, нужно ли эту текущую запись поместить в новый список (как я могу: а. Создать новый список и б.) Поместить в него текущую запись?) .. ... а затем следующим логическим шагом будет создание нового правила «Получить по заголовку местоположения» с более высокой значимостью и использование нового отфильтрованного списка. Так что, в конце концов, когда я вернусь на сторону java, я могу взять все списки из рабочей памяти и проделать с ними дальнейшие действия.
Да, я знаю, мои вопросы могут быть довольно глупыми ... но я не смог найти ничего, из чего я мог бы вывести свой вариант использования.
Однако заранее спасибо.