账户近一个月累计交易金额≥20w rule "rule25" when $w:Event( $channel : getChannelid() == "transfer", $card : getCard_no(), $time : getOper_time().getTime() $amount : getAmount() ) Number( intValue >= 30 ) from accumulate ( $e:Event( getChannelid() == $channel, $histime : getTransactionTime().getTime() < $time, getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L, getCard_no() == $card, $hisamount : getAmount() ) from $w.getEventList(), init(double d = $amount;int flag = 0;) , action(d+=$hisamount;if(d>=200000){flag=1;}), reverse() , result(flag) ) then $w.addCardRuleList(25); end 检查一下这个语法
时间: 2024-04-01 13:36:12 浏览: 100
这是一个Drools规则引擎的规则,语法上看起来没有问题。
这条规则的意思是,当一个事件(Event)满足以下条件时,将会触发编号为25的规则:
1. 事件的渠道ID为“transfer”;
2. 事件的卡号与当前事件的卡号相同;
3. 事件的操作时间在一个月内;
4. 事件的交易金额大于等于30元。
然后,根据累计交易金额是否大于等于20万元,将该卡号添加到规则列表中。规则中使用了Drools的累加器(accumulate)功能,从历史事件中累计交易金额。
相关问题
账户近一个月借方累计交易笔数≥50笔 rule "rule26" when $w:Event( $channel : getChannelid() == "transfer", $card : getCard_no(), $time : getOper_time().getTime() $cdflg : getCdflg() == "D" ) Number( intValue >= 50 ) from accumulate ( $e:Event( getChannelid() == $channel, $histime : getTransactionTime().getTime() < $time, getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L, getCard_no() == $card, $hiscdflg : getCdflg() == "D" ) from $w.getEventList(), init(int num = 1;) , action(num++;), reverse() , result(num) ) then $w.addCardRuleList(26); end 检查一下语法
这也是一个Drools规则引擎的规则,语法上看起来也没有问题。
这条规则的意思是,当一个事件(Event)满足以下条件时,将会触发编号为26的规则:
1. 事件的渠道ID为“transfer”;
2. 事件的卡号与当前事件的卡号相同;
3. 事件的操作时间在一个月内;
4. 事件的借贷标志为“D”(表示借方);
5. 近一个月内借方交易笔数大于等于50笔。
然后,将该卡号添加到规则列表中。规则中使用了Drools的累加器(accumulate)功能,从历史事件中累计借方交易笔数。
账户近一个月借方累计交易笔数/贷方累计交易笔数的比例≥2 rule "rule29" when $w:Event( $channel : getChannelid() == "transfer", $card : getCard_no(), $time : getOper_time().getTime(), $cdflg : getCdflg() ) Number( intValue == 1 ) from accumulate ( $e:Event( getChannelid() == $channel, $histime : getTransactionTime().getTime() < $time, getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L, getCard_no() == $card, $hiscdflg : getCdflg() ) from $w.getEventList(), init(int a = 0;int b = 0;if($cdflg == "C"){a++;}if($cdflg == "C"){b++;}int flag = 0;) , action(if($cdflg == "C"){a++;}if($cdflg == "C"){b++;}if(Math.min(a, b) / Math.max(a, b) >= 2){flag=1;}), reverse() , result(flag) ) then $w.addCardRuleList(29); end 解释下每一句的意思
当账户近一个月借方累计交易笔数/贷方累计交易笔数的比例大于等于2时,将规则编号29添加到该账户的规则列表中。
- `rule "rule29"`:定义规则的名称为“rule29”。
- `when`:规则的条件部分,即当满足以下条件时执行规则动作。
- `$w:Event(`:定义一个事件模式,将其命名为$w,表示该事件模式匹配的是Event类型的对象。
- `$channel : getChannelid() == "transfer"`:条件1,表示事件对象的getChannelid()方法返回值等于“transfer”。
- `$card : getCard_no()`:条件2,表示事件对象的getCard_no()方法返回值存储在$card变量中。
- `$time : getOper_time().getTime()`:条件3,表示事件对象的getOper_time().getTime()方法返回值存储在$time变量中。
- `$cdflg : getCdflg()`:条件4,表示事件对象的getCdflg()方法返回值存储在$cdflg变量中。
- `) Number(intValue == 1)`:定义一个数字模式,表示只有在累计器中累计到一个事件时才会执行规则动作。
- `from accumulate (`:定义一个累计器模式,用于对一段时间内的交易进行计数和比较。
- `$e:Event(`:定义一个事件模式,表示该事件模式匹配的是Event类型的对象。
- `getChannelid() == $channel`:条件1,表示事件对象的getChannelid()方法返回值等于$channel变量的值。
- `$histime : getTransactionTime().getTime() < $time`:条件2,表示事件对象的getTransactionTime().getTime()方法返回值小于$time变量的值。
- `getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L`:条件3,表示事件对象的getTransactionTime().getTime()方法返回值大于$time减去30天的毫秒数。
- `getCard_no() == $card`:条件4,表示事件对象的getCard_no()方法返回值等于$card变量的值。
- `$hiscdflg : getCdflg()`:从事件对象中获取getCdflg()方法的返回值,存储在$hiscdflg变量中。
- `) from $w.getEventList(),`:指定累计器模式从$w事件列表中获取事件。
- `init(int a = 0;int b = 0;if($cdflg == "C"){a++;}if($cdflg == "C"){b++;}int flag = 0;)`:定义累加器的初始状态,其中a和b表示借方和贷方的交易数量,flag表示是否满足比率条件。
- `action(if($cdflg == "C"){a++;}if($cdflg == "C"){b++;}if(Math.min(a, b) / Math.max(a, b) >= 2){flag=1;})`:定义累加器操作,即对事件进行计数和比较,并将计算结果与规则条件进行比较,如果满足条件则将flag设置为1。
- `reverse()`:将累加器的顺序反转,保证在比较前得到最新的累计值。
- `result(flag)`:将累加器的计算结果存储在flag变量中。
- `then $w.addCardRuleList(29); end`:规则的动作部分,即当满足条件时执行的操作,将规则编号29添加到该账户的规则列表中。
阅读全文