用drools实现账户近一个月累计交易笔数≥30笔
时间: 2024-03-23 08:41:06 浏览: 62
好的,您的问题是如何用drools实现账户近一个月累计交易笔数≥30笔。
首先,您需要定义一个规则,用于判断账户近一个月的交易笔数是否大于等于30笔。以下是一个简单的规则示例:
```
rule "Account Transaction Count"
when
$account : Account($transactions : transactions)
accumulate(
Transaction($account == $account, $timestamp : timestamp) over window:time(30d);
$count : count($timestamp);
$count >= 30
)
then
System.out.println("Account " + $account.getNumber() + " has had " + $count + " transactions in the last 30 days.");
end
```
这个规则会匹配所有具有交易记录的账户,并在交易记录中累加在最近30天内发生的交易。如果交易数量大于等于30,就会触发规则,并输出账户号码和交易数。
您可以根据自己的业务逻辑进行修改和扩展,以实现更加复杂的规则。
相关问题
当日,账户转账交易关联不同交易对手(账号)>=20个,其中转入笔数小于5笔总金额大于15万,且日终余额<=100元。使用drools实现
好的,根据您的要求,我可以给您提供一个基于Drools的规则实现,来检测当日账户转账交易的情况。以下是一个可能的规则实现:
```java
rule "Suspicious Account Transactions"
when
// 当日交易次数大于等于20次
$count : Long() from accumulate(
$tx : Transaction($account : account, date == today),
count($tx)
)
$count >= 20
// 转入次数小于5次
$inCount : Long() from accumulate(
$tx : Transaction($account : account, date == today, amount > 0),
count($tx)
)
$inCount < 5
// 转入总金额大于15万
$inTotal : Double() from accumulate(
$tx : Transaction($account : account, date == today, amount > 0),
sum($tx.getAmount())
)
$inTotal > 150000
// 日终余额小于等于100元
$balance : Double() from accumulate(
$tx : Transaction(account == $account, date == today),
sum($tx.getAmount())
)
$balance <= 100.0
then
// 触发警报
System.out.println("警告:账户 " + $account + " 存在可疑交易!");
end
```
以上规则会检查当日所有交易,如果账户的转入次数小于5次,并且转入总金额大于15万,并且当日余额小于等于100元,并且交易次数大于等于20次,就会触发警报。
当然,这个规则只是一个例子,您可以根据实际需要进行修改或扩展。同时,您需要将这个规则与您的应用程序进行集成,以便在需要时触发规则检查。
账户近一个月借方累计交易笔数≥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)功能,从历史事件中累计借方交易笔数。
阅读全文