智能交通系統中,車輛通過收費點需根據道路類型、車輛類型、識別方式、賬戶類型、通行時段等多維度計算費用。規則頻繁變動(如調整費率、新增折扣),硬編碼維護成本高、上線慢。引入 Drools BRMS 實現規則外部化、熱部署、業務人員可視化維護。
RuleAgent 輪詢獲取。public class RuleInput implements Serializable {
// 輸入條件
String identifyMethod; // TAG/OCR/MIR
Date detectionTime;
String detectionPointCode;
String accountType; // ANNUAL/TEMP
int vehicleClass; // 1=摩托車 2=小轎車 3=卡車...
int dayOfWeek; // 1,7=週末 1,1=工作日
int timeOfDay; // 8-24 / 0-8
String operator;
String purposeOfUse; // A/B/C...
// 輸出結果
double tollFee; // 道路基本使用費
double adminFee; // 附加費
double discount; // 折扣
}
Excel/OpenOffice 編輯,上傳至 BRMS。三張決策表分別計算:
| 行號 | 關鍵字 | 說明 |
|---|---|---|
| 2 | RuleSet | 規則集名稱,與 Package 同名 |
| 3 | Import | 導入 BOM 類路徑 |
| 6 | RuleTable | 開始一張規則表 |
| 7 | CONDITION/ACTION | 標記該欄為條件/動作 |
| 8 | fee | 宣告模型變數名及類型 |
| 9 | 模板 | 條件/動作模板,$1,$2 為參數佔位 |
| 10 | 描述 | 欄位說明 |
| 11+ | 數據行 | 每行一條規則 |
com.sample.rule,上傳 BOM JAR,配置 Import。TollRule,獲得部署 URL:https://localhost:8080/drools-jbrms/.../package/com.sample.rule/TollRulenewInstance=false
url=https://localhost:8080/drools-jbrms/.../package/com.sample.rule/TollRule
poll=30
name=TollRule
localCacheDir=c:/temp
StatefulSession session = ruleBase.newStatefulSession();
session.insert(ruleInput);
session.fireAllRules();
session.dispose();
// 結果保存在 ruleInput 的 tollFee/adminFee/discount 欄位
業務調整 OCR 附加費 0.5 → 0.8:修改決策表 → 重新上傳 → Build & Deploy 新 Snapshot。無需重啟應用,RuleAgent 輪詢 30 秒後自動熱加載,客戶端刷新即見新費率。
RuleAgent 熱部署機制保障規則變更實時生效。