diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java index 9d1268f43..fd971d96a 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/appender/EasyRetryServerLogbackAppender.java @@ -18,6 +18,7 @@ import com.aizuda.easy.retry.server.common.util.DateUtils; import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO; +import com.google.common.collect.Lists; import org.slf4j.MDC; import org.springframework.util.CollectionUtils; @@ -98,7 +99,7 @@ public class EasyRetryServerLogbackAppender extends UnsynchronizedAppenderBas .stream() .filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue())) .collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue)); - jobLogDTO.setMessage(JsonUtil.toJsonString(messageMap)); + jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap))); jobLogDTO.setTaskId(logMetaDTO.getTaskId()); jobLogDTO.setJobId(logMetaDTO.getJobId()); jobLogDTO.setGroupName(logMetaDTO.getGroupName()); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobLogController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobLogController.java index d826c3b1d..cd28724ef 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobLogController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobLogController.java @@ -26,7 +26,7 @@ public class JobLogController { @GetMapping("/log/list") @LoginRequired - public PageResult> getJobLogPage(JobLogQueryVO jobQueryVO) { + public JobLogResponseVO getJobLogPage(JobLogQueryVO jobQueryVO) { return jobLogService.getJobLogPage(jobQueryVO); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobLogQueryVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobLogQueryVO.java index 608e08385..3113fe24f 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobLogQueryVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobLogQueryVO.java @@ -12,7 +12,9 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data public class JobLogQueryVO extends BaseQueryVO { + private Long startId; private Long jobId; private Long taskBatchId; private Long taskId; + private Integer fromIndex; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/JobLogResponseVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/JobLogResponseVO.java index f8d7a71e9..f730b240a 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/JobLogResponseVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/JobLogResponseVO.java @@ -3,6 +3,7 @@ package com.aizuda.easy.retry.server.web.model.response; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; /** * @author: www.byteblogs.com @@ -14,41 +15,12 @@ public class JobLogResponseVO { private Long id; - private Long key; + private Long nextStartId; - /** - * 组名称 - */ - private String groupName; + private List message; - /** - * 任务信息id - */ - private Long jobId; + private boolean isFinished; - /** - * 任务实例id - */ - private Long taskBatchId; - - /** - * 调度任务id - */ - private Long taskId; - - /** - * 创建时间 - */ - private LocalDateTime createDt; - - /** - * 客户端信息 - */ - private String clientAddress; - - /** - * 调度信息 - */ - private String message; + private Integer fromIndex; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobLogService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobLogService.java index 2fdbea0ce..d3c36c613 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobLogService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobLogService.java @@ -13,5 +13,5 @@ import java.util.List; */ public interface JobLogService { - PageResult> getJobLogPage(JobLogQueryVO jobQueryVO); + JobLogResponseVO getJobLogPage(JobLogQueryVO jobQueryVO); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobLogServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobLogServiceImpl.java index 78ca3bd24..1048d7801 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobLogServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobLogServiceImpl.java @@ -1,5 +1,7 @@ package com.aizuda.easy.retry.server.web.service.impl; +import cn.hutool.core.util.ArrayUtil; +import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.JobLogQueryVO; import com.aizuda.easy.retry.server.web.model.response.JobLogResponseVO; @@ -9,11 +11,16 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobLogMessag import com.aizuda.easy.retry.template.datasource.persistence.po.JobLogMessage; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; /** * @author: www.byteblogs.com @@ -27,26 +34,67 @@ public class JobLogServiceImpl implements JobLogService { private JobLogMessageMapper jobLogMessageMapper; @Override - public PageResult> getJobLogPage(final JobLogQueryVO queryVO) { + public JobLogResponseVO getJobLogPage(final JobLogQueryVO queryVO) { - PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); + PageDTO pageDTO = new PageDTO<>(1, queryVO.getSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (Objects.nonNull(queryVO.getJobId())) { - queryWrapper.eq(JobLogMessage::getJobId, queryVO.getJobId()); - } + queryWrapper + .select(JobLogMessage::getId, JobLogMessage::getLogNum) + .ge(JobLogMessage::getId, queryVO.getStartId()) + .eq(JobLogMessage::getJobId, queryVO.getJobId()) + .eq(JobLogMessage::getTaskBatchId, queryVO.getTaskBatchId()) + .eq(JobLogMessage::getTaskId, queryVO.getTaskId()); - if (Objects.nonNull(queryVO.getTaskBatchId())) { - queryWrapper.eq(JobLogMessage::getTaskBatchId, queryVO.getTaskBatchId()); - } - - if (Objects.nonNull(queryVO.getTaskId())) { - queryWrapper.eq(JobLogMessage::getTaskId, queryVO.getTaskId()); - } - - queryWrapper.orderByDesc(JobLogMessage::getId); + queryWrapper.orderByAsc(JobLogMessage::getRealTime).orderByDesc(JobLogMessage::getId); PageDTO selectPage = jobLogMessageMapper.selectPage(pageDTO, queryWrapper); + List records = selectPage.getRecords(); + if (CollectionUtils.isEmpty(records)) { + JobLogResponseVO jobLogResponseVO = new JobLogResponseVO(); + jobLogResponseVO.setFinished(Boolean.TRUE); + return jobLogResponseVO; + } - return new PageResult<>(pageDTO, JobLogResponseVOConverter.INSTANCE.toJobLogResponseVOs(selectPage.getRecords())); + Integer fromIndex = Optional.ofNullable(queryVO.getFromIndex()).orElse(0); + JobLogMessage firstRecord = records.get(0); + List ids = Lists.newArrayList(firstRecord.getId()); + int total = firstRecord.getLogNum() - fromIndex; + for (int i = 1; i < records.size(); i++) { + JobLogMessage record = records.get(i); + if (total + record.getLogNum() > queryVO.getSize()) { + break; + } + + total += record.getLogNum(); + ids.add(record.getId()); + } + + long nextStartId = 0; + List messages = Lists.newArrayList(); + List jobLogMessages = jobLogMessageMapper.selectBatchIds(ids); + for (final JobLogMessage jobLogMessage : jobLogMessages) { + + List originalList = JsonUtil.parseObject(jobLogMessage.getMessage(), List.class); + int size = originalList.size() - fromIndex; + List pageList = originalList.stream().skip(fromIndex).limit(queryVO.getSize()) + .collect(Collectors.toList()); + + if (messages.size() + size >= queryVO.getSize()) { + messages.addAll(pageList); + nextStartId = jobLogMessage.getId(); + fromIndex = Math.min(fromIndex + queryVO.getSize(), originalList.size() - 1); + break; + } + + messages.addAll(pageList); + nextStartId = jobLogMessage.getId() + 1; + fromIndex = 0; + } + + JobLogResponseVO jobLogResponseVO = new JobLogResponseVO(); + jobLogResponseVO.setMessage(messages); + jobLogResponseVO.setNextStartId(nextStartId); + jobLogResponseVO.setFromIndex(fromIndex); + return jobLogResponseVO; } }