现在有一个业务需求,内容是,某个物料只允许某个公司的某个部门才可以领取。 需要在drools中编写这样一个规则实现这个业务需求,公司有50个取值,部门有100个取值,物料有10000个取值。 这条规则该如何编写?
时间: 2024-05-04 11:21:10 浏览: 52
可以使用一个map来存储可领取该物料的公司和部门的组合,map的key为物料编号,value为包含公司和部门的组合的set。接下来在规则中使用when条件语句判断申请领取的公司和部门是否匹配,然后使用then语句给予通过或拒绝的结果。
以下是可能的规则实现:
```
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
rule "Check Material Access"
when
$materialId : String() from input.getMaterialId()
$company : String() from input.getCompany()
$department : String() from input.getDepartment()
$allowed : Set() from allowedMap.get($materialId)
eval($allowed != null)
eval($allowed.contains($company + "-" + $department))
then
output.setResult("Access Granted");
end
rule "Load Allowed Map"
when
not(Map(this == allowedMap) from input)
then
Map<String, Set<String>> map = new HashMap<String, Set<String>>();
// populate map with allowed company-department combinations for each material
allowedMap = map;
end
```
这个规则首先会加载一个包含所有物料允许的公司和部门组合的map,然后在执行规则时,使用input对象中的物料编号、公司和部门信息,判断是否允许该公司和部门领取该物料。如果允许,将结果设置为“Access Granted”。
阅读全文