在 Drools 中编写规则 - 条件求和
Writing rule in Drools - conditional sum
我一直在为特定问题陈述编写规则。
我有一个 excel 文件,其中包含列 id、specialty、salary。 Specialty可以取"oncology"、"urology"等值,我要计算每个专业对应的总工资。
有两种方法可以做到这一点。
第一个:
rule "Total salary of Oncology"
no-loop
lock-on-active
salience 100
when
$m : Masterclass( $id : phyid , $p : p,spec=="Oncology")
not Masterclass( spec=="Oncology", phyid < $id)
$total : Number() from accumulate ( Masterclass( $salary : salary ,spec=="Oncology") ,
init( double total =0;),
action(total+=$salary;),
result( new Double (total)))
then
System.out.println($m.getSpec());
System.out.println("Total target pay is : " + $total + " of specialty : "+ $m.getSpec());
retract($m);
end
其他专业也是如此。
此规则工作正常。
第二个:
只写一条规则,读取 specialty 的值,然后求和对应的薪水。
我试图实现这一点,但没有成功。
任何帮助将不胜感激。
这远非完美。但请注意,您不必插入某些特定的字符串。 运行 没有要匹配的字符串的规则无论如何都会生成所有专业的累计总和。
并且您应该将字符串包装成一个 Java class - 我只是懒得发明一个只有一个字段的 Java class。
rule "trigger read"
when
not String()
then
String s = read_any_way_you_want();
insert( s );
end;
rule "Total salary of something"
when
$spec: String()
$m : Masterclass( $id: phyid , spec == $spec)
not Masterclass( spec == $spec, phyid < $id)
$total : Number() from
accumulate ( Masterclass($salary: salary, spec == $spec) ,
init( double total =0;),
action(total+=$salary;),
result( new Double (total)))
then
System.out.println($m.getSpec());
System.out.println("Total target pay is : " + $total +
" o specialty : "+ $m.getSpec());
retract($spec);
end
我一直在为特定问题陈述编写规则。 我有一个 excel 文件,其中包含列 id、specialty、salary。 Specialty可以取"oncology"、"urology"等值,我要计算每个专业对应的总工资。 有两种方法可以做到这一点。
第一个:
rule "Total salary of Oncology"
no-loop
lock-on-active
salience 100
when
$m : Masterclass( $id : phyid , $p : p,spec=="Oncology")
not Masterclass( spec=="Oncology", phyid < $id)
$total : Number() from accumulate ( Masterclass( $salary : salary ,spec=="Oncology") ,
init( double total =0;),
action(total+=$salary;),
result( new Double (total)))
then
System.out.println($m.getSpec());
System.out.println("Total target pay is : " + $total + " of specialty : "+ $m.getSpec());
retract($m);
end
其他专业也是如此。 此规则工作正常。
第二个: 只写一条规则,读取 specialty 的值,然后求和对应的薪水。 我试图实现这一点,但没有成功。 任何帮助将不胜感激。
这远非完美。但请注意,您不必插入某些特定的字符串。 运行 没有要匹配的字符串的规则无论如何都会生成所有专业的累计总和。
并且您应该将字符串包装成一个 Java class - 我只是懒得发明一个只有一个字段的 Java class。
rule "trigger read"
when
not String()
then
String s = read_any_way_you_want();
insert( s );
end;
rule "Total salary of something"
when
$spec: String()
$m : Masterclass( $id: phyid , spec == $spec)
not Masterclass( spec == $spec, phyid < $id)
$total : Number() from
accumulate ( Masterclass($salary: salary, spec == $spec) ,
init( double total =0;),
action(total+=$salary;),
result( new Double (total)))
then
System.out.println($m.getSpec());
System.out.println("Total target pay is : " + $total +
" o specialty : "+ $m.getSpec());
retract($spec);
end