如何更改事实参数的类型(字符串到双精度)以便在流口水中正确比较?



我使用Drools模板(.drt文件),我想在其中比较事实的某些参数是小于还是大于某个双精度值。但事实参数是字符串表示形式(该对象的参数都是字符串类型)。所以我尝试像这样解析它以加倍: 什么时候

$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")" "打桩机机器hours_5的计算"在打桩机费率.xls]

在 drl 文件中,这种比较工作正常,也许必须在 .drt 文件中使用另一种方法? 我使用智能创意,Ubuntu 我的绒球.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

包规则.驱动桩;

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

它给出了一个错误,但是当我将 when 语句设为: 什么时候

$pile: Resource(amount == "50")

它触发规则(如果数量为 50,则 corse,我手动检查它)。 所以我的猜测是解析在 .drt 文件中不起作用,但我的朋友告诉我,他在 .drt 文件中制作了像 Double.valueOf(amount) == 50.0 这样的行,它奏效了。

问题出在 Drools 中的规则评估和规则执行阶段。我试图在评论中描述它,但我认为它完全搞砸了整个画面,所以我创造了一个新问题: 如何在流口水中控制规则评估(或规则执行)阶段? 因此,如果您在尝试将事实的参数从 Double 更改为 String 或类似的东西时遇到异常 - 这可能是原因之一

最新更新