From a55612e4f718fb35401b7393d2eb2862f725b37b Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Tue, 13 Jun 2023 13:26:05 +0800 Subject: [PATCH] Fix switch task use boolean type error (#14326) --- .../task/switchtask/SwitchLogicTask.java | 9 +++-- .../task/api/parser/ParameterUtils.java | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/switchtask/SwitchLogicTask.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/switchtask/SwitchLogicTask.java index 47f978ce76..038cff7797 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/switchtask/SwitchLogicTask.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/task/switchtask/SwitchLogicTask.java @@ -26,6 +26,7 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; import org.apache.dolphinscheduler.plugin.task.api.model.Property; import org.apache.dolphinscheduler.plugin.task.api.model.SwitchResultVo; import org.apache.dolphinscheduler.plugin.task.api.parameters.SwitchParameters; +import org.apache.dolphinscheduler.plugin.task.api.parser.ParameterUtils; import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; import org.apache.dolphinscheduler.server.master.exception.LogicTaskInitializeException; import org.apache.dolphinscheduler.server.master.exception.MasterTaskExecuteException; @@ -151,9 +152,11 @@ public class SwitchLogicTask extends BaseSyncLogicTask { if (property == null) { return ""; } - String value = property.getValue(); - if (!org.apache.commons.lang3.math.NumberUtils.isCreatable(value)) { - value = "\"" + value + "\""; + String value; + if (ParameterUtils.isNumber(property) || ParameterUtils.isBoolean(property)) { + value = "" + ParameterUtils.getParameterValue(property); + } else { + value = "\"" + ParameterUtils.getParameterValue(property) + "\""; } log.info("paramName:{},paramValue:{}", paramName, value); content = content.replace("${" + paramName + "}", value); diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/ParameterUtils.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/ParameterUtils.java index aca4ed267a..920b635572 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/ParameterUtils.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/ParameterUtils.java @@ -28,6 +28,7 @@ import org.apache.dolphinscheduler.plugin.task.api.model.Property; import org.apache.commons.lang3.StringUtils; +import java.io.Serializable; import java.sql.PreparedStatement; import java.util.Date; import java.util.HashMap; @@ -149,6 +150,40 @@ public class ParameterUtils { } } + public static Serializable getParameterValue(Property property) { + if (property == null) { + return null; + } + String value = property.getValue(); + switch (property.getType()) { + case LONG: + return Long.valueOf(value); + case FLOAT: + return Float.valueOf(value); + case INTEGER: + return Integer.valueOf(value); + case DOUBLE: + return Double.valueOf(value); + case BOOLEAN: + return Boolean.valueOf(value); + // todo: add date type, list type.... + default: + return value; + } + } + + public static boolean isNumber(Property property) { + return property != null && + (DataType.INTEGER.equals(property.getType()) + || DataType.LONG.equals(property.getType()) + || DataType.FLOAT.equals(property.getType()) + || DataType.DOUBLE.equals(property.getType())); + } + + public static boolean isBoolean(Property property) { + return property != null && DataType.BOOLEAN.equals(property.getType()); + } + public static String expandListParameter(Map params, String sql) { Map expandMap = new HashMap<>(); if (params == null || params.isEmpty()) {