Как мне разобрать строку внутри условия Drools? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь определить простое правило с помощью Drools 7 внутри моего приложения Java.

import com.ruleengine.domain.Alert;
import com.unifiedformat.UnifiedData;
import com.ruleengine.utils.DroolsUtils;
import java.util.*;

global com.ruleengine.domain.Alert alert;

dialect  "java"

rule "Calculate MAE - Scenario 1"
    when
        mae : DroolsUtils.stringToDouble(UnifiedData(getData().getValue()) > 0.1);
    then
        alert.setAlertMessage("The MAE is over 0.1! It is an anomaly!");
        alert.getNotifiedParties().add("SMS");
        alert.getNotifiedParties().add("EMAIL");
        alert.getNotifiedParties().add("FACEBOOK");
end

UnifiedData.getData (). GetValue () возвращает объект String, что-то вроде 0.094342 (случайно case)

Я пытаюсь разобрать эту строку в двойной, так как я хочу сравнить заданное значение строки с моим порогом (0,1).

Как я могу сделать это с Drools? Я получаю следующую ошибку с моим кодом:

Unable to resolve ObjectType 'DroolsUtils.stringToDouble' : [Rule name='Calculate MAE - Scenario 1']

Ответы [ 2 ]

1 голос
/ 16 января 2020

Мне удалось решить мою проблему с помощью этого кода:

global Alert alert;

function Double getMae(UnifiedData unifiedData) { 
    return Double.valueOf(unifiedData.getData().getValue());
}

rule "Calculate MAE - Scenario 1"
    when
    mae : Double(getMae(UnifiedData(getData().getValue()) > 0.1);
    then
    alert.setAlertMessage("The MAE is over 0.1! It is an anomaly!");
end
0 голосов
/ 16 января 2020

Пробовали ли вы с этим:

Целое число ($ mae: DroolsUtils.stringToDouble (UnifiedData (getData (). GetValue ()))> 0,1)

...