Drools统计符合指定条件的对象数量 满足阈值后执行赋值操作
Drools规则计数阈值触发调整方案
原有规则问题
你写的规则匹配逻辑为只要公司员工列表中存在1名HR部门的员工就会触发规则执行赋值,没有实现计数和阈值判断逻辑,因此只要存在HR员工就会触发标签设置。
调整后代码
使用Drools提供的accumulate聚合函数完成员工计数和阈值判断,调整后规则如下:
rule "HR Employee Count Over 10 Set Band" dialect "mvel" when company : CompanyFact($listOfEmployees: employees) // 聚合统计HR部门员工数,判断超过10才满足匹配条件 accumulate( employee : EmployeeFact(departmentType == "HR") from $listOfEmployees; $hrEmpCount : count(employee); $hrEmpCount > 10 ) then company.setDepartmentBand("ABC"); end
逻辑说明
accumulate会遍历所有符合条件的HR部门员工,通过count函数统计总数量- 只有当统计得到的
$hrEmpCount大于10时,才会满足规则的when匹配条件,触发标签赋值操作 - 避免了单条符合条件的员工就触发规则的问题
内容的提问来源于stack exchange,提问作者gahlot.jaggs
相关产品推荐
相关产品推荐

