python 规则引擎_rulebook规则引擎示例

本文通过一个示例介绍了如何使用Rulebook规则引擎实现绩效管理中的强制分布规则。在部门人数、业绩评级和员工排名的基础上,利用Rulebook定义和执行规则,得出员工的评级和转换分数。
摘要由CSDN通过智能技术生成

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

2534dc1ef565f91169688949e8219f96.png

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

张三的部门业绩为A,

属于A等部门,

部门有20人,

张三个人考评在部门排名第8名;

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

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

ffad2168c77050558d161184d0103226.png

bc38d88baff89a2941db657e33c6e92e.png

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

bf0849442f6efd8836e4f7dce5cbc851.png

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

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

*

*/

@Data

public 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

*

*/

@Rule

public 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)

附图:

70a97da38852791264c168212a3f4d77.png

规则引擎在Java项目中的使用可以提高系统的可维护性、可扩展性、可重用性和可测试性。以下是Java规则引擎的使用详解: 1. 规则引擎的基本原理: 规则引擎将业务规则形式化、集中管理,将业务规则与应用程序分离。它通过规则的条件和动作来实现业务逻辑的处理。当满足规则的条件时,规则引擎会执行相应的动作。 2. 规则引擎的优势: - 可维护性:规则引擎将业务规则集中管理,使得修改和维护规则变得更加方便。 - 可扩展性:通过添加新的规则,可以快速响应业务变化,而无需修改应用程序的代码。 - 可重用性:规则引擎将业务规则与应用程序分离,可以在不同的应用程序中重用规则。 - 可测试性:规则引擎可以通过单元测试来验证规则的正确性。 3. Java项目中的规则引擎实现方式: 在Java项目中,可以选择多种规则引擎的实现方式,例如: - Drools:Drools是一个开源的规则引擎,它提供了强大的规则管理和执行功能。 - Easy Rules:Easy Rules是一个轻量级的规则引擎,它提供了简单易用的规则定义和执行接口。 - JRules:JRules是IBM提供的一种规则引擎,它具有高性能和可扩展性。 - RuleBookRuleBook是一个简单的规则引擎,它提供了基本的规则定义和执行功能。 以上是Java规则引擎的使用详解。通过使用规则引擎,可以将业务规则形式化、集中管理,提高系统的可维护性、可扩展性、可重用性和可测试性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值