From be12ed7e783458824767097e3e796c519b4dfeb2 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Mon, 26 Feb 2024 23:25:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=203.1.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E9=87=8D=E8=AF=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stop/AbstractJobTaskStopHandler.java | 10 +++++++ .../web/service/handler/JobHandler.java | 30 ++++++++++++++----- .../service/impl/WorkflowNodeServiceImpl.java | 3 ++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/AbstractJobTaskStopHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/AbstractJobTaskStopHandler.java index e2e7df2ef..23412bf54 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/AbstractJobTaskStopHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/AbstractJobTaskStopHandler.java @@ -1,13 +1,16 @@ package com.aizuda.easy.retry.server.job.task.support.stop; import akka.actor.ActorRef; +import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO; import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler; +import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskBatchMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +27,8 @@ public abstract class AbstractJobTaskStopHandler implements JobTaskStopHandler, @Autowired private JobTaskMapper jobTaskMapper; + @Autowired + private JobTaskBatchMapper jobTaskBatchMapper; protected abstract void doStop(TaskStopJobContext context); @@ -40,6 +45,11 @@ public abstract class AbstractJobTaskStopHandler implements JobTaskStopHandler, List jobTasks = jobTaskMapper.selectList(queryWrapper); if (CollectionUtils.isEmpty(jobTasks)) { + // 若没有任务项,直接变更状态为已停止 + JobTaskBatch jobTaskBatch = new JobTaskBatch(); + jobTaskBatch.setId(context.getTaskBatchId()); + jobTaskBatch.setTaskBatchStatus(JobTaskBatchStatusEnum.STOP.getStatus()); + jobTaskBatchMapper.updateById(jobTaskBatch); return; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/JobHandler.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/JobHandler.java index 2fbb44333..0b4d4f762 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/JobHandler.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/JobHandler.java @@ -1,11 +1,15 @@ package com.aizuda.easy.retry.server.web.service.handler; +import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; import com.aizuda.easy.retry.client.model.ExecuteResult; 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.server.common.akka.ActorGenerator; +import com.aizuda.easy.retry.server.common.enums.JobTaskExecutorSceneEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; +import com.aizuda.easy.retry.server.job.task.dto.TaskExecuteDTO; import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler; import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter; import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler; @@ -24,6 +28,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.List; @@ -60,16 +65,27 @@ public class JobHandler { Assert.notNull(job, () -> new EasyRetryServerException("job can not be null.")); List jobTasks = jobTaskMapper.selectList(new LambdaQueryWrapper() - .in(JobTask::getTaskStatus, Lists.newArrayList( - JobTaskStatusEnum.FAIL.getStatus(), - JobTaskStatusEnum.STOP.getStatus(), - JobTaskStatusEnum.CANCEL.getStatus() - ) - ) .eq(JobTask::getTaskBatchId, taskBatchId)); - Assert.notEmpty(jobTasks, () -> new EasyRetryServerException("job task is empty.")); + + // 若任务项为空则生成 + if (CollectionUtils.isEmpty(jobTasks)) { + TaskExecuteDTO taskExecuteDTO = new TaskExecuteDTO(); + taskExecuteDTO.setTaskBatchId(taskBatchId); + taskExecuteDTO.setJobId(jobTaskBatch.getJobId()); + taskExecuteDTO.setTaskExecutorScene(JobTaskExecutorSceneEnum.MANUAL_JOB.getType()); + taskExecuteDTO.setWorkflowTaskBatchId(workflowTaskBatchId); + taskExecuteDTO.setWorkflowNodeId(workflowNodeId); + ActorRef actorRef = ActorGenerator.jobTaskExecutorActor(); + actorRef.tell(taskExecuteDTO, actorRef); + + return Boolean.TRUE; + } for (JobTask jobTask : jobTasks) { + if (jobTask.getTaskStatus() == JobTaskStatusEnum.RUNNING.getStatus()) { + continue; + } + jobTask.setTaskStatus(JobTaskStatusEnum.RUNNING.getStatus()); Assert.isTrue(jobTaskMapper.updateById(jobTask) > 0, () -> new EasyRetryServerException("update job task to running failed.")); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowNodeServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowNodeServiceImpl.java index 9894f47bf..4ee4b5072 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowNodeServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowNodeServiceImpl.java @@ -30,6 +30,7 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.List; @@ -49,6 +50,7 @@ public class WorkflowNodeServiceImpl implements WorkflowNodeService { private final JobHandler jobHandler; @Override + @Transactional public Boolean stop(Long nodeId, Long workflowTaskBatchId) { // 调用JOB的停止接口 List jobTaskBatches = jobTaskBatchMapper.selectList( @@ -78,6 +80,7 @@ public class WorkflowNodeServiceImpl implements WorkflowNodeService { } @Override + @Transactional public Boolean retry(Long nodeId, Long workflowTaskBatchId) { // 调用JOB的停止接口