流口水,如何在决策中对列表中的值求和 Table

Drools, how to sum values in a List in a Decision Table

将 v 6.5.0 与决策一起使用 table

我有一个紧凑的 java 模型,因为它完好无损地交付给 Web 前端。因此,用户 class 有一个字段,它是一个帐户数组,每个帐户都有一个总计、金额和日期字段。我已经编写了简单的规则,但这超出了我目前的能力范围。我意识到最好将 Accounts 对象分开并引用用户的 Id,但如果可以不必这样做,那将节省时间。

我需要对用户的 Account.total 求和并测试它是否在 3 个不同范围中的 1 个范围内。然后我需要计算这个总和并计算出金额字段总和的百分比并测试它是否在 3 个范围中的 1 个范围内。所有这些都按日期范围分组。

在 SQL 中,总计和 % 范围

SELECT u.id, SUM(a.total) AS TTLSUM, SUM(a.amount)/SUM(a.total) AS PCTSUM
FROM User u, Account a
WHERE u.id = a.userid 
GROUP BY u.id
HAVING SUM(a.total) > 0 AND SUM(a.total) <=1000 
AND SUM(a.amount)/SUM(a.total) > 0.5 AND SUM(a.amount)/SUM(a.total) <=0.75

你要做的是写两个函数,一个求和,一个求百分比:

function boolean totalInRange( User user, double lo, double hi ){
    // access user's double[] and calculate the sum, do the test
    return lo < sum && sum <= hi;
} 

然后你写几个规则

rule "is sum in range x"
when
    $u: User()
    eval( totalInRange( $u, 0, 1000 ) )
then
    // do something
end