From acc12881801e57f4dad091636b12d9de29b38f60 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Sun, 23 Feb 2025 19:47:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(1.4.0-beta1):=201.=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E4=BB=BB=E5=8A=A1=E6=89=B9=E9=87=8F=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql/snail_job_mysql.sql | 2 +- .../web/controller/RetryController.java | 2 +- .../web/model/request/RetrySaveRequestVO.java | 2 +- .../server/web/service/RetryService.java | 2 +- .../web/service/impl/RetryServiceImpl.java | 40 +++++++++++-------- .../service/impl/RetryTaskServiceImpl.java | 9 +++-- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/doc/sql/snail_job_mysql.sql b/doc/sql/snail_job_mysql.sql index 06574d470..b750b2e79 100644 --- a/doc/sql/snail_job_mysql.sql +++ b/doc/sql/snail_job_mysql.sql @@ -150,7 +150,7 @@ CREATE TABLE `sj_retry_task` `task_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '重试状态', `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、重试数据 2、回调数据', `operation_reason` tinyint(4) NOT NULL DEFAULT 0 COMMENT '操作原因', - `client_info` varchar(128) DEFAULT NULL COMMENT '客户端地址 clientId#ip:port', + `client_info` varchar(128) DEFAULT NULL COMMENT '客户端地址 clientId#ip:port', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryController.java index 7b99434fd..07607c5e8 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryController.java @@ -41,7 +41,7 @@ public class RetryController { @LoginRequired @PutMapping("status") public int updateRetryTaskStatus(@RequestBody RetryUpdateStatusRequestVO retryUpdateStatusRequestVO) { - return retryService.updateRetryTaskStatus(retryUpdateStatusRequestVO); + return retryService.updateRetryStatus(retryUpdateStatusRequestVO); } @LoginRequired diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/RetrySaveRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/RetrySaveRequestVO.java index dbc62998b..dd0e442a7 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/RetrySaveRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/RetrySaveRequestVO.java @@ -1,8 +1,8 @@ package com.aizuda.snailjob.server.web.model.request; import com.aizuda.snailjob.common.core.enums.RetryStatusEnum; +import jakarta.validation.constraints.NotBlank; import lombok.Data; -import org.hibernate.validator.constraints.NotBlank; /** * 重试数据模型 diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/RetryService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/RetryService.java index de7cda9cf..922b38516 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/RetryService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/RetryService.java @@ -30,7 +30,7 @@ public interface RetryService { * @param retryUpdateStatusRequestVO 更新重试任务状态请求模型 * @return */ - int updateRetryTaskStatus(RetryUpdateStatusRequestVO retryUpdateStatusRequestVO); + int updateRetryStatus(RetryUpdateStatusRequestVO retryUpdateStatusRequestVO); /** * 手动新增重试任务 diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryServiceImpl.java index 221cd43b0..b45cd4ca8 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryServiceImpl.java @@ -54,8 +54,10 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; import java.time.LocalDateTime; import java.util.*; @@ -83,6 +85,8 @@ public class RetryServiceImpl implements RetryService { private List taskGenerators; @Autowired private RetryTaskLogMessageMapper retryTaskLogMessageMapper; + @Autowired + private TransactionTemplate transactionTemplate; @Override public PageResult> getRetryPage(RetryQueryVO queryVO) { @@ -141,7 +145,7 @@ public class RetryServiceImpl implements RetryService { @Override @Transactional - public int updateRetryTaskStatus(RetryUpdateStatusRequestVO requestVO) { + public int updateRetryStatus(RetryUpdateStatusRequestVO requestVO) { RetryStatusEnum retryStatusEnum = RetryStatusEnum.getByStatus(requestVO.getRetryStatus()); if (Objects.isNull(retryStatusEnum)) { @@ -178,13 +182,6 @@ public class RetryServiceImpl implements RetryService { retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli()); SnailJobLog.REMOTE.info("=============手动操作完成============. <|>{}<|>", retryLogMetaDTO); } -// -// RetryTask retryTask = new RetryTask(); -// retryTask.setTaskStatus(requestVO.getRetryStatus()); -// retryTaskMapper.update(retryTask, new LambdaUpdateWrapper() -// .eq(RetryTask::getNamespaceId, namespaceId) -// .eq(RetryTask::getUniqueId, retry.getUniqueId()) -// .eq(RetryTask::getGroupName, retry.getGroupName())); retry.setUpdateDt(LocalDateTime.now()); return retryTaskAccess.updateById(retry); @@ -351,16 +348,25 @@ public class RetryServiceImpl implements RetryService { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - map.forEach(((sceneName, retryTaskDTOS) -> { - TaskContext taskContext = new TaskContext(); - taskContext.setSceneName(sceneName); - taskContext.setGroupName(parseLogsVO.getGroupName()); - taskContext.setNamespaceId(namespaceId); - taskContext.setInitStatus(parseLogsVO.getRetryStatus()); - taskContext.setTaskInfos(TaskContextConverter.INSTANCE.convert(retryTaskDTOS)); + transactionTemplate.execute((status -> { + map.forEach(((sceneName, retryTaskDTOS) -> { + TaskContext taskContext = new TaskContext(); + taskContext.setSceneName(sceneName); + taskContext.setGroupName(parseLogsVO.getGroupName()); + taskContext.setNamespaceId(namespaceId); + taskContext.setInitStatus(parseLogsVO.getRetryStatus()); + taskContext.setTaskInfos(TaskContextConverter.INSTANCE.convert(retryTaskDTOS)); - // 生成任务 - taskGenerator.taskGenerator(taskContext); + // 生成任务 + try { + taskGenerator.taskGenerator(taskContext); + } catch (DuplicateKeyException e) { + throw new SnailJobServerException("namespaceId:[{}] groupName:[{}] sceneName:[{}] 任务已经存在", + namespaceId, parseLogsVO.getGroupName(), sceneName); + } + + })); + return Boolean.TRUE; })); return waitInsertList.size(); diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryTaskServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryTaskServiceImpl.java index c7dd6ae1b..f2ade4acb 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryTaskServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryTaskServiceImpl.java @@ -197,7 +197,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { List retryTasks = retryTaskMapper.selectList( new LambdaQueryWrapper() - .in(RetryTask::getTaskStatus, List.of(RetryStatusEnum.FINISH.getStatus(), RetryStatusEnum.MAX_COUNT.getStatus())) + .in(RetryTask::getTaskStatus, RetryTaskStatusEnum.TERMINAL_STATUS_SET) .eq(RetryTask::getNamespaceId, namespaceId) .in(RetryTask::getId, ids)); Assert.notEmpty(retryTasks, () -> new SnailJobServerException("数据不存在")); @@ -216,8 +216,11 @@ public class RetryTaskServiceImpl implements RetryTaskService { @Override public Boolean stopById(Long id) { - Retry retry = retryMapper.selectById(id); - Assert.notNull(retry, () -> new SnailJobServerException("没有可执行的任务")); + RetryTask retryTask = retryTaskMapper.selectById(id); + Assert.notNull(retryTask, () -> new SnailJobServerException("没有可执行的任务")); + + Retry retry = retryMapper.selectById(retryTask.getRetryId()); + Assert.notNull(retry, () -> new SnailJobServerException("任务不存在")); TaskStopJobDTO taskStopJobDTO = RetryConverter.INSTANCE.toTaskStopJobDTO(retry); taskStopJobDTO.setOperationReason(RetryOperationReasonEnum.MANNER_STOP.getReason());