Browse Source

fix time cover

CalvinKirs 4 years ago
parent
commit
7df03d91a1

+ 18 - 1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java

@@ -17,11 +17,14 @@
 
 package org.apache.dolphinscheduler.server.worker.task.shell;
 
+import static java.util.Calendar.DAY_OF_MONTH;
+
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.CommandType;
 import org.apache.dolphinscheduler.common.process.Property;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
 import org.apache.dolphinscheduler.common.task.shell.ShellParameters;
+import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
@@ -38,6 +41,7 @@ import java.nio.file.StandardOpenOption;
 import java.nio.file.attribute.FileAttribute;
 import java.nio.file.attribute.PosixFilePermission;
 import java.nio.file.attribute.PosixFilePermissions;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -136,7 +140,20 @@ public class ShellTask extends AbstractTask {
             CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
             taskExecutionContext.getScheduleTime());
         // replace variable TIME with $[YYYYmmddd...] in shell file when history run job and batch complement job
-        script = ParameterUtils.convertParameterPlaceholders(script, ParamUtils.convert(paramsMap));
+        if (taskExecutionContext.getScheduleTime() != null) {
+            if (null == paramsMap) {
+                paramsMap = new HashMap<>();
+            }
+            String dateTime = DateUtils.format(DateUtils.add(taskExecutionContext.getScheduleTime(), DAY_OF_MONTH, 1), Constants.PARAMETER_FORMAT_TIME);
+            Property p = new Property();
+            p.setValue(dateTime);
+            p.setProp(Constants.PARAMETER_DATETIME);
+            paramsMap.put(Constants.PARAMETER_DATETIME, p);
+        }
+        if (null != paramsMap) {
+            script = ParameterUtils.convertParameterPlaceholders(script, ParamUtils.convert(paramsMap));
+        }
+
         shellParameters.setRawScript(script);
 
         logger.info("raw script : {}", shellParameters.getRawScript());