如何在Drools中更改事实参数的类型(将字符串更改为双精度)以进行正确比较?

时间:2019-04-05 09:43:19

标签: drools

我使用Drools模板(.drt文件),在这里我想比较事实的某些参数是小于还是大于某个double值。但是事实参数是字符串表示形式(该对象的参数都是字符串类型)。因此,我尝试将其解析为以下形式的两倍: 什么时候

$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:错误评估约束   [Rule中的'Double.parseDouble(name)== Double.parseDouble(“ 5.0”)'   “ pileDriverRates.xls中的“打桩机的机器hours_5的计算”]

在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语句设为: 什么时候

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

它触发规则(如果金额为50,则我手动进行检查)。 因此,我的猜测是,解析无法在.drt文件中进行,但是我的朋友告诉我他在.drt文件中进行了制作,例如Double.valueOf(amount)== 50.0这样的行就可以了。

1 个答案:

答案 0 :(得分:0)

问题出在Drools中的规则评估和规则执行阶段。我试图在评论中描述它,但是我认为它完全弄乱了整个画面,所以我创建了一个新问题: How to control rule evaluation (or rule execution) stages in Drools? 因此,如果您在尝试将事实的参数从Double更改为String或类似方法时遇到异常-这可能是原因之一