Drools:比较drools 决策表中相同类型的对象

问题描述

我是 Drools 的新手。我在数据库中有一个人员列表,想将当前人员(登录的人员)与数据库中的人员列表进行比较,并给每个人打分。为此,我正在尝试遍历人员列表并将当前人员和列表中的人员插入到 initBody 中,并希望在drools 决策表中比较这两种相同类型的对象,但不能'没有办法做到这一点。按照我的例子, currentPerson:人(“男”,“已婚”)和 person1: Person("女","已婚")

我想比较这 2 种相同类型的对象并给出分数,例如 currentPerson KieSession 是否与 person1 gender 匹配,然后将 gender 设置为 person1,如果currentPerson 10 points 状态匹配然后想要将 gender and marital 给 person1,就像所有想要给分的人一样。为此,我试图在决策表条件中获取两种相同类型的对象,例如 20 points 并比较 $p1:Patient $p2:Patient 这样的对象,然后它总是抛出 $p1.gender==$p2.gender 错误。我尝试了几种方法来实现这一点,但无法解决这个问题。 您能否向我建议我们实现这一目标的方式?

我的 bean 类:

java.lang.RuntimeException: Cannot find KieModule: org.default:artifact:1.0.0

我的测试班:

public class Person {
    private String gender;
    private String isMarried;
    private int points;

    public Patient(String gender,String isMarried) {
        this.gender = gender;
        this.isMarried = isMarried;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getIsMarried() {
        return isMarried;
    }

    public void setIsMarried(String isMarried) {
        this.isMarried = isMarried;
    }

    public int getPoints() {
        return points;
    }

    public void setPoints(int points) {
        this.points = points;
    }
}

决策表:

enter image description here

使用决策表中静态数据比较的一个对象的相同示例。在此示例中,我仅将一个对象插入到 import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieRepository; import org.kie.api.builder.ReleaseId; import org.kie.api.io.Resource; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.kie.internal.io.ResourceFactory; import org.tgen.drools.model.Person; public class PersonsComparisonTest { private static KieSession getKieSession(Resource dt) { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem() .write(dt); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem) .buildAll(); KieRepository kieRepository = kieServices.getRepository(); ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId(); KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId); KieSession ksession = kieContainer.newKieSession(); return ksession; } public static final void main(String[] args) { try { Resource resource = ResourceFactory.newClassPathResource("rules/persons-rules.xls",PersonsComparisonTest.class); KieSession kSession = getKieSession(resource); Person Person1 = new Person("FeMale","Yes"); Person Person = new Person("FeMale","Yes"); kSession.insert(Person); kSession.insert(Person1); kSession.fireAllRules(); System.out.println("Person =>"+Person.getPoints()); System.out.println("Person1 =>"+Person1.getPoints()); } catch (Throwable t) { t.printstacktrace(); } } } 中。

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...