专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Java Drools5.1 规则流基础【示例】(下)

六、测试代码:

Employ:

package sample;

public class Employ {

    public static final double BONUS = 1000;

    private String eduInfo;
    private String resume;
    private String annualExam;
    private String awardPunish;

    private double basicSalary;
    private double dutySalary;
    private double bonus;
    private double percent;

    private double totalSalary;

    public String getEduInfo() {
        return eduInfo;
    }
    public void setEduInfo(String eduInfo) {
        this.eduInfo = eduInfo;
    }
    public String getResume() {
        return resume;
    }
    public void setResume(String resume) {
        this.resume = resume;
    }
    public String getAnnualExam() {
        return annualExam;
    }
    public void setAnnualExam(String annualExam) {
        this.annualExam = annualExam;
    }
    public String getAwardPunish() {
        return awardPunish;
    }
    public void setAwardPunish(String awardPunish) {
        this.awardPunish = awardPunish;
    }

    public double getBasicSalary() {
        return basicSalary;
    }
    public void setBasicSalary(double basicSalary) {
        this.basicSalary = basicSalary;
    }

    public double getDutySalary() {
        return dutySalary;
    }
    public void setDutySalary(double dutySalary) {
        this.dutySalary = dutySalary;
    }

    public double getBonus() {
        return bonus;
    }
    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    public double getPercent() {
        return percent;
    }
    public void setPercent(double percent) {
        this.percent = percent;
    }

    public double getTotalSalary() {
        return totalSalary;
    }
    public void setTotalSalary(double totalSalary) {
        this.totalSalary = totalSalary;
    }

    public String toString() {
        return "[" + eduInfo + " " + resume + " " + annualExam + " " +
                     awardPunish + " " + basicSalary + " " + dutySalary + " " +
                     bonus + " " + totalSalary + "]";   
    }

}

EmployTest:

package sample;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class EmployTest {

    public static void main(String[] args) {

        try {
            // load up the knowledge base
            KnowledgeBase kbase = readKnowledgeBase();
            StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
            KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
            // go !
            Employ emp = new Employ();
            emp.setEduInfo("master");
            emp.setResume("tech");
            emp.setAnnualExam("good");
            emp.setAwardPunish("award");
            ksession.insert(emp);
            ksession.startProcess("myrules.salary");
            ksession.fireAllRules();    
            System.out.println("Basic Salary: " + emp.getBasicSalary());
            System.out.println("Duty Salary: " + emp.getDutySalary());
            System.out.println("Bonus      : " + emp.getBonus());
            System.out.println("rate       : " + emp.getPercent());
            System.out.printf("Total Salary: %.0f" , emp.getTotalSalary());
            logger.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }            

    }

    private static KnowledgeBase readKnowledgeBase() throws Exception {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newClassPathResource("rules/EduInfoRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/ResumeRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/BonusRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/AwardPunish.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/TotalRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/salary.rf"), ResourceType.DRF);
        KnowledgeBuilderErrors errors = kbuilder.getErrors();
        if (errors.size() > 0) {
            for (KnowledgeBuilderError error: errors) {
                System.err.println(error);
            }
            throw new IllegalArgumentException("Could not parse knowledge.");
        }
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        return kbase;
    }    

} 

测试结果:

execrule Technician …

execrule Master …

execrule Good …

execrule Award …

execrule Total …

BasicSalary: 2500.0

DutySalary: 2000.0

Bonus : 900.0

rate : 1.1

TotalSalary: 5940

七、总结

Javadrools规则流基础:

【1】掌握规则引擎的基本工作原理;

【2】掌握规则文件的编写;

【3】掌握规则流图的绘制及应用程序集成。

【4】掌握规则组合的两种基本方式【并发和顺序】的实现方式。

下一步:

【1】更复杂的规则组合;

【2】规则文件的组织、管理;

【3】规则文件的自动生成;

【4】用户自定义规则;

文章永久链接:https://tech.souyunku.com/20873

未经允许不得转载:搜云库技术团队 » Java Drools5.1 规则流基础【示例】(下)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们