Я использую шаблон Drools (файл .drt), в котором я хочу сравнить, является ли какой-либо параметр факта меньшим или большим, чем некоторое двойное значение. Но параметр fact является строковым представлением (все параметры этого объекта являются строковыми типами). Поэтому я пытаюсь разобрать его, чтобы удвоить, как это:
когда
$pile: Resource(Double.valueOf(amount) < 30.0) //or next
//$pile: Resource(Double.parseDouble(amount) < 30.0)//both don't work in drt
, то
...
Проблема в том, что в других правилах это работает нормально, но здесь выдает исключение:
java.lang.RuntimeException: ошибка оценки ограничения
'Double.parseDouble (name) == Double.parseDouble ("5.0") "в [Правило
"Расчет количества рабочих часов машиниста кучи_5" в кучеDriverRates.xls]
В файлах drl такое сравнение работает нормально, может быть, должен быть другой метод для использования в файлах .drt?
Я использую интеллигентную идею, Ubuntu
Мой pom.xml:
<dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>${runtime.version}</version>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-test</artifactId>
<version>${runtime.version}</version>
</dependency>
</dependencies>
заголовок шаблона
code
name
weightMin
weightMax
boom
пакет rules.drivenPiles;
import com.sample.Work;
import com.sample.Resource;
import com.sample.ResourceParameter;
dialect "mvel"
шаблон "Выбери стреловой кран"
rule "Choose crane boom_@{row.rowNumber}"
salience -20
activation-group "second"
when
$pile: Resource(Double.parseDouble(amount) > @{weightMin}, Double.parseDouble(amount) < @{weightMax})
then
String boomLength = "@{boom}";
выдает ошибку, но когда я делаю когда утверждение как:
когда
$pile: Resource(amount == "50")
Это правило срабатывает (если сумма равна 50, я проверяю это вручную).
Поэтому я предположил, что синтаксический анализ не работает в файлах .drt, но мой друг говорит мне, что он сделал в файлах .drt такие строки, как Double.valueOf (amount) == 50.0, и это сработало.