feat(sj_1.0.0): 修复组状态更新问题和空间新增添加格式校验
This commit is contained in:
parent
39cd48b3d8
commit
691c5033f8
@ -177,4 +177,9 @@ public interface SystemConstants {
|
|||||||
* Webhook告警、工作流回调请求密钥
|
* Webhook告警、工作流回调请求密钥
|
||||||
*/
|
*/
|
||||||
String SECRET = "secret";
|
String SECRET = "secret";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组名、场景名、空间ID通用正则
|
||||||
|
*/
|
||||||
|
String REGEXP = "^[A-Za-z0-9_-]{1,64}$";
|
||||||
}
|
}
|
||||||
|
@ -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.ExportGroupVO;
|
||||||
import com.aizuda.snailjob.server.web.model.request.GroupConfigQueryVO;
|
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.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.model.response.GroupConfigResponseVO;
|
||||||
import com.aizuda.snailjob.server.web.service.GroupConfigService;
|
import com.aizuda.snailjob.server.web.service.GroupConfigService;
|
||||||
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
||||||
@ -48,9 +49,9 @@ public class GroupConfigController {
|
|||||||
|
|
||||||
@LoginRequired(role = RoleEnum.ADMIN)
|
@LoginRequired(role = RoleEnum.ADMIN)
|
||||||
@PutMapping("status")
|
@PutMapping("status")
|
||||||
public Boolean updateGroupStatus(@RequestBody @Validated GroupConfigRequestVO groupConfigRequestVO) {
|
public Boolean updateGroupStatus(@RequestBody @Validated GroupStatusUpdateRequestVO requestVO) {
|
||||||
String groupName = groupConfigRequestVO.getGroupName();
|
String groupName = requestVO.getGroupName();
|
||||||
Integer groupStatus = groupConfigRequestVO.getGroupStatus();
|
Integer groupStatus = requestVO.getGroupStatus();
|
||||||
return groupConfigService.updateGroupStatus(groupName, groupStatus);
|
return groupConfigService.updateGroupStatus(groupName, groupStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
package com.aizuda.snailjob.server.web.controller;
|
package com.aizuda.snailjob.server.web.controller;
|
||||||
|
|
||||||
import com.aizuda.snailjob.common.core.annotation.OriginalControllerReturnValue;
|
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.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.base.PageResult;
|
||||||
import com.aizuda.snailjob.server.web.model.request.ExportJobVO;
|
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.JobQueryVO;
|
||||||
import com.aizuda.snailjob.server.web.model.request.JobRequestVO;
|
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.model.response.JobResponseVO;
|
||||||
import com.aizuda.snailjob.server.web.service.JobService;
|
import com.aizuda.snailjob.server.web.service.JobService;
|
||||||
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
||||||
@ -22,7 +20,6 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author opensnail
|
* @author opensnail
|
||||||
@ -69,7 +66,7 @@ public class JobController {
|
|||||||
|
|
||||||
@PutMapping("/status")
|
@PutMapping("/status")
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
public Boolean updateJobStatus(@RequestBody @Validated JobUpdateJobStatusRequestVO jobRequestVO) {
|
public Boolean updateJobStatus(@RequestBody @Validated JobStatusUpdateRequestVO jobRequestVO) {
|
||||||
return jobService.updateJobStatus(jobRequestVO);
|
return jobService.updateJobStatus(jobRequestVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import lombok.Data;
|
|||||||
public class GroupConfigRequestVO {
|
public class GroupConfigRequestVO {
|
||||||
|
|
||||||
@NotBlank(message = "组名称不能为空")
|
@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;
|
private String groupName;
|
||||||
|
|
||||||
@NotNull(message = "组状态不能为空")
|
@NotNull(message = "组状态不能为空")
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -9,7 +9,7 @@ import lombok.Data;
|
|||||||
* @since 2.4.0
|
* @since 2.4.0
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class JobUpdateJobStatusRequestVO {
|
public class JobStatusUpdateRequestVO {
|
||||||
|
|
||||||
@NotNull(message = "id 不能为空")
|
@NotNull(message = "id 不能为空")
|
||||||
private Long id;
|
private Long id;
|
@ -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.ExportJobVO;
|
||||||
import com.aizuda.snailjob.server.web.model.request.JobQueryVO;
|
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.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.model.response.JobResponseVO;
|
||||||
import com.aizuda.snailjob.template.datasource.persistence.po.Job;
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
@ -26,7 +25,7 @@ public interface JobService {
|
|||||||
|
|
||||||
boolean updateJob(JobRequestVO jobRequestVO);
|
boolean updateJob(JobRequestVO jobRequestVO);
|
||||||
|
|
||||||
Boolean updateJobStatus(JobUpdateJobStatusRequestVO jobRequestVO);
|
Boolean updateJobStatus(JobStatusUpdateRequestVO jobRequestVO);
|
||||||
|
|
||||||
Boolean deleteJobById(Long id);
|
Boolean deleteJobById(Long id);
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ import lombok.Getter;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -49,7 +48,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author opensnail
|
* @author opensnail
|
||||||
@ -199,7 +197,7 @@ public class JobServiceImpl implements JobService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateJobStatus(JobUpdateJobStatusRequestVO jobRequestVO) {
|
public Boolean updateJobStatus(JobStatusUpdateRequestVO jobRequestVO) {
|
||||||
Assert.notNull(jobRequestVO.getId(), () -> new SnailJobServerException("id 不能为空"));
|
Assert.notNull(jobRequestVO.getId(), () -> new SnailJobServerException("id 不能为空"));
|
||||||
Assert.isTrue(1 == jobMapper.selectCount(new LambdaQueryWrapper<Job>().eq(Job::getId, jobRequestVO.getId())));
|
Assert.isTrue(1 == jobMapper.selectCount(new LambdaQueryWrapper<Job>().eq(Job::getId, jobRequestVO.getId())));
|
||||||
|
|
||||||
@ -260,7 +258,7 @@ public class JobServiceImpl implements JobService {
|
|||||||
public void importJobs(List<JobRequestVO> requestList) {
|
public void importJobs(List<JobRequestVO> requestList) {
|
||||||
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
|
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
|
||||||
groupHandler.validateGroupExistence(
|
groupHandler.validateGroupExistence(
|
||||||
StreamUtils.toSet(requestList, JobRequestVO::getJobName), namespaceId
|
StreamUtils.toSet(requestList, JobRequestVO::getGroupName), namespaceId
|
||||||
);
|
);
|
||||||
requestList.forEach(this::saveJob);
|
requestList.forEach(this::saveJob);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package com.aizuda.snailjob.server.web.service.impl;
|
|||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
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.common.core.enums.StatusEnum;
|
||||||
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
|
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
|
||||||
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
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.aizuda.snailjob.template.datasource.persistence.po.Namespace;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: xiaowoniu
|
* @author: xiaowoniu
|
||||||
@ -26,15 +30,19 @@ import java.util.List;
|
|||||||
* @since : 2.5.0
|
* @since : 2.5.0
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class NamespaceServiceImpl implements NamespaceService {
|
public class NamespaceServiceImpl implements NamespaceService {
|
||||||
|
private final NamespaceMapper namespaceMapper;
|
||||||
@Autowired
|
|
||||||
private NamespaceMapper namespaceMapper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean saveNamespace(final NamespaceRequestVO namespaceRequestVO) {
|
public Boolean saveNamespace(final NamespaceRequestVO namespaceRequestVO) {
|
||||||
|
String uniqueId = namespaceRequestVO.getUniqueId();
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(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(
|
Assert.isTrue(namespaceMapper.selectCount(
|
||||||
new LambdaQueryWrapper<Namespace>()
|
new LambdaQueryWrapper<Namespace>()
|
||||||
.eq(Namespace::getUniqueId, namespaceRequestVO.getUniqueId())) == 0,
|
.eq(Namespace::getUniqueId, namespaceRequestVO.getUniqueId())) == 0,
|
||||||
@ -43,10 +51,10 @@ public class NamespaceServiceImpl implements NamespaceService {
|
|||||||
|
|
||||||
Namespace namespace = new Namespace();
|
Namespace namespace = new Namespace();
|
||||||
namespace.setName(namespaceRequestVO.getName());
|
namespace.setName(namespaceRequestVO.getName());
|
||||||
if (StrUtil.isBlank(namespaceRequestVO.getUniqueId())) {
|
if (StrUtil.isBlank(uniqueId)) {
|
||||||
namespace.setUniqueId(IdUtil.simpleUUID());
|
namespace.setUniqueId(IdUtil.simpleUUID());
|
||||||
} else {
|
} else {
|
||||||
namespace.setUniqueId(namespaceRequestVO.getUniqueId());
|
namespace.setUniqueId(uniqueId);
|
||||||
}
|
}
|
||||||
return 1 == namespaceMapper.insert(namespace);
|
return 1 == namespaceMapper.insert(namespace);
|
||||||
}
|
}
|
||||||
@ -89,6 +97,7 @@ public class NamespaceServiceImpl implements NamespaceService {
|
|||||||
List<Namespace> namespaces = namespaceMapper.selectList(
|
List<Namespace> namespaces = namespaceMapper.selectList(
|
||||||
new LambdaQueryWrapper<Namespace>()
|
new LambdaQueryWrapper<Namespace>()
|
||||||
.select(Namespace::getName, Namespace::getUniqueId)
|
.select(Namespace::getName, Namespace::getUniqueId)
|
||||||
|
.orderByDesc(Namespace::getId)
|
||||||
);
|
);
|
||||||
return NamespaceResponseVOConverter.INSTANCE.convertList(namespaces);
|
return NamespaceResponseVOConverter.INSTANCE.convertList(namespaces);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user