问题描述
我是 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;
}
}
使用决策表中静态数据比较的一个对象的相同示例。在此示例中,我仅将一个对象插入到 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();
}
}
}
中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)