feat: 3.2.0

新增重试日志查询接口
This commit is contained in:
byteblogs168 2024-03-22 15:19:21 +08:00
parent 0cd93d7b9f
commit 3fbe484724
6 changed files with 114 additions and 19 deletions

View File

@ -36,7 +36,7 @@ public class RetryTaskLogController {
@LoginRequired
@GetMapping("/message/list")
public PageResult<List<RetryTaskLogMessageResponseVO>> getRetryTaskLogPage(RetryTaskLogMessageQueryVO queryVO) {
public RetryTaskLogMessageResponseVO getRetryTaskLogPage(RetryTaskLogMessageQueryVO queryVO) {
return retryTaskLogService.getRetryTaskLogMessagePage(queryVO);
}

View File

@ -13,4 +13,8 @@ public class RetryTaskLogMessageQueryVO extends BaseQueryVO {
private String groupName;
private String uniqueId;
private Long startId;
private Integer fromIndex;
}

View File

@ -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;
}

View File

@ -17,7 +17,7 @@ public interface RetryTaskLogService {
PageResult<List<RetryTaskLogResponseVO>> getRetryTaskLogPage(RetryTaskLogQueryVO queryVO);
PageResult<List<RetryTaskLogMessageResponseVO>> getRetryTaskLogMessagePage(RetryTaskLogMessageQueryVO queryVO);
RetryTaskLogMessageResponseVO getRetryTaskLogMessagePage(RetryTaskLogMessageQueryVO queryVO);
RetryTaskLogResponseVO getRetryTaskLogById(Long id);

View File

@ -22,5 +22,4 @@ public interface RetryTaskLogResponseVOConverter {
List<RetryTaskLogResponseVO> batchConvert(List<RetryTaskLog> retryTaskLogs);
List<RetryTaskLogMessageResponseVO> toRetryTaskLogMessageResponseVO(List<RetryTaskLogMessage> retryTaskLogs);
}

View File

@ -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<List<RetryTaskLogResponseVO>> getRetryTaskLogPage(RetryTaskLogQueryVO queryVO) {
@ -74,7 +89,7 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService {
}
@Override
public PageResult<List<RetryTaskLogMessageResponseVO>> getRetryTaskLogMessagePage(
public RetryTaskLogMessageResponseVO getRetryTaskLogMessagePage(
RetryTaskLogMessageQueryVO queryVO) {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
@ -82,20 +97,90 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService {
PageDTO<RetryTaskLogMessage> pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize());
LambdaQueryWrapper<RetryTaskLogMessage> 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<RetryTaskLogMessage> selectPage = retryTaskLogMessageMapper.selectPage(pageDTO, retryTaskLogLambdaQueryWrapper.orderByDesc(RetryTaskLogMessage::getCreateDt));
List<RetryTaskLogMessage> 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<RetryTaskLogMessage> retryTaskLogPageDTO = retryTaskLogMessageMapper.selectPage(pageDTO, retryTaskLogLambdaQueryWrapper.orderByDesc(RetryTaskLogMessage::getCreateDt));
Integer fromIndex = Optional.ofNullable(queryVO.getFromIndex()).orElse(0);
RetryTaskLogMessage firstRecord = records.get(0);
List<Long> 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<Map<String, String>> messages = Lists.newArrayList();
List<RetryTaskLogMessage> jobLogMessages = retryTaskLogMessageMapper.selectList(
new LambdaQueryWrapper<RetryTaskLogMessage>()
.in(RetryTaskLogMessage::getId, ids)
.orderByAsc(RetryTaskLogMessage::getId)
.orderByAsc(RetryTaskLogMessage::getRealTime)
);
for (final RetryTaskLogMessage retryTaskLogMessage : jobLogMessages) {
List<Map<String, String>> originalList = JsonUtil.parseObject(retryTaskLogMessage.getMessage(), List.class);
int size = originalList.size() - fromIndex;
List<Map<String, String>> pageList = originalList.stream().skip(fromIndex).limit(queryVO.getSize())
.collect(Collectors.toList());
Map<String, String> 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