From 691c5033f82853257d0b792bc9f87c3597380430 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Sat, 1 Jun 2024 14:15:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.0.0):=20=E4=BF=AE=E5=A4=8D=E7=BB=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E9=97=AE=E9=A2=98=E5=92=8C?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/SystemConstants.java | 5 +++++ .../web/controller/GroupConfigController.java | 7 +++--- .../server/web/controller/JobController.java | 7 ++---- .../model/request/GroupConfigRequestVO.java | 2 +- .../request/GroupStatusUpdateRequestVO.java | 22 +++++++++++++++++++ ...tVO.java => JobStatusUpdateRequestVO.java} | 2 +- .../server/web/service/JobService.java | 5 ++--- .../web/service/impl/JobServiceImpl.java | 6 ++--- .../service/impl/NamespaceServiceImpl.java | 19 +++++++++++----- 9 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupStatusUpdateRequestVO.java rename snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/{JobUpdateJobStatusRequestVO.java => JobStatusUpdateRequestVO.java} (89%) diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java index 998d96837..d7dfd04c6 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java @@ -177,4 +177,9 @@ public interface SystemConstants { * Webhook告警、工作流回调请求密钥 */ String SECRET = "secret"; + + /** + * 组名、场景名、空间ID通用正则 + */ + String REGEXP = "^[A-Za-z0-9_-]{1,64}$"; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java index eb6b42330..180e7cb8c 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java @@ -8,6 +8,7 @@ import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.ExportGroupVO; import com.aizuda.snailjob.server.web.model.request.GroupConfigQueryVO; import com.aizuda.snailjob.server.web.model.request.GroupConfigRequestVO; +import com.aizuda.snailjob.server.web.model.request.GroupStatusUpdateRequestVO; import com.aizuda.snailjob.server.web.model.response.GroupConfigResponseVO; import com.aizuda.snailjob.server.web.service.GroupConfigService; import com.aizuda.snailjob.server.web.util.ExportUtils; @@ -48,9 +49,9 @@ public class GroupConfigController { @LoginRequired(role = RoleEnum.ADMIN) @PutMapping("status") - public Boolean updateGroupStatus(@RequestBody @Validated GroupConfigRequestVO groupConfigRequestVO) { - String groupName = groupConfigRequestVO.getGroupName(); - Integer groupStatus = groupConfigRequestVO.getGroupStatus(); + public Boolean updateGroupStatus(@RequestBody @Validated GroupStatusUpdateRequestVO requestVO) { + String groupName = requestVO.getGroupName(); + Integer groupStatus = requestVO.getGroupStatus(); return groupConfigService.updateGroupStatus(groupName, groupStatus); } 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 07e964c4c..5997a2e7c 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 @@ -1,14 +1,12 @@ package com.aizuda.snailjob.server.web.controller; import com.aizuda.snailjob.common.core.annotation.OriginalControllerReturnValue; -import com.aizuda.snailjob.common.core.exception.SnailJobCommonException; 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; import com.aizuda.snailjob.server.web.model.request.ExportJobVO; import com.aizuda.snailjob.server.web.model.request.JobQueryVO; import com.aizuda.snailjob.server.web.model.request.JobRequestVO; -import com.aizuda.snailjob.server.web.model.request.JobUpdateJobStatusRequestVO; +import com.aizuda.snailjob.server.web.model.request.JobStatusUpdateRequestVO; 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; @@ -22,7 +20,6 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; -import java.util.Set; /** * @author opensnail @@ -69,7 +66,7 @@ public class JobController { @PutMapping("/status") @LoginRequired - public Boolean updateJobStatus(@RequestBody @Validated JobUpdateJobStatusRequestVO jobRequestVO) { + public Boolean updateJobStatus(@RequestBody @Validated JobStatusUpdateRequestVO jobRequestVO) { return jobService.updateJobStatus(jobRequestVO); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupConfigRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupConfigRequestVO.java index 2cce46fa0..4cc268688 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupConfigRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupConfigRequestVO.java @@ -17,7 +17,7 @@ import lombok.Data; public class GroupConfigRequestVO { @NotBlank(message = "组名称不能为空") - @Pattern(regexp = "^[A-Za-z0-9_-]{1,64}$", message = "仅支持长度为1~64字符且类型为数字、字母和下划线") + @Pattern(regexp = "^[A-Za-z0-9_-]{1,64}$", message = "仅支持长度为1~64字符且类型为数字、字母、下划线和短横线") private String groupName; @NotNull(message = "组状态不能为空") diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupStatusUpdateRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupStatusUpdateRequestVO.java new file mode 100644 index 000000000..65ef0c924 --- /dev/null +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/GroupStatusUpdateRequestVO.java @@ -0,0 +1,22 @@ +package com.aizuda.snailjob.server.web.model.request; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.Data; + +/** + * @author opensnail + * @date 2024-06-01 11:37:45 + * @since sj_1.0.0 + */ +@Data +public class GroupStatusUpdateRequestVO { + + @NotBlank(message = "组名称不能为空") + @Pattern(regexp = "^[A-Za-z0-9_-]{1,64}$", message = "仅支持长度为1~64字符且类型为数字、字母和下划线") + private String groupName; + + @NotNull(message = "组状态不能为空") + private Integer groupStatus; +} diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobUpdateJobStatusRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobStatusUpdateRequestVO.java similarity index 89% rename from snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobUpdateJobStatusRequestVO.java rename to snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobStatusUpdateRequestVO.java index 7c9b1f0c1..27ab9917c 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobUpdateJobStatusRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobStatusUpdateRequestVO.java @@ -9,7 +9,7 @@ import lombok.Data; * @since 2.4.0 */ @Data -public class JobUpdateJobStatusRequestVO { +public class JobStatusUpdateRequestVO { @NotNull(message = "id 不能为空") private Long id; diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobService.java index 559b73262..c4068c231 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobService.java @@ -4,9 +4,8 @@ import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.ExportJobVO; import com.aizuda.snailjob.server.web.model.request.JobQueryVO; import com.aizuda.snailjob.server.web.model.request.JobRequestVO; -import com.aizuda.snailjob.server.web.model.request.JobUpdateJobStatusRequestVO; +import com.aizuda.snailjob.server.web.model.request.JobStatusUpdateRequestVO; import com.aizuda.snailjob.server.web.model.response.JobResponseVO; -import com.aizuda.snailjob.template.datasource.persistence.po.Job; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; @@ -26,7 +25,7 @@ public interface JobService { boolean updateJob(JobRequestVO jobRequestVO); - Boolean updateJobStatus(JobUpdateJobStatusRequestVO jobRequestVO); + Boolean updateJobStatus(JobStatusUpdateRequestVO jobRequestVO); Boolean deleteJobById(Long id); diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java index d1482734e..61571eabe 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java @@ -40,7 +40,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -49,7 +48,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.Set; /** * @author opensnail @@ -199,7 +197,7 @@ public class JobServiceImpl implements JobService { } @Override - public Boolean updateJobStatus(JobUpdateJobStatusRequestVO jobRequestVO) { + public Boolean updateJobStatus(JobStatusUpdateRequestVO jobRequestVO) { Assert.notNull(jobRequestVO.getId(), () -> new SnailJobServerException("id 不能为空")); Assert.isTrue(1 == jobMapper.selectCount(new LambdaQueryWrapper().eq(Job::getId, jobRequestVO.getId()))); @@ -260,7 +258,7 @@ public class JobServiceImpl implements JobService { public void importJobs(List requestList) { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); groupHandler.validateGroupExistence( - StreamUtils.toSet(requestList, JobRequestVO::getJobName), namespaceId + StreamUtils.toSet(requestList, JobRequestVO::getGroupName), namespaceId ); requestList.forEach(this::saveJob); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/NamespaceServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/NamespaceServiceImpl.java index bfc60c405..9a84b8cd0 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/NamespaceServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/NamespaceServiceImpl.java @@ -3,6 +3,7 @@ package com.aizuda.snailjob.server.web.service.impl; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.aizuda.snailjob.common.core.constant.SystemConstants; import com.aizuda.snailjob.common.core.enums.StatusEnum; import com.aizuda.snailjob.server.common.exception.SnailJobServerException; import com.aizuda.snailjob.server.web.model.base.PageResult; @@ -15,10 +16,13 @@ import com.aizuda.snailjob.template.datasource.persistence.mapper.NamespaceMappe import com.aizuda.snailjob.template.datasource.persistence.po.Namespace; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author: xiaowoniu @@ -26,15 +30,19 @@ import java.util.List; * @since : 2.5.0 */ @Service +@RequiredArgsConstructor public class NamespaceServiceImpl implements NamespaceService { - - @Autowired - private NamespaceMapper namespaceMapper; + private final NamespaceMapper namespaceMapper; @Override public Boolean saveNamespace(final NamespaceRequestVO namespaceRequestVO) { + String uniqueId = namespaceRequestVO.getUniqueId(); if (StrUtil.isNotBlank(namespaceRequestVO.getUniqueId())) { + Pattern pattern = Pattern.compile(SystemConstants.REGEXP); + Matcher matcher = pattern.matcher(uniqueId); + Assert.isTrue(matcher.matches(), () -> new SnailJobServerException("仅支持长度为1~64字符且类型为数字、字母、下划线和短横线")); + Assert.isTrue(namespaceMapper.selectCount( new LambdaQueryWrapper() .eq(Namespace::getUniqueId, namespaceRequestVO.getUniqueId())) == 0, @@ -43,10 +51,10 @@ public class NamespaceServiceImpl implements NamespaceService { Namespace namespace = new Namespace(); namespace.setName(namespaceRequestVO.getName()); - if (StrUtil.isBlank(namespaceRequestVO.getUniqueId())) { + if (StrUtil.isBlank(uniqueId)) { namespace.setUniqueId(IdUtil.simpleUUID()); } else { - namespace.setUniqueId(namespaceRequestVO.getUniqueId()); + namespace.setUniqueId(uniqueId); } return 1 == namespaceMapper.insert(namespace); } @@ -89,6 +97,7 @@ public class NamespaceServiceImpl implements NamespaceService { List namespaces = namespaceMapper.selectList( new LambdaQueryWrapper() .select(Namespace::getName, Namespace::getUniqueId) + .orderByDesc(Namespace::getId) ); return NamespaceResponseVOConverter.INSTANCE.convertList(namespaces); }