Drools动态创建规则文件并动态调用

目录

1、编写规则内容,如下图

2、创建KieSession

3、根据规则名称货主匹配规则进行执行

 3.1、根据规则名称完全匹配方式执行

3.2、根据规则名称前缀匹配方式执行


1、编写规则内容,如下图

package rules;
import org.springblade.risk.entity.QualificationInformationRule;
import org.springblade.risk.entity.RuleResult;
global RuleResult ruleResult;
rule "qualification_info_not_receiver_info_Risk"
    enabled true
    when
        $qualification:QualificationInformationRule(null == unloadingPerson || null == unloadingPersonPhone);
    then
        $riskResult:ruleResult.setTitle("资质规则信息风控-收货方信息缺失");
    end
rule "qualification_info_not_deliver_info_Risk"
    enabled true
    when
        $qualification:QualificationInformationRule(null == ownerName || null == ownerPhone);
    then
        $riskResult:ruleResult.setTitle("资质规则信息风控-发货方信息缺失");
    end
rule "qualification_info_car_relative_certificate_Risk"
    enabled true
    when
        $qualification:QualificationInformationRule(tNum == 0 || bNum == 0 || dNum == 0);
    then
        $riskResult:ruleResult.setTitle("资质规则信息风控-车辆相关证件缺失(车辆未进行认证或审核中)");
    end

此处的内容根据自己的业务情况进行编写和改动

2、根据内容动态创建KieSession

Drools动态创建规则文件并动态调用_第1张图片

新建kieHelper类,调用addContent把内容添加进来,采用drools标准格式后缀为.drl文件类型动态创建

/**
	 * 根据规则配置信息动态创建KieSession
	 * @param ruleContent
	 * @return
	 */
	public static KieSession createRule(String ruleContent) {
		KieHelper kieHelper = new KieHelper();
		kieHelper.addContent(ruleContent, ResourceType.DRL);
		KieSession kieSession = kieHelper.build().newKieSession();
		return kieSession;
	}

 调用kieHelper.build().newKieSession()方法进行创建

3、根据规则名称或者名称前缀匹配进行过滤执行

 3.1、根据规则名称完全匹配方式执行

调用new RuleNameEqualsAgendaFilter(ruleName)

kieSession.fireAllRules(new RuleNameEqualsAgendaFilter(ruleName));

3.2、根据规则名称前缀匹配方式执行

调用new RuleNameStartsWithAgendaFilter(rulePrefix)

result = kieSession.fireAllRules(new RuleNameStartsWithAgendaFilter(rulePrefix));

使用场景:多个规则为一组时使用

如有问题,欢迎大家打扰

你可能感兴趣的:(java)