drools - 如何更改事实参数的类型(字符串为双精度)以在 Drools 中进行正确比较?
问题描述
我使用 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(名称)== Double.parseDouble(“5.0”)'在[规则“计算打桩机的机器小时数_5”在pileDriverRates.xls]
在 drl 文件中,这种比较工作正常,也许必须在 .drt 文件中使用另一种方法?我使用 intellij 想法,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}";
它给出了一个错误,但是当我将 when 声明为:when
$pile: Resource(amount == "50")
它触发规则(如果数量是 50,我手动检查)。所以我的猜测是解析在 .drt 文件中不起作用,但我的朋友告诉我,他在 .drt 文件中制作了 Double.valueOf(amount) == 50.0 之类的行并且它起作用了。
解决方案
The problem was with rule evaluation and rule execution stages in Drools. I tried to describe it in comments but I think it has completely messed up the whole picture so I created the new question: How to control rule evaluation (or rule execution) stages in Drools? So if you meet an exception while trying to change fact's parameter from Double to String or something like that - this may be one of the reasons
推荐阅读
- php - Wordpress Post Format 手动从数据库更新不反映在管理员的帖子编辑页面中
- c# - 我应该如何从 .NetCore2 中的模型访问 HttpContext?
- c# - 从输入元素字符串数组中提取值
- c++ - 没有轮询的 SDL2 事件回调
- android - CollapsingToolbarLayout 包含 ViewPager 和一个搜索框。如何防止搜索框仅折叠,而 ViewPager 折叠
- scala - scala 和 dotty 的下限和上限类型
- javascript - JavaScript:打印动态值/数据
- google-cloud-platform - GCP:创建包括运行时进程的 VM 快照
- java - 在用户的 gmail 中更新时,无法更新 firebase 数据库中的数据
- python-3.x - psycopg2 不会将数据保存到 postgres 数据库中