我不太会流口水。我有一个数据库中的人员列表,并希望将当前人员(登录的人员)与数据库中的人员列表进行比较,并给每个人打分。为此,我尝试遍历人员列表,并将当前人员和列表中的人员插入到 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
在这个例子中。
暂无答案!
目前还没有任何答案,快来回答吧!