feat(sj_1.0.0): 优化组导出采用分页模式

This commit is contained in:
opensnail 2024-05-28 18:47:14 +08:00
parent c447379f7c
commit cf89d46155

View File

@ -8,9 +8,11 @@ import cn.hutool.core.util.StrUtil;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.core.util.StreamUtils;
import com.aizuda.snailjob.server.common.config.SystemProperties;
import com.aizuda.snailjob.server.common.dto.PartitionTask;
import com.aizuda.snailjob.server.common.enums.IdGeneratorModeEnum;
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
import com.aizuda.snailjob.server.common.handler.ConfigVersionSyncHandler;
import com.aizuda.snailjob.server.common.util.PartitionTaskUtils;
import com.aizuda.snailjob.server.web.model.base.PageResult;
import com.aizuda.snailjob.server.web.model.request.GroupConfigQueryVO;
import com.aizuda.snailjob.server.web.model.request.GroupConfigRequestVO;
@ -29,13 +31,18 @@ import com.aizuda.snailjob.template.datasource.persistence.mapper.SequenceAllocM
import com.aizuda.snailjob.template.datasource.persistence.mapper.ServerNodeMapper;
import com.aizuda.snailjob.template.datasource.persistence.po.*;
import com.aizuda.snailjob.template.datasource.utils.DbUtils;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@ -48,6 +55,8 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.LongFunction;
import java.util.stream.Collectors;
/**
@ -418,13 +427,34 @@ public class GroupConfigServiceImpl implements GroupConfigService {
public String exportGroup(final Set<Long> groupIds) {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
List<GroupConfig> groupConfigs = accessTemplate.getGroupConfigAccess().list(
List<GroupConfigRequestVO> allRequestList = Lists.newArrayList();
PartitionTaskUtils.process((startId -> {
List<GroupConfig> groupConfigs = accessTemplate.getGroupConfigAccess().listPage(new PageDTO<>(0, 100),
new LambdaQueryWrapper<GroupConfig>()
.eq(GroupConfig::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupIds), GroupConfig::getId, groupIds)
);
.ge(GroupConfig::getId, startId)
.eq(GroupConfig::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupIds), GroupConfig::getId, groupIds)
.orderByAsc(GroupConfig::getId)
).getRecords();
return groupConfigs.stream().map(GroupConfigPartitionTask::new).toList();
}), partitionTasks -> {
List<GroupConfigPartitionTask> configPartitionTasks = (List<GroupConfigPartitionTask>) partitionTasks;
List<GroupConfig> configs = configPartitionTasks.stream().map(GroupConfigPartitionTask::getConfig)
.collect(Collectors.toList());
allRequestList.addAll(GroupConfigConverter.INSTANCE.toGroupConfigRequestVOs(configs));
}, 0);
return JsonUtil.toJsonString(GroupConfigConverter.INSTANCE.toGroupConfigRequestVOs(groupConfigs));
return JsonUtil.toJsonString(allRequestList);
}
@EqualsAndHashCode(callSuper = true)
@Getter
private static class GroupConfigPartitionTask extends PartitionTask {
// 这里就直接放GroupConfig为了后面若加字段不需要再这里在调整了
private final GroupConfig config;
public GroupConfigPartitionTask(@NotNull GroupConfig config) {
this.config = config;
setId(config.getId());
}
}
}