diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/handler/RestExceptionHandler.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/handler/RestExceptionHandler.java index 46aba9edf..5e6267d9e 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/handler/RestExceptionHandler.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/handler/RestExceptionHandler.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.method.annotation.HandlerMethodValidationException; import java.util.List; import java.util.Objects; @@ -133,6 +134,23 @@ public class RestExceptionHandler { return null; } + /** + * Contrller 参数检验错误 + * + * @param e 异常对象 + * @return HttpResult + */ + @ExceptionHandler(HandlerMethodValidationException.class) + public Result onHandlerMethodValidationException(HandlerMethodValidationException e) { + Object[] detailMessageArguments = e.getDetailMessageArguments(); + if (detailMessageArguments != null && detailMessageArguments.length > 0) { + return new Result(0, detailMessageArguments[0].toString()); + } + + return new Result<>("参数校验失败"); + + } + /** * 400错误 */ diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobBatchController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobBatchController.java index cd73bcb5f..73f2f8742 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobBatchController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobBatchController.java @@ -5,7 +5,6 @@ import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.JobBatchQueryVO; import com.aizuda.snailjob.server.web.model.response.JobBatchResponseVO; import com.aizuda.snailjob.server.web.service.JobBatchService; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; import lombok.RequiredArgsConstructor; @@ -52,10 +51,10 @@ public class JobBatchController { @DeleteMapping("/ids") @LoginRequired - public Boolean deleteJobBatchByIds(@RequestBody @Valid - @NotEmpty(message = "ids不能为空") - @Size(max = 100, message = "最多删除5个") - Set ids) { + public Boolean deleteJobBatchByIds(@RequestBody + @NotEmpty(message = "ids不能为空") + @Size(max = 100, message = "最多删除 {max} 个") + Set ids) { return jobBatchService.deleteJobBatchByIds(ids); } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobController.java index 895393862..b5914e523 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobController.java @@ -11,7 +11,6 @@ import com.aizuda.snailjob.server.web.model.response.JobResponseVO; import com.aizuda.snailjob.server.web.service.JobService; import com.aizuda.snailjob.server.web.util.ExportUtils; import com.aizuda.snailjob.server.web.util.ImportUtils; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -75,7 +74,7 @@ public class JobController { @DeleteMapping("/ids") @LoginRequired - public Boolean deleteJobById(@RequestBody @Valid @NotEmpty(message = "ids不能为空") Set ids) { + public Boolean deleteJobById(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return jobService.deleteJobByIds(ids); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyConfigController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyConfigController.java index 78f0aab73..7631df832 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyConfigController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyConfigController.java @@ -6,6 +6,7 @@ import com.aizuda.snailjob.server.web.model.request.NotifyConfigQueryVO; import com.aizuda.snailjob.server.web.model.request.NotifyConfigRequestVO; import com.aizuda.snailjob.server.web.model.response.NotifyConfigResponseVO; import com.aizuda.snailjob.server.web.service.NotifyConfigService; +import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -57,7 +58,7 @@ public class NotifyConfigController { @LoginRequired @DeleteMapping("ids") - public Boolean batchDeleteNotify(@RequestBody Set ids) { + public Boolean batchDeleteNotify(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return notifyConfigService.batchDeleteNotify(ids); } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyRecipientController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyRecipientController.java index 2aa264d1a..bdbea40e4 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyRecipientController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/NotifyRecipientController.java @@ -12,6 +12,7 @@ import com.aizuda.snailjob.server.web.model.response.NotifyRecipientResponseVO; import com.aizuda.snailjob.server.web.service.NotifyRecipientService; import com.aizuda.snailjob.server.web.util.ExportUtils; import com.aizuda.snailjob.server.web.util.ImportUtils; +import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -63,7 +64,7 @@ public class NotifyRecipientController { @DeleteMapping("/ids") @LoginRequired - public Boolean batchDeleteByIds(@RequestBody Set ids) { + public Boolean batchDeleteByIds(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return notifyRecipientService.batchDeleteByIds(ids); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryTaskLogController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryTaskLogController.java index b618ae4ef..beaa1cc43 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryTaskLogController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/RetryTaskLogController.java @@ -7,7 +7,6 @@ import com.aizuda.snailjob.server.web.model.request.RetryTaskLogQueryVO; import com.aizuda.snailjob.server.web.model.response.RetryTaskLogMessageResponseVO; import com.aizuda.snailjob.server.web.model.response.RetryTaskLogResponseVO; import com.aizuda.snailjob.server.web.service.RetryTaskLogService; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -54,7 +53,7 @@ public class RetryTaskLogController { @LoginRequired @DeleteMapping("ids") - public Boolean batchDelete(@RequestBody @Valid @NotEmpty(message = "ids不能为空") Set ids) { + public Boolean batchDelete(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return retryTaskLogService.batchDelete(ids); } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SceneConfigController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SceneConfigController.java index c047d3d29..a53118bf8 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SceneConfigController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SceneConfigController.java @@ -10,7 +10,6 @@ import com.aizuda.snailjob.server.web.model.response.SceneConfigResponseVO; import com.aizuda.snailjob.server.web.service.SceneConfigService; import com.aizuda.snailjob.server.web.util.ExportUtils; import com.aizuda.snailjob.server.web.util.ImportUtils; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; @@ -87,7 +86,7 @@ public class SceneConfigController { @LoginRequired @DeleteMapping("/ids") - public boolean deleteByIds(@RequestBody @Valid @NotEmpty(message = "ids不能为空") Set ids) { + public boolean deleteByIds(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return sceneConfigService.deleteByIds(ids); } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowBatchController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowBatchController.java index 962ed897a..b7f562383 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowBatchController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowBatchController.java @@ -7,7 +7,6 @@ import com.aizuda.snailjob.server.web.model.request.WorkflowBatchQueryVO; import com.aizuda.snailjob.server.web.model.response.WorkflowBatchResponseVO; import com.aizuda.snailjob.server.web.model.response.WorkflowDetailResponseVO; import com.aizuda.snailjob.server.web.service.WorkflowBatchService; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; import lombok.RequiredArgsConstructor; @@ -47,10 +46,10 @@ public class WorkflowBatchController { @DeleteMapping("/ids") @LoginRequired(role = RoleEnum.USER) - public Boolean deleteByIds(@RequestBody @Valid - @NotEmpty(message = "ids不能为空") - @Size(max = 100, message = "最多删除5个") - Set ids) { + public Boolean deleteByIds(@RequestBody + @NotEmpty(message = "ids不能为空") + @Size(max = 100, message = "最多删除 {max} 个") + Set ids) { return workflowBatchService.deleteByIds(ids); } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java index ed7aa093c..4e9a8e789 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java @@ -2,7 +2,6 @@ package com.aizuda.snailjob.server.web.controller; import cn.hutool.core.lang.Pair; import com.aizuda.snailjob.common.core.annotation.OriginalControllerReturnValue; -import com.aizuda.snailjob.server.common.dto.DecisionConfig; import com.aizuda.snailjob.server.web.annotation.LoginRequired; import com.aizuda.snailjob.server.web.annotation.RoleEnum; import com.aizuda.snailjob.server.web.model.base.PageResult; @@ -15,7 +14,6 @@ import com.aizuda.snailjob.server.web.model.response.WorkflowResponseVO; import com.aizuda.snailjob.server.web.service.WorkflowService; import com.aizuda.snailjob.server.web.util.ExportUtils; import com.aizuda.snailjob.server.web.util.ImportUtils; -import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; @@ -72,7 +70,7 @@ public class WorkflowController { @DeleteMapping("/ids") @LoginRequired(role = RoleEnum.USER) - public Boolean deleteByIds(@RequestBody @Valid @NotEmpty(message = "ids不能为空") Set ids) { + public Boolean deleteByIds(@RequestBody @NotEmpty(message = "ids不能为空") Set ids) { return workflowService.deleteByIds(ids); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/handler/JobHandler.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/handler/JobHandler.java index 9588dffc0..4f5656b26 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/handler/JobHandler.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/handler/JobHandler.java @@ -155,9 +155,9 @@ public class JobHandler { } WorkflowTaskBatch workflowTaskBatch = workflowTaskBatchMapper.selectOne( - new LambdaQueryWrapper() - .select(WorkflowTaskBatch::getWfContext) - .eq(WorkflowTaskBatch::getId, workflowTaskBatchId) + new LambdaQueryWrapper() + .select(WorkflowTaskBatch::getWfContext) + .eq(WorkflowTaskBatch::getId, workflowTaskBatchId) ); if (Objects.isNull(workflowTaskBatch)) { @@ -170,29 +170,24 @@ public class JobHandler { /** * 批次删除定时任务批次 * - * @param ids 任务批次id + * @param ids 任务批次id * @param namespaceId 命名空间 */ @Transactional public void deleteJobTaskBatchByIds(Set ids, String namespaceId) { + // 1. 删除任务批次 job_task_batch + Assert.isTrue(ids.size() == jobTaskBatchMapper.deleteByIds(ids), + () -> new SnailJobServerException("删除任务批次失败")); - Assert.isTrue(ids.size() == jobTaskBatchMapper.delete( - new LambdaQueryWrapper() - .in(JobTaskBatch::getId, ids) - ), () -> new SnailJobServerException("删除任务批次失败")); + // 2. 删除任务实例 job_task + jobTaskMapper.delete(new LambdaQueryWrapper() + .eq(JobTask::getNamespaceId, namespaceId) + .in(JobTask::getTaskBatchId, ids)); - - Assert.isTrue(ids.size() == jobTaskMapper.delete( - new LambdaQueryWrapper() - .eq(JobTask::getNamespaceId, namespaceId) - .in(JobTask::getId, ids) - ), () -> new SnailJobServerException("删除任务批次失败")); - - // 删除日志信息 + // 3. 删除调度日志 job_log_message jobLogMessageMapper.delete(new LambdaQueryWrapper() .eq(JobLogMessage::getNamespaceId, namespaceId) - .in(JobLogMessage::getTaskId, ids) + .in(JobLogMessage::getTaskBatchId, ids) ); - } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowBatchServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowBatchServiceImpl.java index 1549869ce..dd9eb215e 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowBatchServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowBatchServiceImpl.java @@ -233,11 +233,10 @@ public class WorkflowBatchServiceImpl implements WorkflowBatchService { public Boolean deleteByIds(Set ids) { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - Assert.isTrue(ids.size() == workflowTaskBatchMapper.delete( - new LambdaQueryWrapper() + Assert.isTrue(ids.size() == workflowTaskBatchMapper.delete(new LambdaQueryWrapper() .eq(WorkflowTaskBatch::getNamespaceId, namespaceId) - .in(WorkflowTaskBatch::getId, ids) - ), () -> new SnailJobServerException("删除工作流任务失败, 请检查任务状态是否关闭状态")); + .in(WorkflowTaskBatch::getId, ids)), + () -> new SnailJobServerException("删除工作流任务失败, 请检查任务状态是否关闭状态")); List jobTaskBatches = jobTaskBatchMapper.selectList(new LambdaQueryWrapper() .eq(JobTaskBatch::getNamespaceId, namespaceId)