【发布时间】:2016-12-07 09:39:33
【问题描述】:
我刚开始写drools规则,想出了这个:
rule "Premium to high."
when
PricingResponse($netPremium : this.getTotalNetPremium(),
$paymentTerm : this.getPaymentTerm().getMonths());
$newPremium : BigDecimal() from $netPremium.multiply($paymentTerm);
$currentPremium : BigDecimal();
BigDecimal($newPremium.divide($currentPremium, MathContext.DECIMAL128) > 1.2B);
then
insert(new Validation("New premium " + $newPremium + " (" + $netPremium +
" * " + $paymentTerm + ") " +
" is larger than 120% of the current premium " +
$currentPremium, Department.K_EN_A));
end
上面的drools 规则是有效的。但是,对于我正在解决的问题,LHS 似乎有点复杂,所以我的问题是它可以写得更简单吗?如果有,怎么做?
PricingResponse 和一个BigDecimal 对象被插入到KieSession 中。并且在触发规则后,将检索所有 Validation 对象。我认为一个非常标准的规则问题。在PricingResponse 对象中有一个BigDecimal totalNetPremium 属性和一个“PaymentTerm paymentTerm”属性。我想验证 paymentTerm 和 totalNetPremium 的乘积是否大于作为BigDecimal 插入的原始保费的 120%。 PaymentTerm 类是和enum,它有一个BigDecimal month 属性。
【问题讨论】:
标签: drools