refactor(sj_1.1.0-beta1): 时间筛选条件统一方案

This commit is contained in:
dhb52 2024-06-17 14:22:10 +08:00
parent 88b657ba4d
commit 7a8551f248
14 changed files with 104 additions and 89 deletions

View File

@ -2,8 +2,9 @@ package com.aizuda.snailjob.server.web.controller;
import com.aizuda.snailjob.server.common.dto.DistributeInstance;
import com.aizuda.snailjob.server.web.annotation.LoginRequired;
import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.JobLineQueryVo;
import com.aizuda.snailjob.server.web.model.request.LineQueryVO;
import com.aizuda.snailjob.server.web.model.request.ServerNodeQueryVO;
import com.aizuda.snailjob.server.web.model.response.DashboardCardResponseVO;
import com.aizuda.snailjob.server.web.model.response.DashboardRetryLineResponseVO;
@ -12,10 +13,8 @@ import com.aizuda.snailjob.server.web.service.DashboardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
@ -40,23 +39,14 @@ public class DashboardController {
@LoginRequired
@GetMapping("/retry/line")
public DashboardRetryLineResponseVO retryLineList(BaseQueryVO baseQueryVO,
@RequestParam(value = "groupName", required = false) String groupName,
@RequestParam(value = "type", required = false, defaultValue = "WEEK") String type,
@RequestParam(value = "startTime", required = false) LocalDateTime startTime,
@RequestParam(value = "endTime", required = false) LocalDateTime endTime) {
return dashBoardService.retryLineList(baseQueryVO, groupName, type, startTime, endTime);
public DashboardRetryLineResponseVO retryLineList(LineQueryVO queryVO) {
return dashBoardService.retryLineList(queryVO);
}
@LoginRequired
@GetMapping("/job/line")
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO,
@RequestParam(value = "mode", required = false) String mode,
@RequestParam(value = "groupName", required = false) String groupName,
@RequestParam(value = "type", required = false, defaultValue = "WEEK") String type,
@RequestParam(value = "startTime", required = false) LocalDateTime startTime,
@RequestParam(value = "endTime", required = false) LocalDateTime endTime) {
return dashBoardService.jobLineList(baseQueryVO, mode, groupName, type, startTime, endTime);
public DashboardRetryLineResponseVO jobLineList(JobLineQueryVo queryVO) {
return dashBoardService.jobLineList(queryVO);
}
@LoginRequired

View File

@ -1,20 +1,14 @@
package com.aizuda.snailjob.server.web.interceptor;
import cn.hutool.core.date.LocalDateTimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.LocalDateTime;
import java.util.List;
import static com.aizuda.snailjob.common.core.constant.SystemConstants.YYYY_MM_DD_HH_MM_SS;
/**
* @author opensnail
* @date 2022-03-06
@ -48,20 +42,4 @@ public class SnailJobWebMvcConfigurerAdapter implements WebMvcConfigurer {
registry.addResourceHandler("/admin/**").addResourceLocations("classpath:/admin/");
}
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
try {
// 尝试解析为时间戳
Long timestamp = Long.valueOf(source);
return LocalDateTimeUtil.of(timestamp);
} catch (NumberFormatException ignore) {
return LocalDateTimeUtil.parse(source, YYYY_MM_DD_HH_MM_SS);
}
}
});
}
}

View File

@ -1,7 +1,10 @@
package com.aizuda.snailjob.server.web.model.base;
import cn.hutool.core.util.ObjUtil;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author opensnail
* @date 2022-02-27
@ -10,8 +13,38 @@ import lombok.Data;
@Data
public class BaseQueryVO {
/**
* 当前页码
*/
private int page = 1;
/**
* 每页条数
*/
private int size = 10;
/**
* 时间区间, 用于筛选 createDt 字段,
* 前端传入使用 SpringBoot 默认 ISO 8601 格式: yyyy-MM-dd'T'HH:mm:ss
*/
private LocalDateTime[] datetimeRange;
/**
* 起始时间
*
* @return 起始时间
*/
public LocalDateTime getStartDt() {
return ObjUtil.isEmpty(datetimeRange) ? null : datetimeRange[0];
}
/**
* 结束时间
*
* @return 结束时间
*/
public LocalDateTime getEndDt() {
return ObjUtil.isEmpty(datetimeRange) ? null : datetimeRange[1];
}
}

View File

@ -4,8 +4,6 @@ import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @author opensnail
* @date 2023-10-11 22:28:07
@ -18,6 +16,4 @@ public class JobBatchQueryVO extends BaseQueryVO {
private String jobName;
private Integer taskBatchStatus;
private String groupName;
private LocalDateTime beginDate;
private LocalDateTime endDate;
}

View File

@ -0,0 +1,14 @@
package com.aizuda.snailjob.server.web.model.request;
import com.aizuda.snailjob.server.common.enums.SystemModeEnum;
import lombok.Data;
@Data
public class JobLineQueryVo extends LineQueryVO {
/**
* 系统模式
*
* @see SystemModeEnum
*/
private String mode;
}

View File

@ -0,0 +1,17 @@
package com.aizuda.snailjob.server.web.model.request;
import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import lombok.Data;
@Data
public class LineQueryVO extends BaseQueryVO {
/**
* 组名称
*/
private String groupName;
/**
* 时间间隔类型
*/
private String type = "WEEK";
}

View File

@ -3,8 +3,6 @@ package com.aizuda.snailjob.server.web.model.request;
import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author: opensnail
* @date : 2022-02-28 09:45
@ -16,6 +14,4 @@ public class RetryDeadLetterQueryVO extends BaseQueryVO {
private String bizNo;
private String idempotentId;
private String uniqueId;
private LocalDateTime beginDate;
private LocalDateTime endDate;
}

View File

@ -4,8 +4,6 @@ import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @author xiaowoniu
* @date 2023-12-23 17:49:59
@ -18,6 +16,4 @@ public class WorkflowBatchQueryVO extends BaseQueryVO {
private String workflowName;
private Long workflowId;
private Integer taskBatchStatus;
private LocalDateTime beginDate;
private LocalDateTime endDate;
}

View File

@ -1,13 +1,13 @@
package com.aizuda.snailjob.server.web.service;
import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.JobLineQueryVo;
import com.aizuda.snailjob.server.web.model.request.LineQueryVO;
import com.aizuda.snailjob.server.web.model.request.ServerNodeQueryVO;
import com.aizuda.snailjob.server.web.model.response.DashboardCardResponseVO;
import com.aizuda.snailjob.server.web.model.response.DashboardRetryLineResponseVO;
import com.aizuda.snailjob.server.web.model.response.ServerNodeResponseVO;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -18,9 +18,9 @@ public interface DashboardService {
DashboardCardResponseVO taskRetryJob();
DashboardRetryLineResponseVO retryLineList(BaseQueryVO baseQueryVO, String groupName, String type, LocalDateTime startTime, LocalDateTime endTime);
DashboardRetryLineResponseVO retryLineList(LineQueryVO queryVO);
DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO, String mode, String groupName, String type, LocalDateTime startTime, LocalDateTime endTime);
DashboardRetryLineResponseVO jobLineList(JobLineQueryVo queryVO);
PageResult<List<ServerNodeResponseVO>> pods(ServerNodeQueryVO serverNodeQueryVO);
}

View File

@ -16,9 +16,10 @@ import com.aizuda.snailjob.server.common.enums.DashboardLineEnum;
import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum;
import com.aizuda.snailjob.server.common.enums.SystemModeEnum;
import com.aizuda.snailjob.server.common.register.ServerRegister;
import com.aizuda.snailjob.server.web.model.base.BaseQueryVO;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.enums.DateTypeEnum;
import com.aizuda.snailjob.server.web.model.request.JobLineQueryVo;
import com.aizuda.snailjob.server.web.model.request.LineQueryVO;
import com.aizuda.snailjob.server.web.model.request.ServerNodeQueryVO;
import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
import com.aizuda.snailjob.server.web.model.response.DashboardCardResponseVO;
@ -147,10 +148,7 @@ public class DashboardServiceImpl implements DashboardService {
}
@Override
public DashboardRetryLineResponseVO retryLineList(BaseQueryVO baseQueryVO,
String groupName, String type,
LocalDateTime startTime, LocalDateTime endTime) {
public DashboardRetryLineResponseVO retryLineList(LineQueryVO queryVO) {
// 查询登录用户权限
UserSessionVO userSessionVO = UserSessionUtils.currentUserSession();
String namespaceId = userSessionVO.getNamespaceId();
@ -158,7 +156,7 @@ public class DashboardServiceImpl implements DashboardService {
DashboardRetryLineResponseVO responseVO = new DashboardRetryLineResponseVO();
// 重试任务列表
Page<Object> pager = new Page<>(baseQueryVO.getPage(), baseQueryVO.getSize());
Page<Object> pager = new Page<>(queryVO.getPage(), queryVO.getSize());
LambdaQueryWrapper<RetrySceneConfig> wrapper = new LambdaQueryWrapper<RetrySceneConfig>()
.eq(RetrySceneConfig::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupNames), RetrySceneConfig::getGroupName, groupNames);
@ -175,16 +173,16 @@ public class DashboardServiceImpl implements DashboardService {
responseVO.setTaskList(pageResult);
// 折线图
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type);
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(queryVO.getType());
LocalDateTime startDateTime = dateTypeEnum.getStartTime().apply(
ObjUtil.isNotNull(startTime) ? startTime : LocalDateTime.now());
ObjUtil.isNotNull(queryVO.getStartDt()) ? queryVO.getStartDt() : LocalDateTime.now());
LocalDateTime endDateTime = dateTypeEnum.getEndTime().apply(
ObjUtil.isNotNull(endTime) ? endTime : LocalDateTime.now());
ObjUtil.isNotNull(queryVO.getEndDt()) ? queryVO.getEndDt() : LocalDateTime.now());
List<DashboardLineResponseDO> dashboardRetryLinkeResponseDOList = retrySummaryMapper.selectRetryLineList(
DashboardLineEnum.dateFormat(type),
DashboardLineEnum.dateFormat(queryVO.getType()),
new LambdaQueryWrapper<RetrySummary>()
.in(CollUtil.isNotEmpty(groupNames), RetrySummary::getGroupName, groupNames)
.eq(StrUtil.isNotBlank(groupName), RetrySummary::getGroupName, groupName)
.eq(StrUtil.isNotBlank(queryVO.getGroupName()), RetrySummary::getGroupName, queryVO.getGroupName())
.eq(RetrySummary::getNamespaceId, namespaceId)
.between(RetrySummary::getTriggerAt, startDateTime, endDateTime));
List<DashboardLineResponseVO> dashboardLineResponseVOList = DispatchQuantityResponseVOConverter.INSTANCE.convertList(dashboardRetryLinkeResponseDOList);
@ -196,7 +194,7 @@ public class DashboardServiceImpl implements DashboardService {
List<DashboardRetryLineResponseDO.Rank> rankList = retrySummaryMapper.selectDashboardRankList(
new LambdaQueryWrapper<RetrySummary>()
.in(CollUtil.isNotEmpty(groupNames), RetrySummary::getGroupName, groupNames)
.eq(StrUtil.isNotBlank(groupName), RetrySummary::getGroupName, groupNames)
.eq(StrUtil.isNotBlank(queryVO.getGroupName()), RetrySummary::getGroupName, groupNames)
.eq(RetrySummary::getNamespaceId, namespaceId)
.ge(RetrySummary::getTriggerAt, startDateTime)
.le(RetrySummary::getTriggerAt, endDateTime)
@ -207,10 +205,7 @@ public class DashboardServiceImpl implements DashboardService {
}
@Override
public DashboardRetryLineResponseVO jobLineList(BaseQueryVO baseQueryVO,
String mode, String groupName, String type,
LocalDateTime startTime, LocalDateTime endTime) {
public DashboardRetryLineResponseVO jobLineList(JobLineQueryVo queryVO) {
// 查询登录用户权限
UserSessionVO userSessionVO = UserSessionUtils.currentUserSession();
String namespaceId = userSessionVO.getNamespaceId();
@ -218,22 +213,22 @@ public class DashboardServiceImpl implements DashboardService {
DashboardRetryLineResponseVO responseVO = new DashboardRetryLineResponseVO();
// 重试任务列表
Page<Object> pager = new Page<>(baseQueryVO.getPage(), baseQueryVO.getSize());
Page<Object> pager = new Page<>(queryVO.getPage(), queryVO.getSize());
// 任务类型
Integer systemTaskType = SystemModeEnum.JOB.name().equals(mode) ? SyetemTaskTypeEnum.JOB.getType() : SyetemTaskTypeEnum.WORKFLOW.getType();
Integer systemTaskType = SystemModeEnum.JOB.name().equals(queryVO.getMode()) ? SyetemTaskTypeEnum.JOB.getType() : SyetemTaskTypeEnum.WORKFLOW.getType();
LambdaQueryWrapper<Job> wrapper = new LambdaQueryWrapper<Job>()
.eq(Job::getDeleted, 0)
.eq(Job::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupNames), Job::getGroupName, groupNames);
// 针对 Group By 分页自定义countStatement
// 针对 Group By 分页自定义 countStatement
pager.setSearchCount(false);
pager.setTotal(SystemModeEnum.JOB.name().equals(mode) ?
pager.setTotal(SystemModeEnum.JOB.name().equals(queryVO.getMode()) ?
jobSummaryMapper.selectJobTaskListCount(wrapper) :
jobSummaryMapper.selectWorkflowTaskListCount(wrapper));
IPage<DashboardRetryLineResponseDO.Task> taskIPage = SystemModeEnum.JOB.name().equals(mode) ?
IPage<DashboardRetryLineResponseDO.Task> taskIPage = SystemModeEnum.JOB.name().equals(queryVO.getMode()) ?
jobSummaryMapper.selectJobTaskList(wrapper, pager) : jobSummaryMapper.selectWorkflowTaskList(wrapper, pager);
List<DashboardRetryLineResponseVO.Task> taskList = JobSummaryResponseVOConverter.INSTANCE.convertList(taskIPage.getRecords());
PageResult<List<DashboardRetryLineResponseVO.Task>> pageResult = new PageResult<>(
@ -242,16 +237,16 @@ public class DashboardServiceImpl implements DashboardService {
responseVO.setTaskList(pageResult);
// 折线图
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type);
DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(queryVO.getType());
LocalDateTime startDateTime = dateTypeEnum.getStartTime().apply(
ObjUtil.isNotNull(startTime) ? startTime : LocalDateTime.now());
ObjUtil.isNotNull(queryVO.getStartDt()) ? queryVO.getStartDt() : LocalDateTime.now());
LocalDateTime endDateTime = dateTypeEnum.getEndTime().apply(
ObjUtil.isNotNull(endTime) ? endTime : LocalDateTime.now());
ObjUtil.isNotNull(queryVO.getEndDt()) ? queryVO.getEndDt() : LocalDateTime.now());
List<DashboardLineResponseDO> dashboardLineResponseDOList = jobSummaryMapper.selectJobLineList(
DashboardLineEnum.dateFormat(type),
DashboardLineEnum.dateFormat(queryVO.getType()),
new LambdaQueryWrapper<JobSummary>()
.in(CollUtil.isNotEmpty(groupNames), JobSummary::getGroupName, groupNames)
.eq(StrUtil.isNotBlank(groupName), JobSummary::getGroupName, groupName)
.eq(StrUtil.isNotBlank(queryVO.getGroupName()), JobSummary::getGroupName, queryVO.getGroupName())
.eq(JobSummary::getSystemTaskType, systemTaskType)
.eq(JobSummary::getNamespaceId, namespaceId)
.between(JobSummary::getTriggerAt, startDateTime, endDateTime));
@ -265,7 +260,7 @@ public class DashboardServiceImpl implements DashboardService {
systemTaskType,
new LambdaQueryWrapper<JobSummary>()
.in(CollUtil.isNotEmpty(groupNames), JobSummary::getGroupName, groupNames)
.eq(StrUtil.isNotBlank(groupName), JobSummary::getGroupName, groupName)
.eq(StrUtil.isNotBlank(queryVO.getGroupName()), JobSummary::getGroupName, queryVO.getGroupName())
.ge(JobSummary::getTriggerAt, startDateTime).le(JobSummary::getTriggerAt, endDateTime)
.eq(JobSummary::getSystemTaskType, systemTaskType)
.eq(JobSummary::getNamespaceId, namespaceId)

View File

@ -66,8 +66,8 @@ public class JobBatchServiceImpl implements JobBatchService {
.in(CollUtil.isNotEmpty(groupNames), "batch.group_name", groupNames)
.eq(queryVO.getTaskBatchStatus() != null, "batch.task_batch_status", queryVO.getTaskBatchStatus())
.likeRight(StrUtil.isNotBlank(queryVO.getJobName()), "job.job_name", queryVO.getJobName())
.between(ObjUtil.isAllNotEmpty(queryVO.getBeginDate(), queryVO.getEndDate()),
"batch.create_dt", queryVO.getBeginDate(), queryVO.getEndDate())
.between(ObjUtil.isAllNotEmpty(queryVO.getStartDt(), queryVO.getEndDt()),
"batch.create_dt", queryVO.getStartDt(), queryVO.getEndDt())
.eq("batch.deleted", 0)
.orderByDesc("batch.id");
List<JobBatchResponseDO> batchResponseDOList = jobTaskBatchMapper.selectJobBatchPageList(pageDTO, wrapper);

View File

@ -74,8 +74,8 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService {
.eq(StrUtil.isNotBlank(queryVO.getBizNo()), RetryDeadLetter::getBizNo, queryVO.getBizNo())
.eq(StrUtil.isNotBlank(queryVO.getIdempotentId()), RetryDeadLetter::getIdempotentId, queryVO.getIdempotentId())
.eq(StrUtil.isNotBlank(queryVO.getUniqueId()), RetryDeadLetter::getUniqueId, queryVO.getUniqueId())
.between(ObjUtil.isAllNotEmpty(queryVO.getBeginDate(), queryVO.getEndDate()),
RetryDeadLetter::getCreateDt, queryVO.getBeginDate(), queryVO.getEndDate())
.between(ObjUtil.isAllNotEmpty(queryVO.getStartDt(), queryVO.getEndDt()),
RetryDeadLetter::getCreateDt, queryVO.getStartDt(), queryVO.getEndDt())
.orderByDesc(RetryDeadLetter::getId));
return new PageResult<>(retryDeadLetterPageDTO,

View File

@ -59,8 +59,8 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService {
.eq(StrUtil.isNotBlank(queryVO.getUniqueId()), RetryTaskLog::getUniqueId, queryVO.getUniqueId())
.eq(StrUtil.isNotBlank(queryVO.getIdempotentId()), RetryTaskLog::getIdempotentId, queryVO.getIdempotentId())
.eq(queryVO.getRetryStatus() != null, RetryTaskLog::getRetryStatus, queryVO.getRetryStatus())
.between(ObjUtil.isAllNotEmpty(queryVO.getBeginDate(), queryVO.getEndDate()),
RetryTaskLog::getCreateDt, queryVO.getBeginDate(), queryVO.getEndDate())
.between(ObjUtil.isNotNull(queryVO.getDatetimeRange()),
RetryTaskLog::getCreateDt, queryVO.getStartDt(), queryVO.getEndDt())
.select(RetryTaskLog::getGroupName, RetryTaskLog::getId,
RetryTaskLog::getSceneName,
RetryTaskLog::getIdempotentId, RetryTaskLog::getBizNo, RetryTaskLog::getRetryStatus,

View File

@ -83,8 +83,8 @@ public class WorkflowBatchServiceImpl implements WorkflowBatchService {
.in(CollUtil.isNotEmpty(groupNames), "batch.group_name", groupNames)
.eq(queryVO.getTaskBatchStatus() != null, "batch.task_batch_status", queryVO.getTaskBatchStatus())
.likeRight(StrUtil.isNotBlank(queryVO.getWorkflowName()), "flow.workflow_name", queryVO.getWorkflowName())
.between(ObjUtil.isAllNotEmpty(queryVO.getBeginDate(), queryVO.getEndDate()),
"batch.create_dt", queryVO.getBeginDate(), queryVO.getEndDate())
.between(ObjUtil.isNotNull(queryVO.getDatetimeRange()),
"batch.create_dt", queryVO.getStartDt(), queryVO.getEndDt())
.eq("batch.deleted", 0)
.orderByDesc("batch.id");
List<WorkflowBatchResponseDO> batchResponseDOList = workflowTaskBatchMapper.selectWorkflowBatchPageList(pageDTO, wrapper);