Я новичок в JESS и умерен на Java.Как написать JESS defrule «если значение не существует в списке, а затем распечатать предупреждение»
У меня есть «CList» в качестве списка специальных товаров (в том числе «основных» и «региональные» товары), и «xList» в виде списка всех товаров (в том числе «существенные» и «несущественные» товаров) Я хочу сделать правило: если «x» из «xList» со статусом «essential» не существует в «cList», тогда напечатайте «Отсутствует существенный товар x».
Чтобы быть ясным, шаблон моей системы такой же, как пример pricing_engine в Jess71p2.
- CList так же, как CatalogItems
- xList так же, как ТоварыЗаказа
Я объявляю deftemplate из классов Java. вот deftemplate;
(import com.aisy.entity.*)
(deftemplate oldList(declare (from-class oldList)))
(deftemplate xList (declare (from-class xList)))
(deftemplate cList (declare (from-class cList)))
Вот xList.java
package com.aisy.entity;
import java.sql.Timestamp;
public class xList {
private Long id_commodity;
private String commodity;
private String essentiality;
private Timestamp update;
public xList() {
super();
}
public xList(Long id_commodity, String commodity, String essentiality, Timestamp update) {
super();
this.id_commodity = id_commodity;
this.commodity = commodity;
this.essentiality = essentiality;
this.update = update;
}
public Long getId_commodity() {
return this.id_commodity;
}
public void setId_Commodity(Long id_commodity) {
this.id_commodity = id_commodity;
}
public String getCommodity() {
return this.commoditty;
}
....getter and setter methods for the rest fields
}
Вот cList.java;
public class cList {
private Long id_commodity;
private String commodity;
private String price;
private Double final_price;
public cList(Long id_commodity, String commodity, String price, Double final_price) {
super();
this.id_commodity = id_commodity;
this.commodity = commodity;
this.price = price;
this.final_price = final_price;
}
public cList() {
super();
}
...common getter and setter methods for all fields
Это предупреждение.java;
public class warning {
private final String description;
public warning(String aDescription) {
description = aDescription;
}
public String getDescription() {
return description;
}
}
Адрес: the defrule;
(defrule
(xList (commodity ?essential_commodity) (essentiality /essential/))
(not(cList (commodity ?essential_commodity)))
=> (add (new warning "Missing essential commodity" ?essential_commodity))
)
Я пытаюсь поставить некоторую информацию в базу данных для xList и CList:
xList("100000", "PEANUT", "2.45");
xList("100003", "BREAD", "1.5");
cList("100000", "PEANUT", "ESSENTIAL");
cList("100002", "CAKE", "ESSENTIAL");
cList("100003", "BREAD", "NON ESSENTIAL");
От того, если я бегу мое правило двигатель, результат должен быть
"Missing essential commodity 100002"
Но мой текущий результат:
"Missing essential commodity 100000"
"Missing essential commodity 100002"
Как это исправить?
отредактирован: 07/22/2016 добавил xList.java и cList.java
Возможно, вы допустили ошибку при создании и вводе фактов. Не могу сказать без кода для этого. – laune