博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rulebook规则引擎示例
阅读量:6227 次
发布时间:2019-06-21

本文共 3523 字,大约阅读时间需要 11 分钟。

hot3.png

绩效管理中强制分布经常会用到,如:

141720_mdUh_221951.png

如图,部门人数在五人以上适用此表,举例:

张三的部门业绩为A,

属于A等部门,
部门有20人,
张三个人考评在部门排名第8名;

按此表,张三属于B等员工,可以转换为95分;

 

但部门少于 6人,那么排名规则为:

142554_RFiS_221951.png

142610_4jGu_221951.png

 

引入rulebook规则引擎,代码结构:

142728_LSch_221951.png

pom.xml

 

4.0.0
com.youway
kpi-rulebook
1.0-SNAPSHOT
UTF-8
UTF-8
1.8
3.1.0
1.7.25
0.9.1
com.deliveredtechnologies
rulebook-core
${rulebook.version}
org.slf4j
slf4j-simple
${slf4j.version}
org.projectlombok
lombok
1.16.8
provided

规则执行测试代码 Launcher.java

package com.youway;import com.deliveredtechnologies.rulebook.NameValueReferableMap;import com.deliveredtechnologies.rulebook.FactMap;import com.deliveredtechnologies.rulebook.model.runner.RuleBookRunner;/** * 规则执行测试代码 * @author youway * */public class Launcher {  public static void main(String args[]) {    RuleBookRunner ruleBook = new RuleBookRunner("com.youway.rules");  //加载制定package中所有规则    NameValueReferableMap facts = new FactMap();    facts.setValue("num", 5);  //部门人数:5    facts.setValue("deptLevel", "B");  //部门业绩评级:B    facts.setValue("rank", 3); //该员工在部门考评中排名:3    ruleBook.run(facts);    ruleBook.getResult().ifPresent(System.out::println);  //打印规则执行的输出结果  }}

规则执行输出的结果类型 Response.java

package com.youway.pojos;import lombok.Data;/** * 强制分布结果,根据规则所输出的结果 * @author youway * */@Datapublic class Response {		public Response() {			}		public Response(String level, double score) {		this.level = level;		this.score = score;	}	//评级	private String level;	//转换分数	private double score;}

强制分布规则RuleParams.java

package com.youway.rules;/** * 强制分布规则 *  * @author youway * */public interface RuleParams {	//转换分数	double SCORE_A = 100.00;	double SCORE_B = 95.00;	double SCORE_C = 95.00;	double SCORE_D = 90.00;	double SCORE_E = 85.00;	}

1人强制分布规则LessRule1

package com.youway.rules;import com.deliveredtechnologies.rulebook.RuleState;import com.deliveredtechnologies.rulebook.annotation.Given;import com.deliveredtechnologies.rulebook.annotation.Result;import com.deliveredtechnologies.rulebook.annotation.Rule;import com.deliveredtechnologies.rulebook.annotation.Then;import com.deliveredtechnologies.rulebook.annotation.When;import com.youway.pojos.Response;/** * 1人强制分布规则 * @author youway * */@Rulepublic class LessRule1 implements RuleParams {	// 所在部门的员工数	@Given("num")	private int num;	// 所属部门等级	@Given("deptLevel")	private String deptLevel;	// 所在部门排名	@Given("rank")	private int rank;	@Result	private Response response;	@When	public boolean when() {		return num==1;	}	@Then	public RuleState then() {		System.out.println("LessRule1被执行......");		if (deptLevel == "A") {			this.response = new Response("A", SCORE_A);		}		if (deptLevel == "B") {			this.response = new Response("B", SCORE_B);		}		if (deptLevel == "C") {			this.response = new Response("C", SCORE_C);		}		if (deptLevel == "D") {			this.response = new Response("D", SCORE_D);		}		if (deptLevel == "E") {			this.response = new Response("E", SCORE_E);		}				return RuleState.BREAK;	}}

...... 其他强制分布规则结构依此类同

运行结果:

LessRule5被执行......Response(level=C, score=95.0)

 

附图:

092928_wBnL_221951.png

 

 

 

 

 

转载于:https://my.oschina.net/youway/blog/1633951

你可能感兴趣的文章
Shell编程进阶篇
查看>>
rsync mac->windows openssh
查看>>
ECSHOP任意页面显示指定分类、数量、排序的任意类型文章,包括只显示置顶or普通的文章...
查看>>
cacti和nagios监控web平台搭建
查看>>
Ipython安装
查看>>
Linux下查看tomcat控制台输出信息
查看>>
Linux direct io使用例子
查看>>
jmeter常用插件
查看>>
C# Winform打包部署时添加注册表信息实现开机自启动
查看>>
OC基础知识
查看>>
共享开发者账号
查看>>
python pandas 对各种文件的读写 IO tools
查看>>
团队工作总结
查看>>
用一个固定的数组实现栈和队列
查看>>
IOS中的属性列表----Property List
查看>>
IOS 生成本地验证码
查看>>
经典多普勒效应,相对论多普勒效应,以及质能方程
查看>>
站立会议1
查看>>
客户端定时自动打印页面的例子
查看>>
WPF DatePicker 默认显示当前时间
查看>>