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

来源:互联网 发布:java函数式编程 编辑:程序博客网 时间:2024/06/05 14:45


一、问题描述

 

假设雇员Employ有:

           学历信息 eduInfo,   简历信息  resume,

           考核信息 annualExam  和奖惩信息 awardPunish

要确定其:

           基本工资 basicSalary, 职务工资 dutySalary

           分红金额 bonus 和 总工资 totalSalary.

 

规则如下:

1】学历决定基本工资(basicSalary):

                       ====>本科1500研究生2500

2】简历决定职务工资(dutySalary) :

                       ====>技术2000管理4500

3】年度考核决定分红(bonus)

                       ====>分红总金额1000

                       ==>考核结果:

                        ==>优秀100%1000);良好90%900);

                                       合格60%600); 不合格0%0);

4】奖惩决定计算最终工资与【123】项工资之和的比例:

                       ====>奖励:*110%+10%

                       ====>惩罚:*90%-10%

                       ====>无:*100%0%

5】计算总工资: (【1+2+3】)*4

 

二、问题分析

 

1.基本流程:

 

P【计算基本工资,计算职务工资,计算分红, 计算奖惩比例】

                    ====>计算总工资(根据奖惩情况)

其中,P[i,...,k]表示任务i,...,k并发执行,====>表示顺序执行。

即有:P[1,2,3, 4] ===> 5

 

三、概要设计

 

1】类Employ的设计:

2】规则文件的编写和组织:

                ==>学历规则文件:EduInfoRule.drl

                ==>简历规则文件:ResumeRule.drl

                ==>分红规则文件:BonusRule.drl

                ==>奖惩规则文件:AwardPunish.drl

                ==>计算总工资规则:TotalRule.drl

3】规则文件的组合(规则流):

 

                 ==>EduInfo.drl含规则组basic_salary

                 ==>ResumeRule.drl含规则组duty_salary

                 ==>BonusRule.drl含规则组bonus_salary

                 ==>AwardPunish.drl含规则组award_punish

                  ==>TotalRule.drl含规则组sum_salary

 

组合方式:

[start]--->  P[basic_sal ary , duty_salary, bonus_salary, award_punish]

                  --->sum_salary ---> [end]

 


其中:P表示并发,--->表示顺序 【规则流图在后面的实现中给出】

 

4】编写测试文件:EmployTest.java

 

四、详细设计

 

1】使用EclipseIDE作为开发环境,drools5.1作为规则引擎

2为简单起见,Employ类的属性作了简化处理,

             eduInfo, resume , annualExam,   awardPunish均为String,

                   basic{duty,bonus,total}_salary , percent作为double类型。