Drools: правило drl для проверки, соответствует ли массив объекта X определенным правилам, и тогда сумма результирующего массива атрибута должна быть больше y - PullRequest
0 голосов
/ 18 июня 2019

Хотелось бы узнать подход к написанию правила для приведенной ниже ситуации

КОГДА корзина содержит записи с кодом продукта «123», «234» или «345» и суммой количестваколичество записей этого продукта (которое соответствует вышеуказанным критериям кода продукта: «123», «234» или «345») превышает 5, ТО печатать сообщение

Я смог сделать это с помощью функции частично,проверяется только один код продукта, который слишком жестко запрограммирован.

Хотел узнать, возможно ли достичь той же логики в условии когда без использования функций

function boolean newFunction(Cart cart ,Integer allowed){
 List<CartEntries>  filteredList = cart.getEntriesList().stream().filter(e -> e.getProduct().getCode().equals("123")).collect(Collectors.toList());

 double quantity = filteredList.stream().mapToDouble(CartEntries::getQuantity).sum();
 if(quantity >allowed)
   return true;
 else
   return false;
}

rule "cartCheck"
  when
   cart : Cart( )
   eval(newFunction(cart,5))
  then
  System.out.println("Warning! cart is running out!");
end

Используемые модальности

public class Cart {
    List<CartEntries> entriesList;

    public List<CartEntries> getEntriesList() {
        return entriesList;
    }

    public void setEntriesList(List<CartEntries> entriesList) {
        this.entriesList = entriesList;
    }

}

public class CartEntries {
    private Product product;

    private Integer quantity;

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
}

public class Product {

    private String code;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
...