From a382fd4fddacad298a57c11b985dcd2b9fde7fe1 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Wed, 3 Jan 2024 22:36:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.6.0=201.=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E7=B1=BB=E5=9E=8B=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...eEnum.java => JobExecuteStrategyEnum.java} | 16 ++++---- .../server/common/enums/TriggerTypeEnum.java | 30 ++++++++++++++ .../support/dispatch/JobExecutorActor.java | 13 +++--- .../support/dispatch/ScanJobTaskActor.java | 7 +++- .../dispatch/ScanWorkflowTaskActor.java | 10 +---- .../workflow/ConditionWorkflowExecutor.java | 8 +--- .../workflow/JobTaskWorkflowExecutor.java | 4 +- .../batch/JobTaskBatchGenerator.java | 5 +-- .../support/handler/JobTaskBatchHandler.java | 7 +--- .../support/handler/WorkflowBatchHandler.java | 5 +-- .../support/timer/ResidentJobTimerTask.java | 4 +- .../web/service/impl/JobServiceImpl.java | 20 ++++++++-- frontend/src/utils/jobEnum.js | 4 ++ frontend/src/views/job/form/JobForm.vue | 40 ++++++++----------- 14 files changed, 99 insertions(+), 74 deletions(-) rename easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/{JobTriggerTypeEnum.java => JobExecuteStrategyEnum.java} (66%) create mode 100644 easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/TriggerTypeEnum.java diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobTriggerTypeEnum.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobExecuteStrategyEnum.java similarity index 66% rename from easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobTriggerTypeEnum.java rename to easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobExecuteStrategyEnum.java index c7f86a99..b6900c0f 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobTriggerTypeEnum.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/JobExecuteStrategyEnum.java @@ -13,10 +13,10 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum JobTriggerTypeEnum { - AUTO(1, "自动触发"), - MANUAL(2, "手动触发"), - WORKFLOW(2, "DAG触发"), +public enum JobExecuteStrategyEnum { + AUTO(1, "自动执行"), + MANUAL(2, "手动执行"), + WORKFLOW(2, "DAG执行"), ; private final Integer type; @@ -29,10 +29,10 @@ public enum JobTriggerTypeEnum { * @return 对应的触发器类型枚举 * @throws EasyRetryServerException 当给定的类型不是有效的枚举类型时抛出异常 */ - public static JobTriggerTypeEnum get(Integer type) { - for (JobTriggerTypeEnum jobTriggerTypeEnum : JobTriggerTypeEnum.values()) { - if(jobTriggerTypeEnum.getType().equals(type)) { - return jobTriggerTypeEnum; + public static JobExecuteStrategyEnum get(Integer type) { + for (JobExecuteStrategyEnum jobExecuteStrategyEnum : JobExecuteStrategyEnum.values()) { + if(jobExecuteStrategyEnum.getType().equals(type)) { + return jobExecuteStrategyEnum; } } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/TriggerTypeEnum.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/TriggerTypeEnum.java new file mode 100644 index 00000000..0ff3809b --- /dev/null +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/enums/TriggerTypeEnum.java @@ -0,0 +1,30 @@ +package com.aizuda.easy.retry.server.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 1 CRON表达式 2 固定时间 3 工作流 + * @author xiaowoniu + * @date 2024-01-03 22:10:01 + * @since 2.6.0 + */ +@AllArgsConstructor +@Getter +public enum TriggerTypeEnum { + CRON(1, "CRON表达式"), + FIXED_TIME(2, "固定时间"), + WORKFLOW(3, "工作流"); + + private final Integer type; + private final String desc; + + public static TriggerTypeEnum get(Integer type) { + for (TriggerTypeEnum triggerTypeEnum : TriggerTypeEnum.values()) { + if (triggerTypeEnum.type.equals(type)) { + return triggerTypeEnum; + } + } + return null; + } +} diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java index ace339c6..645b98cd 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java @@ -3,7 +3,6 @@ package com.aizuda.easy.retry.server.job.task.support.dispatch; import akka.actor.AbstractActor; import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.context.SpringContext; import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum; @@ -13,7 +12,7 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.WaitStrategy; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.common.util.DateUtils; @@ -91,7 +90,7 @@ public class JobExecutorActor extends AbstractActor { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // 自动地校验任务必须是开启状态,手动触发无需校验 - if (JobTriggerTypeEnum.AUTO.getType().equals(taskExecute.getTriggerType())) { + if (JobExecuteStrategyEnum.AUTO.getType().equals(taskExecute.getTriggerType())) { queryWrapper.eq(Job::getJobStatus, StatusEnum.YES.getStatus()); } @@ -117,7 +116,7 @@ public class JobExecutorActor extends AbstractActor { try { WorkflowNodeTaskExecuteDTO taskExecuteDTO = new WorkflowNodeTaskExecuteDTO(); taskExecuteDTO.setWorkflowTaskBatchId(taskExecute.getWorkflowTaskBatchId()); - taskExecuteDTO.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + taskExecuteDTO.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); taskExecuteDTO.setParentId(taskExecute.getWorkflowNodeId()); taskExecuteDTO.setTaskBatchId(taskExecute.getTaskBatchId()); ActorRef actorRef = ActorGenerator.workflowTaskExecutorActor(); @@ -176,8 +175,8 @@ public class JobExecutorActor extends AbstractActor { private void doHandlerResidentTask(Job job, TaskExecuteDTO taskExecuteDTO) { if (Objects.isNull(job) - || JobTriggerTypeEnum.MANUAL.getType().equals(taskExecuteDTO.getTriggerType()) - || JobTriggerTypeEnum.WORKFLOW.getType().equals(taskExecuteDTO.getTriggerType()) + || JobExecuteStrategyEnum.MANUAL.getType().equals(taskExecuteDTO.getTriggerType()) + || JobExecuteStrategyEnum.WORKFLOW.getType().equals(taskExecuteDTO.getTriggerType()) // 是否是常驻任务 || Objects.equals(StatusEnum.NO.getStatus(), job.getResident()) ) { @@ -187,7 +186,7 @@ public class JobExecutorActor extends AbstractActor { JobTimerTaskDTO jobTimerTaskDTO = new JobTimerTaskDTO(); jobTimerTaskDTO.setJobId(taskExecuteDTO.getJobId()); jobTimerTaskDTO.setTaskBatchId(taskExecuteDTO.getTaskBatchId()); - jobTimerTaskDTO.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + jobTimerTaskDTO.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); ResidentJobTimerTask timerTask = new ResidentJobTimerTask(jobTimerTaskDTO, job); WaitStrategy waitStrategy = WaitStrategies.WaitStrategyEnum.getWaitStrategy(job.getTriggerType()); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java index dceefa18..83a2fcad 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java @@ -11,7 +11,8 @@ import com.aizuda.easy.retry.server.common.cache.CacheConsumerGroup; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.dto.PartitionTask; import com.aizuda.easy.retry.server.common.dto.ScanTask; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; +import com.aizuda.easy.retry.server.common.enums.TriggerTypeEnum; import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.common.util.PartitionTaskUtils; @@ -23,6 +24,7 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -90,7 +92,7 @@ public class ScanJobTaskActor extends AbstractActor { for (final JobTaskPrepareDTO waitExecJob : waitExecJobs) { // 执行预处理阶段 ActorRef actorRef = ActorGenerator.jobTaskPrepareActor(); - waitExecJob.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + waitExecJob.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); actorRef.tell(waitExecJob, actorRef); } } @@ -163,6 +165,7 @@ public class ScanJobTaskActor extends AbstractActor { Job::getId, Job::getNamespaceId) .eq(Job::getJobStatus, StatusEnum.YES.getStatus()) .eq(Job::getDeleted, StatusEnum.NO.getStatus()) + .ne(Job::getTriggerType,TriggerTypeEnum.WORKFLOW.getType()) .in(Job::getBucketIndex, scanTask.getBuckets()) .le(Job::getNextTriggerAt, DateUtils.toNowMilli() + DateUtils.toEpochMilli(SystemConstants.SCHEDULE_PERIOD)) .ge(Job::getId, startId) diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanWorkflowTaskActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanWorkflowTaskActor.java index c64b92fe..a76fc2df 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanWorkflowTaskActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanWorkflowTaskActor.java @@ -11,19 +11,14 @@ import com.aizuda.easy.retry.server.common.cache.CacheConsumerGroup; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.dto.PartitionTask; import com.aizuda.easy.retry.server.common.dto.ScanTask; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.common.util.PartitionTaskUtils; -import com.aizuda.easy.retry.server.job.task.dto.JobPartitionTaskDTO; -import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO; import com.aizuda.easy.retry.server.job.task.dto.WorkflowPartitionTaskDTO; import com.aizuda.easy.retry.server.job.task.dto.WorkflowTaskPrepareDTO; -import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter; -import com.aizuda.easy.retry.server.job.task.support.cache.ResidentTaskCache; import com.aizuda.easy.retry.template.datasource.persistence.mapper.WorkflowMapper; -import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.Workflow; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -37,7 +32,6 @@ import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Objects; /** * @author xiaowoniu @@ -85,7 +79,7 @@ public class ScanWorkflowTaskActor extends AbstractActor { for (final WorkflowTaskPrepareDTO waitExecTask : waitExecWorkflows) { // 执行预处理阶段 ActorRef actorRef = ActorGenerator.workflowTaskPrepareActor(); - waitExecTask.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + waitExecTask.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); actorRef.tell(waitExecTask, actorRef); } } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java index ef272e8e..bce97e87 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java @@ -14,7 +14,7 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.dto.DecisionConfig; import com.aizuda.easy.retry.server.common.enums.ExpressionTypeEnum; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.enums.LogicalConditionEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; @@ -29,10 +29,6 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; import java.util.*; @@ -108,7 +104,7 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { try { WorkflowNodeTaskExecuteDTO taskExecuteDTO = new WorkflowNodeTaskExecuteDTO(); taskExecuteDTO.setWorkflowTaskBatchId(context.getWorkflowTaskBatchId()); - taskExecuteDTO.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + taskExecuteDTO.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); taskExecuteDTO.setParentId(context.getWorkflowNodeId()); taskExecuteDTO.setTaskBatchId(context.getTaskBatchId()); ActorRef actorRef = ActorGenerator.workflowTaskExecutorActor(); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java index c800a561..4e7dcf40 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/JobTaskWorkflowExecutor.java @@ -3,7 +3,7 @@ package com.aizuda.easy.retry.server.job.task.support.executor.workflow; import akka.actor.ActorRef; import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; @@ -26,7 +26,7 @@ public class JobTaskWorkflowExecutor extends AbstractWorkflowExecutor { protected void doExecute(WorkflowExecutorContext context) { // 生成任务批次 JobTaskPrepareDTO jobTaskPrepare = JobTaskConverter.INSTANCE.toJobTaskPrepare(context.getJob()); - jobTaskPrepare.setTriggerType(JobTriggerTypeEnum.WORKFLOW.getType()); + jobTaskPrepare.setTriggerType(JobExecuteStrategyEnum.WORKFLOW.getType()); jobTaskPrepare.setNextTriggerAt(DateUtils.toNowMilli() + DateUtils.toNowMilli() % 5000); jobTaskPrepare.setWorkflowNodeId(context.getWorkflowNodeId()); jobTaskPrepare.setWorkflowTaskBatchId(context.getWorkflowTaskBatchId()); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/generator/batch/JobTaskBatchGenerator.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/generator/batch/JobTaskBatchGenerator.java index fd190e0c..6adb08fe 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/generator/batch/JobTaskBatchGenerator.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/generator/batch/JobTaskBatchGenerator.java @@ -2,11 +2,10 @@ package com.aizuda.easy.retry.server.job.task.support.generator.batch; import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.job.task.dto.JobTimerTaskDTO; @@ -65,7 +64,7 @@ public class JobTaskBatchGenerator { try { WorkflowNodeTaskExecuteDTO taskExecuteDTO = new WorkflowNodeTaskExecuteDTO(); taskExecuteDTO.setWorkflowTaskBatchId(context.getWorkflowTaskBatchId()); - taskExecuteDTO.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + taskExecuteDTO.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); taskExecuteDTO.setParentId(context.getWorkflowNodeId()); ActorRef actorRef = ActorGenerator.workflowTaskExecutorActor(); actorRef.tell(taskExecuteDTO, actorRef); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java index 87d370d3..2ed88140 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java @@ -1,14 +1,11 @@ package com.aizuda.easy.retry.server.job.task.support.handler; import akka.actor.ActorRef; -import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.context.SpringContext; -import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; -import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.job.task.dto.CompleteJobBatchDTO; import com.aizuda.easy.retry.server.job.task.dto.WorkflowNodeTaskExecuteDTO; import com.aizuda.easy.retry.server.job.task.support.event.JobTaskFailAlarmEvent; @@ -83,7 +80,7 @@ public class JobTaskBatchHandler { try { WorkflowNodeTaskExecuteDTO taskExecuteDTO = new WorkflowNodeTaskExecuteDTO(); taskExecuteDTO.setWorkflowTaskBatchId(completeJobBatchDTO.getWorkflowTaskBatchId()); - taskExecuteDTO.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + taskExecuteDTO.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); taskExecuteDTO.setParentId(completeJobBatchDTO.getWorkflowNodeId()); // 这里取第一个的任务执行结果 taskExecuteDTO.setTaskBatchId(completeJobBatchDTO.getTaskBatchId()); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java index 922ce077..0670c807 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java @@ -7,10 +7,9 @@ import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.util.DateUtils; -import com.aizuda.easy.retry.server.common.util.GraphUtils; import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO; import com.aizuda.easy.retry.server.job.task.dto.WorkflowNodeTaskExecuteDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; @@ -265,7 +264,7 @@ public class WorkflowBatchHandler { // 生成任务批次 Job job = jobMapper.selectById(jobTaskBatch.getJobId()); JobTaskPrepareDTO jobTaskPrepare = JobTaskConverter.INSTANCE.toJobTaskPrepare(job); - jobTaskPrepare.setTriggerType(JobTriggerTypeEnum.WORKFLOW.getType()); + jobTaskPrepare.setTriggerType(JobExecuteStrategyEnum.WORKFLOW.getType()); jobTaskPrepare.setNextTriggerAt(DateUtils.toNowMilli()); jobTaskPrepare.setWorkflowNodeId(successor); jobTaskPrepare.setWorkflowTaskBatchId(workflowTaskBatchId); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/timer/ResidentJobTimerTask.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/timer/ResidentJobTimerTask.java index 95cfabf8..b5d8478d 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/timer/ResidentJobTimerTask.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/timer/ResidentJobTimerTask.java @@ -2,7 +2,7 @@ package com.aizuda.easy.retry.server.job.task.support.timer; import akka.actor.ActorRef; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO; import com.aizuda.easy.retry.server.job.task.dto.JobTimerTaskDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; @@ -30,7 +30,7 @@ public class ResidentJobTimerTask implements TimerTask { // 清除时间轮的缓存 JobTimerWheel.clearCache(jobTimerTaskDTO.getTaskBatchId()); JobTaskPrepareDTO jobTaskPrepare = JobTaskConverter.INSTANCE.toJobTaskPrepare(job); - jobTaskPrepare.setTriggerType(JobTriggerTypeEnum.AUTO.getType()); + jobTaskPrepare.setTriggerType(JobExecuteStrategyEnum.AUTO.getType()); // 执行预处理阶段 ActorRef actorRef = ActorGenerator.jobTaskPrepareActor(); actorRef.tell(jobTaskPrepare, actorRef); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java index e50c37a3..96b10147 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java @@ -6,7 +6,8 @@ import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.server.common.WaitStrategy; import com.aizuda.easy.retry.server.common.config.SystemProperties; -import com.aizuda.easy.retry.server.common.enums.JobTriggerTypeEnum; +import com.aizuda.easy.retry.server.common.enums.JobExecuteStrategyEnum; +import com.aizuda.easy.retry.server.common.enums.TriggerTypeEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.common.util.CronUtils; @@ -144,8 +145,11 @@ public class JobServiceImpl implements JobService { Job updateJob = updateJobResident(jobRequestVO); updateJob.setNamespaceId(job.getNamespaceId()); - // 非常驻任务 > 非常驻任务 - if (Objects.equals(job.getResident(), StatusEnum.NO.getStatus()) && Objects.equals(updateJob.getResident(), + // 工作流任务 + if (Objects.equals(jobRequestVO.getTriggerType(), TriggerTypeEnum.WORKFLOW.getType())) { + job.setNextTriggerAt(0L); + // 非常驻任务 > 非常驻任务 + } else if (Objects.equals(job.getResident(), StatusEnum.NO.getStatus()) && Objects.equals(updateJob.getResident(), StatusEnum.NO.getStatus())) { updateJob.setNextTriggerAt(calculateNextTriggerAt(jobRequestVO, DateUtils.toNowMilli())); } else if (Objects.equals(job.getResident(), StatusEnum.YES.getStatus()) && Objects.equals( @@ -164,6 +168,10 @@ public class JobServiceImpl implements JobService { } private static Long calculateNextTriggerAt(final JobRequestVO jobRequestVO, Long time) { + if (Objects.equals(jobRequestVO.getTriggerType(), TriggerTypeEnum.WORKFLOW.getType())) { + return 0L; + } + WaitStrategy waitStrategy = WaitStrategies.WaitStrategyEnum.getWaitStrategy(jobRequestVO.getTriggerType()); WaitStrategies.WaitStrategyContext waitStrategyContext = new WaitStrategies.WaitStrategyContext(); waitStrategyContext.setTriggerInterval(jobRequestVO.getTriggerInterval()); @@ -175,6 +183,10 @@ public class JobServiceImpl implements JobService { public Job updateJobResident(JobRequestVO jobRequestVO) { Job job = JobConverter.INSTANCE.toJob(jobRequestVO); job.setResident(StatusEnum.NO.getStatus()); + if (Objects.equals(jobRequestVO.getTriggerType(), TriggerTypeEnum.WORKFLOW.getType())) { + return job; + } + if (jobRequestVO.getTriggerType() == WaitStrategies.WaitStrategyEnum.FIXED.getType()) { if (Integer.parseInt(jobRequestVO.getTriggerInterval()) < 10) { job.setResident(StatusEnum.YES.getStatus()); @@ -218,7 +230,7 @@ public class JobServiceImpl implements JobService { JobTaskPrepareDTO jobTaskPrepare = JobTaskConverter.INSTANCE.toJobTaskPrepare(job); // 设置now表示立即执行 jobTaskPrepare.setNextTriggerAt(DateUtils.toNowMilli()); - jobTaskPrepare.setTriggerType(JobTriggerTypeEnum.MANUAL.getType()); + jobTaskPrepare.setTriggerType(JobExecuteStrategyEnum.MANUAL.getType()); // 创建批次 jobPrePareHandler.handler(jobTaskPrepare); diff --git a/frontend/src/utils/jobEnum.js b/frontend/src/utils/jobEnum.js index 2eeb5ded..637368c3 100644 --- a/frontend/src/utils/jobEnum.js +++ b/frontend/src/utils/jobEnum.js @@ -31,6 +31,10 @@ const enums = { '2': { 'name': '固定时间', 'color': '#f5a22d' + }, + '3': { + 'name': '工作流', + 'color': '#76f52d' } }, blockStrategy: { diff --git a/frontend/src/views/job/form/JobForm.vue b/frontend/src/views/job/form/JobForm.vue index 588f9947..fed66469 100644 --- a/frontend/src/views/job/form/JobForm.vue +++ b/frontend/src/views/job/form/JobForm.vue @@ -120,6 +120,14 @@ 'triggerInterval', {rules: [{ required: true, message: '请输入间隔时长', whitespace: true}]} ]" /> + + @@ -422,29 +430,6 @@ export default { const taskType = this.form.getFieldValue('taskType') if (taskType === '3') { this.visible = !this.visible - // const { form } = this - // if (this.formType === 'create') { - // return - // } - // - // form.setFieldsValue({ - // argsStr: '' - // }) - // - // console.log(this.argsStrValue) - // if (this.argsStrValue.length === 0) { - // return - // } - // - // // 将字符串分割成键值对数组 - // const keys = this.argsStrValue.map((item, index) => { - // this.count++ - // this.dynamicForm.getFieldDecorator(`sharding[${index}]`, { initialValue: item, preserve: true }) - // return index - // }) - // - // console.log(keys) - // this.dynamicForm.getFieldDecorator('keys', { initialValue: keys, preserve: true }) } }, getCron (cron) { @@ -456,7 +441,6 @@ export default { const { form } = this this.$refs['dynamicValidateForm'].validate(valid => { if (valid) { - console.log(this.dynamicValidateForm.domains) this.argsStrValue = this.dynamicValidateForm.domains.map((item, index) => item.value) form.setFieldsValue({ argsStr: this.dynamicValidateForm.domains.map((item, index) => `分区:${index}=>${item.value}`).join('; ') @@ -493,6 +477,10 @@ export default { values['argsStr'] = JSON.stringify(this.argsStrValue) } + if (this.triggerTypeValue === '3') { + values['triggerInterval'] = '0' + } + if (this.formType === 'create') { saveJob(values).then(res => { this.$message.success('任务新增完成') @@ -527,6 +515,10 @@ export default { this.triggerTypeValue = formData.triggerType this.taskTypeValue = formData.taskType + if (this.triggerTypeValue === '3') { + formData.triggerInterval = null + } + if (this.taskTypeValue === '3') { this.argsStrValue = JSON.parse(formData.argsStr) formData.argsStr = this.argsStrValue.map((item, index) => `分区:${index}=>${item}`).join(';')