diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java index f396f5df1d..34116dc693 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/CronUtils.java @@ -34,6 +34,14 @@ public class CronUtils { return date; } + public static String cron() { + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.SECOND, 5); + return instance.get(Calendar.SECOND) + " " + + instance.get(Calendar.MINUTE) + " " + + instance.get(Calendar.HOUR_OF_DAY) + " * * ?"; + } + public static String cron(Integer rateType, String rateVal) { if (rateType == 0) { return rateVal; diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java index ffa7d2b056..083576fde7 100644 --- a/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeTaskExecutor.java @@ -14,6 +14,8 @@ import java.util.Date; @Component public class DeTaskExecutor { + protected static final String IS_TEMP_TASK = "isTempTask"; + @Resource private ScheduleManager scheduleManager; @@ -22,6 +24,11 @@ public class DeTaskExecutor { return false; } + @XpackInteract(value = "xpackTaskExecutor", replace = true) + public boolean executeTemplate(Long taskId) { + return false; + } + public void addOrUpdateTask(Long taskId, String cron, Long startTime, Long endTime) { if (CronUtils.taskExpire(endTime)) { return; @@ -31,11 +38,29 @@ public class DeTaskExecutor { TriggerKey triggerKey = new TriggerKey(key, key); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("taskId", taskId); + jobDataMap.put(IS_TEMP_TASK, false); Date end = null; if (ObjectUtils.isNotEmpty(endTime)) end = new Date(endTime); scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackScheduleJob.class, cron, new Date(startTime), end, jobDataMap); } + public void fireNow(Long taskId) throws Exception{ + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, key); + scheduleManager.fireNow(jobKey); + } + + public void addTempTask(Long taskId, Long startTime) { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, key); + TriggerKey triggerKey = new TriggerKey(key, key); + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put(IS_TEMP_TASK, true); + String cron = CronUtils.cron(); + jobDataMap.put("taskId", taskId); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackScheduleJob.class, cron, new Date(startTime), null, jobDataMap); + } + public void removeTask(Long taskId) { String key = taskId.toString(); JobKey jobKey = new JobKey(key); diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java index 2a0f1903b1..2b57f6cc2f 100644 --- a/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackScheduleJob.java @@ -11,14 +11,24 @@ import java.util.Objects; public class DeXpackScheduleJob implements Job { @Resource private DeTaskExecutor deTaskExecutor; + @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { Trigger trigger = jobExecutionContext.getTrigger(); JobKey jobKey = trigger.getJobKey(); JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); Long taskId = jobDataMap.getLong("taskId"); - if (!deTaskExecutor.execute(taskId)) { + boolean isTempTask = jobDataMap.getBoolean("isTempTask"); + boolean taskLoaded = false; + if (isTempTask) { + taskLoaded = deTaskExecutor.executeTemplate(taskId); + } else { + taskLoaded = deTaskExecutor.execute(taskId); + } + if (!taskLoaded) { Objects.requireNonNull(CommonBeanFactory.getBean(ScheduleManager.class)).removeJob(jobKey, trigger.getKey()); } + + } } diff --git a/de-xpack b/de-xpack index d8dce708b2..1ce831779b 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit d8dce708b28bd0d0cbecc5db2c61a0693198b079 +Subproject commit 1ce831779b69626bdb865b36454b7f91ce17eeb7 diff --git a/sdk/common/src/main/java/io/dataease/constant/ReportLastStatusEnum.java b/sdk/common/src/main/java/io/dataease/constant/ReportLastStatusEnum.java new file mode 100644 index 0000000000..69a33aff9f --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/ReportLastStatusEnum.java @@ -0,0 +1,28 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum ReportLastStatusEnum { + EMPTY(0), RUN(1), SUCCESS(2), FAIL(3); + + private Integer flag; + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + + ReportLastStatusEnum() { + } + + ReportLastStatusEnum(Integer flag) { + this.flag = flag; + } + + public static ReportLastStatusEnum fromValue(Integer flag) { + return Arrays.stream(values()).filter(v -> v.flag.equals(flag)).findFirst().get(); + } +} diff --git a/sdk/common/src/main/java/io/dataease/constant/ReportTaskEnum.java b/sdk/common/src/main/java/io/dataease/constant/ReportTaskEnum.java new file mode 100644 index 0000000000..ec7447817c --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/ReportTaskEnum.java @@ -0,0 +1,29 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum ReportTaskEnum { + + WAIT(0), SEND(1), STOP(2), FINISH(3); + + private Integer flag; + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + + ReportTaskEnum(Integer flag) { + this.flag = flag; + } + + ReportTaskEnum() { + } + + public static ReportTaskEnum fromValue(Integer flag) { + return Arrays.stream(values()).filter(v -> v.flag.equals(flag)).findFirst().get(); + } +}