package com.ningzhaosheng.drools.integral.client;
import com.ningzhaosheng.drools.DroolsApplicationTests;
import com.ningzhaosheng.drools.integral.entity.Order;
import com.ningzhaosheng.drools.integral.entity.User;
import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.impl.KnowledgeBaseFactory;
import org.junit.jupiter.api.Test;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* @author ningzhaosheng
* @date 2024/1/20 17:20:27
* @description 测试订单积分规则,测试手动修改规则文件,并测试规则
* 计算额外积分金额 规则如下: 订单原价金额
* 100以下, 不加分
* 100-500且用户等级大于3 加100分
* 500-1000 加500分
* 1000 以上 加1000分
*/
public class DroolsTests extends DroolsApplicationTests {
public KieSession getKieSessionFromClassPathResource() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("rules/point-rules.drl"), ResourceType.DRL);
//BUILD RULEBASE
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
//NEW WORKING MEMORY
final KieSession session = kbase.newKieSession();
return session;
}
public KieSession getKieSessionFromByte() {
String rulsStr = "package rules\n" +
"\n" +
"import com.ningzhaosheng.drools.integral.entity.Order\n" +
"import com.ningzhaosheng.drools.integral.entity.User\n" +
"\n" +
"rule \"zero\"\n" +
" no-loop true\n" +
" lock-on-active true\n" +
" salience 1\n" +
" when\n" +
" $order : Order(price <= 100)\n" +
" then\n" +
" $order.setScore(0);\n" +
" update($order);\n" +
"end\n" +
"\n" +
"rule \"add100\"\n" +
" no-loop true\n" +
" lock-on-active true\n" +
" salience 1\n" +
" when\n" +
" $order : Order(price > 100 && price <= 500)\n" +
" and $user : User(level>2)\n" +
" then\n" +
" System.out.println($order.getUser());\n" +
" $order.setScore(100);\n" +
" update($order);\n" +
"end\n" +
"\n" +
"\n" +
"rule \"add500\"\n" +
" no-loop true\n" +
" lock-on-active true\n" +
" salience 1\n" +
" when\n" +
" $order : Order(price > 500 && price <= 1000)\n" +
" then\n" +
" $order.setScore(500);\n" +
" update($order);\n" +
"end\n" +
"\n" +
"rule \"add1000\"\n" +
" no-loop true\n" +
" lock-on-active true\n" +
" salience 1\n" +
" when\n" +
" $order : Order(price > 1000)\n" +
" then\n" +
" $order.setScore(1000);\n" +
" update($order);\n" +
"end";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//kbuilder.add(ResourceFactory.newClassPathResource("rules/point-rules.drl"), ResourceType.DRL);
kbuilder.add(ResourceFactory.newByteArrayResource(rulsStr.getBytes()), ResourceType.DRL);
//BUILD RULEBASE
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
//NEW WORKING MEMORY
final KieSession session = kbase.newKieSession();
return session;
}
@Test
public void droolsOrderTest() throws Exception {
KieSession kieSession = getKieSessionFromByte();
List<Order> orderList = getInitData();
for (Order order : orderList) {
// 1-规则引擎处理逻辑
kieSession.insert(order);
kieSession.fireAllRules();
// 2-执行完规则后, 执行相关的逻辑
addScore(order);
}
kieSession.dispose();
}
private static void addScore(Order o) {
System.out.println("用户" + o.getUser().getName() + "享受额外增加积分: " + o.getScore());
}
private static List<Order> getInitData() throws Exception {
List<Order> orderList = new ArrayList<>();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
{
Order order = new Order();
order.setPrice(80);
order.setBookingDate(df.parse("2015-07-01"));
User user = new User();
user.setLevel(1);
user.setName("Name1");
order.setUser(user);
order.setScore(111);
orderList.add(order);
}
{
Order order = new Order();
order.setPrice(200);
order.setBookingDate(df.parse("2015-07-02"));
User user = new User();
user.setLevel(2);
user.setName("Name2");
order.setUser(user);
orderList.add(order);
}
{
Order order = new Order();
order.setPrice(800);
order.setBookingDate(df.parse("2015-07-03"));
User user = new User();
user.setLevel(3);
user.setName("Name3");
order.setUser(user);
orderList.add(order);
}
{
Order order = new Order();
order.setPrice(1500);
order.setBookingDate(df.parse("2015-07-04"));
User user = new User();
user.setLevel(4);
user.setName("Name4");
order.setUser(user);
orderList.add(order);
}
return orderList;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该资源文件是本人CSDN 技术文章专栏《Drools》相关文章的代码案例,包含了Drools规则文件语法代码、规则属性测试代码、Drools高级语法代码、综合案例-消费积分案例代码等相关内容;有兴趣的朋友可以下载下来看看;同时这里给出我的CSDN 专栏文章地址:https://blog.csdn.net/qq_25409421/category_12366342.html 专栏中的文章内容,如果对您有帮助,欢迎给我点赞+收藏,感谢!
资源推荐
资源详情
资源评论
收起资源包目录
drools-test.zip (91个子文件)
pom.xml 3KB
src
test
java
com
ningzhaosheng
drools
DroolsApplicationTests.java 338B
example
client
AttributesAutoFocusTest.java 929B
LhsNotTest.java 836B
LhsExistsTest.java 1015B
AttributesSalienceTest.java 924B
RhsRetractTest.java 863B
AttributesNoLoopTest.java 905B
GlobalTest.java 1KB
RhsHaftTest.java 833B
AttributesLockOnActiveTest.java 955B
AttributesTimerTest.java 986B
ComparisonTest.java 1KB
AttributesActivationGroupTest.java 976B
AttributesAgendaGroupTest.java 1KB
AttributesDateExpiresTest.java 945B
LhsInTest.java 874B
RhsInsertTest.java 855B
RhsModifyTest.java 855B
LhsEvalTest.java 834B
AttributesDateEffectiveTest.java 962B
RhsDroolsMethodsTest.java 914B
LhsExtendsTest.java 870B
QueryTest.java 2KB
FunctionTest.java 852B
RhsUpdateTest.java 855B
AttributesEnabledTest.java 911B
integral
client
AddressDroolsTests.java 2KB
DroolsTests.java 6KB
OrderDroolsTests.java 4KB
main
resources
rules
rhs-retract.drl 529B
attributes-lock-on-active.drl 748B
attributes-timer.drl 563B
lhs-in.drl 469B
global.drl 899B
rhs-update.drl 763B
rhs-insert.drl 891B
attributes-activation-group.drl 711B
attributes-salience.drl 734B
lhs-extends.drl 452B
function.drl 403B
comparison.drl 2KB
attributes-date-effective.drl 443B
attributes-auto-focus.drl 1KB
rhs-haft.drl 448B
lhs-eval.drl 279B
attributes-agenda-group.drl 1KB
attributes-date-expires.drl 390B
point-rules.drl 1KB
attributes-enabled.drl 338B
lhs-exists.drl 450B
rhs-drools-methods.drl 611B
query.drl 324B
lhs-not.drl 265B
address.drl 788B
rhs-modify.drl 757B
attributes-noloop.drl 383B
application-dev.yml 152B
application.yml 343B
logback-spring.xml 1KB
java
com
ningzhaosheng
drools
DroolsApplication.java 486B
example
entity
RhsRetractEntity.java 312B
AttributesDateExpiresEntity.java 263B
RhsHaftEntity.java 306B
ComparisonEntity.java 433B
LhsNotEntity.java 310B
AttributesTimerEntity.java 250B
AttributesSalienceEntity.java 257B
QueryEntity.java 335B
AttributesActivationGroupEntity.java 270B
AttributesAutoFocusEntity.java 260B
FunctionEntity.java 252B
AttributesDateEffectiveEntity.java 266B
LhsInEntity.java 341B
RhsDroolsMethodsEntity.java 327B
LhsExtendsEntity.java 324B
GlobalEntity.java 247B
AttributesEnabledEntity.java 249B
AttributesLockOnActiveEntity.java 265B
RhsModifyEntity.java 310B
AttributesAgendaGroupEntity.java 263B
RhsUpdateEntity.java 311B
AttributesNoLoopEntity.java 252B
LhsExistsEntity.java 318B
LhsEvalEntity.java 306B
RhsInsertEntity.java 310B
config
DroolsAutoConfiguration.java 2KB
integral
entity
AddressCheckResult.java 340B
Order.java 550B
Address.java 328B
User.java 356B
共 91 条
- 1
资源评论
夜夜流光相皎洁_小宁
- 粉丝: 4702
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功