Как сделать, чтобы правило выполнялось как ожидаемый поток в слюнях - PullRequest
1 голос
/ 18 марта 2011

Следующая логика:

if (order.getPrice()<200 ) {  
   order.setPrice(order.getPrice()-10);  
} else {  
   order.setPrice(order.getPrice()-20);  
   if (order.getPrice()<200 ) {  
     //do nothing  
    }else {  
      order.setFreeShip("true");  
    }  
}  

для приведенной выше логики, если я хочу реализовать правило слюни.

rule "rule 1"  
when   
    $o:Order ( amount<200);  
 then   
    $o.setPrice($o.getPrice()-10);  
end  

rule "rule 2"  
when   
    $o:Order (amount>200);  
 then   

    $o.setPrice($o.getPrice()-20);  

end  

Если цена факта равна 210, правило 2 активируется, тогда правило 1 будет запущено. Этого не ожидается. Я не хочу отступать (). Так есть ли лучшее решение для этой проблемы?

И можно ли указать последовательное правило, как только правило будет выполнено как механизм токенов.

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 января 2013

правило "NYuser_Rule"

no-loop true
ruleflow-group "EvalLoopcondition"
when
    m:HelloProcessModel(userlocation in ("NewYorkUser"), count < 4)
then
    m.setLoopcondition(6);update(m);

конец

правило "ChileUser_Rule"

no-loop true
ruleflow-group "EvalLoopcondition"
when
    m:HelloProcessModel(userlocation in ("ChileUser"), count < 3)
then
    m.setLoopcondition(5);update(m);

конец

Нечто подобное может вам помочь.

1 голос
/ 18 марта 2011

Нет, вы не можете указать последовательность только для одного правила или группы правил. Вам нужно будет создать флаг и использовать его в качестве охраны, например:

rule "rule 1"  
when   
    $o:Order ( amount<200);  
    not: Flag(object=$o)
 then   
    $o.setPrice($o.getPrice()-10);  
    insert( new Flag($o) );
end  

rule "rule 2"  
when   
    $o:Order (amount>200); 
    not: Flag(object=$o)
 then   
    $o.setPrice($o.getPrice()-20);  
    insert( new Flag($o) );
end  

и

public class Flag {
  private final Object object;
  public Flag(Object o) {
    this.object = o;
  }

  //add getter for object
  //delegate equals and hashcode to object
}
...