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

uurv41yg  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(569)

我不太会流口水。我有一个数据库中的人员列表,并希望将当前人员(登录的人员)与数据库中的人员列表进行比较,并给每个人打分。为此,我尝试遍历人员列表,并将当前人员和列表中的人员插入到 KieSession 想比较drools决策表中这两个相同类型的对象,但找不到方法。根据我的例子,currentperson:person(“男”,“已婚”)和person1:person(“女”,“已婚”)
我想比较这两个相同类型的对象,并给出点,如果当前的人 gender 与人匹配1 gender 然后设置 10 points 如果现在的人 gender and marital 状态匹配则希望给出 20 points 所有人都愿意给分。为此,我试图在决策表条件中得到两种相同类型的对象,比如 $p1:Patient $p2:Patient 比较像 $p1.gender==$p2.gender 然后它总是扔 java.lang.RuntimeException: Cannot find KieModule: org.default:artifact:1.0.0 错误。我试过几种方法来达到这个目的,但都解决不了。你能给我建议一下实现这一目标的方法吗?
我的bean类:

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;
    }
}

我的测试类:

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();
        }
    }
}

决策表:

使用决策表中具有静态数据的一个对象的相同示例。我只将一个对象插入 KieSession 在这个例子中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题