diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskLogController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskLogController.java index 894b10d24..cdd761b61 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskLogController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskLogController.java @@ -36,7 +36,7 @@ public class RetryTaskLogController { @LoginRequired @GetMapping("/message/list") - public PageResult> getRetryTaskLogPage(RetryTaskLogMessageQueryVO queryVO) { + public RetryTaskLogMessageResponseVO getRetryTaskLogPage(RetryTaskLogMessageQueryVO queryVO) { return retryTaskLogService.getRetryTaskLogMessagePage(queryVO); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskLogMessageQueryVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskLogMessageQueryVO.java index 5bdf0757f..76c173c49 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskLogMessageQueryVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskLogMessageQueryVO.java @@ -13,4 +13,8 @@ public class RetryTaskLogMessageQueryVO extends BaseQueryVO { private String groupName; private String uniqueId; + + private Long startId; + + private Integer fromIndex; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/RetryTaskLogMessageResponseVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/RetryTaskLogMessageResponseVO.java index 3c69096f5..b9cd37d8c 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/RetryTaskLogMessageResponseVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/RetryTaskLogMessageResponseVO.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 @@ -13,8 +14,6 @@ public class RetryTaskLogMessageResponseVO { private Long id; - private String message; - /** * 客户端信息 */ @@ -22,4 +21,12 @@ public class RetryTaskLogMessageResponseVO { private LocalDateTime createDt; + private Long nextStartId; + + private List message; + + private boolean isFinished; + + private Integer fromIndex; + } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/RetryTaskLogService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/RetryTaskLogService.java index 61b13c1c4..3338bbfc1 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/RetryTaskLogService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/RetryTaskLogService.java @@ -17,7 +17,7 @@ public interface RetryTaskLogService { PageResult> getRetryTaskLogPage(RetryTaskLogQueryVO queryVO); - PageResult> getRetryTaskLogMessagePage(RetryTaskLogMessageQueryVO queryVO); + RetryTaskLogMessageResponseVO getRetryTaskLogMessagePage(RetryTaskLogMessageQueryVO queryVO); RetryTaskLogResponseVO getRetryTaskLogById(Long id); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/convert/RetryTaskLogResponseVOConverter.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/convert/RetryTaskLogResponseVOConverter.java index c85e7bf2c..8035b25d3 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/convert/RetryTaskLogResponseVOConverter.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/convert/RetryTaskLogResponseVOConverter.java @@ -22,5 +22,4 @@ public interface RetryTaskLogResponseVOConverter { List batchConvert(List retryTaskLogs); - List toRetryTaskLogMessageResponseVO(List retryTaskLogs); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java index 7a7103797..f5404a3b9 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java @@ -1,10 +1,16 @@ package com.aizuda.easy.retry.server.web.service.impl; import cn.hutool.core.util.StrUtil; +import com.aizuda.easy.retry.common.core.util.JsonUtil; +import com.aizuda.easy.retry.common.log.constant.LogFieldConstants; +import com.aizuda.easy.retry.server.web.model.request.JobLogQueryVO; import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; +import com.aizuda.easy.retry.server.web.model.response.JobLogResponseVO; import com.aizuda.easy.retry.server.web.util.UserSessionUtils; import com.aizuda.easy.retry.template.datasource.persistence.mapper.RetryTaskLogMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.RetryTaskLogMessageMapper; +import com.aizuda.easy.retry.template.datasource.persistence.po.JobLogMessage; +import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLog; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLogMessage; import com.aizuda.easy.retry.server.web.model.request.RetryTaskLogMessageQueryVO; @@ -17,22 +23,31 @@ import com.aizuda.easy.retry.server.web.service.RetryTaskLogService; import com.aizuda.easy.retry.server.web.service.convert.RetryTaskLogResponseVOConverter; import com.aizuda.easy.retry.server.web.model.request.RetryTaskLogQueryVO; import com.aizuda.easy.retry.server.web.model.response.RetryTaskLogResponseVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.time.LocalDateTime; +import java.util.HashMap; 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 * @date : 2022-02-28 09:10 */ @Service +@RequiredArgsConstructor public class RetryTaskLogServiceImpl implements RetryTaskLogService { - @Autowired - private RetryTaskLogMapper retryTaskLogMapper; - @Autowired - private RetryTaskLogMessageMapper retryTaskLogMessageMapper; + private final RetryTaskLogMapper retryTaskLogMapper; + private final RetryTaskLogMessageMapper retryTaskLogMessageMapper; @Override public PageResult> getRetryTaskLogPage(RetryTaskLogQueryVO queryVO) { @@ -74,7 +89,7 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService { } @Override - public PageResult> getRetryTaskLogMessagePage( + public RetryTaskLogMessageResponseVO getRetryTaskLogMessagePage( RetryTaskLogMessageQueryVO queryVO) { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); @@ -82,20 +97,90 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService { PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); LambdaQueryWrapper retryTaskLogLambdaQueryWrapper = new LambdaQueryWrapper<>(); retryTaskLogLambdaQueryWrapper.eq(RetryTaskLogMessage::getNamespaceId, namespaceId); + retryTaskLogLambdaQueryWrapper.eq(RetryTaskLogMessage::getUniqueId, queryVO.getUniqueId()); + retryTaskLogLambdaQueryWrapper.eq(RetryTaskLogMessage::getGroupName, queryVO.getGroupName()); + retryTaskLogLambdaQueryWrapper.orderByAsc(RetryTaskLogMessage::getId).orderByAsc(RetryTaskLogMessage::getRealTime); - if (StrUtil.isNotBlank(queryVO.getGroupName())) { - retryTaskLogLambdaQueryWrapper.eq(RetryTaskLogMessage::getGroupName, queryVO.getGroupName()); - } - if (StrUtil.isNotBlank(queryVO.getUniqueId())) { - retryTaskLogLambdaQueryWrapper.eq(RetryTaskLogMessage::getUniqueId, queryVO.getUniqueId()); + PageDTO selectPage = retryTaskLogMessageMapper.selectPage(pageDTO, retryTaskLogLambdaQueryWrapper.orderByDesc(RetryTaskLogMessage::getCreateDt)); + + List records = selectPage.getRecords(); + + if (CollectionUtils.isEmpty(records)) { + + RetryTaskLogMessageResponseVO jobLogResponseVO = new RetryTaskLogMessageResponseVO(); + + jobLogResponseVO.setFinished(Boolean.TRUE); + jobLogResponseVO.setNextStartId(queryVO.getStartId()); + jobLogResponseVO.setFromIndex(0); + return jobLogResponseVO; } - PageDTO retryTaskLogPageDTO = retryTaskLogMessageMapper.selectPage(pageDTO, retryTaskLogLambdaQueryWrapper.orderByDesc(RetryTaskLogMessage::getCreateDt)); + Integer fromIndex = Optional.ofNullable(queryVO.getFromIndex()).orElse(0); + RetryTaskLogMessage firstRecord = records.get(0); + List ids = Lists.newArrayList(firstRecord.getId()); + int total = firstRecord.getLogNum() - fromIndex; + for (int i = 1; i < records.size(); i++) { + RetryTaskLogMessage record = records.get(i); + if (total + record.getLogNum() > queryVO.getSize()) { + break; + } - return new PageResult<>( - retryTaskLogPageDTO, - RetryTaskLogResponseVOConverter.INSTANCE.toRetryTaskLogMessageResponseVO(retryTaskLogPageDTO.getRecords())); + total += record.getLogNum(); + ids.add(record.getId()); + } + long nextStartId = 0; + List> messages = Lists.newArrayList(); + List jobLogMessages = retryTaskLogMessageMapper.selectList( + new LambdaQueryWrapper() + .in(RetryTaskLogMessage::getId, ids) + .orderByAsc(RetryTaskLogMessage::getId) + .orderByAsc(RetryTaskLogMessage::getRealTime) + ); + + for (final RetryTaskLogMessage retryTaskLogMessage : jobLogMessages) { + + List> originalList = JsonUtil.parseObject(retryTaskLogMessage.getMessage(), List.class); + int size = originalList.size() - fromIndex; + List> pageList = originalList.stream().skip(fromIndex).limit(queryVO.getSize()) + .collect(Collectors.toList()); + + Map map = new HashMap<>(1); + map.put("clientInfo", retryTaskLogMessage.getClientInfo()); + originalList.add(map); + + if (messages.size() + size >= queryVO.getSize()) { + messages.addAll(pageList); + nextStartId = retryTaskLogMessage.getId(); + fromIndex = Math.min(fromIndex + queryVO.getSize(), originalList.size() - 1); + break; + } + + messages.addAll(pageList); + nextStartId = retryTaskLogMessage.getId() + 1; + fromIndex = 0; + + + } + + messages = messages.stream().sorted((o1, o2) -> { + long value = Long.parseLong(o1.get(LogFieldConstants.TIME_STAMP)) - Long.parseLong(o2.get(LogFieldConstants.TIME_STAMP)); + + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } + + return 0; + }).collect(Collectors.toList()); + + RetryTaskLogMessageResponseVO responseVO = new RetryTaskLogMessageResponseVO(); + responseVO.setMessage(messages); + responseVO.setNextStartId(nextStartId); + responseVO.setFromIndex(fromIndex); + + return responseVO; } @Override