spring整合Drools規則引擎

           項目中有一個特殊需求,需要根據一定的規則監控可疑的開票,鑑於規則的複雜性以及多變性,放棄硬編碼的想法,引入Drools規則引擎,以規則腳本的形式存放在文件中,使得規則的變更不需要修正代碼重啓機器就可以立即在線上環境生效。規則文件可以使用 .drl文件,也可以是xml文件,這裏我們使用drl文件。接下來就直接上代碼:

第一步:maven引入Drools依賴

第二步:在resources下面的META-INF中創建kmodule.xml

第三步:在resources/rules/suspicious目錄下創建規則文件suspicious.drl,Drools語法可以自行百度。

package com.logic
import com.bosssoft.nontax.agency.invoice.domain.ComputerBill
import com.bosssoft.nontax.agency.invoice.domain.ComputerBillItem

global java.util.Map refuseData

rule "baseMessage"
   no-loop true
   lock-on-active true
   salience 1
   when
      ComputerBill(fpayerName contains "部隊" || fpayerName contains "武警")
   then
      refuseData.put("filter",true);
end

rule "baseMessage1"
   no-loop true
   lock-on-active true
   salience 1
   when
      ComputerBill(fbillNature == "1" && ftotalAmt > 100000)
   then
      refuseData.put("filter",true);
end

rule "baseMessage2"
   no-loop true
   lock-on-active true
   salience 1
   when
       ComputerBill(fbillNature == "9" && fbillName contains "資金往來" && (ftotalAmt > 1000000 || fpayerName contains "公司" || fpayerName contains "企業"))
    then
       refuseData.put("filter",true);
end

rule "baseMessage3"
   no-loop true
   lock-on-active true
   salience 1
   when
       ComputerBill(fbillNature == "9" && fbillName contains "捐贈" && (ftotalAmt > 5000000 || fmemo contains "贊助"));
    then
       refuseData.put("filter",true);
end

rule "baseMessage4"
   no-loop true
   lock-on-active true
   salience 1
   when
       $computerBill : ComputerBill(fbillNature == "9" && fbillName contains "捐贈");
       ComputerBillItem(fitemName contains "捐贈") from $computerBill.computerBillItemList
    then
       refuseData.put("filter",true);
end

rule "baseMessage5"
   no-loop true
   lock-on-active true
   salience 1
   when
       ComputerBill(fbillNature == "9" && fbillName contains "團體" && ftotalAmt > 100000)
    then
       refuseData.put("filter",true);
end

第四步:系統調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章