package com.doumee.core.job;
|
|
import lombok.AllArgsConstructor;
|
import lombok.Data;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 分发器父类,所有分发器继承该父类
|
* @author dm
|
* @since 2025/03/31 16:44
|
*/
|
public abstract class BaseDistributer<T> {
|
|
/**
|
* 获取业务数据
|
*
|
* @param jobParam JOB参数
|
* @return List<T>
|
*/
|
public abstract List<T> getBusinessData(JobParam jobParam);
|
|
/**
|
* 获取job分片数据
|
*
|
* @param dto 分发参数
|
* @param jobParam JOB参数
|
* @return List<List<T>>
|
*/
|
public List<List<T>> getSnippetData (DistributeDTO dto, JobParam jobParam) {
|
List<List<T>> snippetData = new ArrayList<>();
|
List<T> allData = this.getBusinessData(jobParam);
|
int snippetCount = allData.size() / dto.getLimit();
|
if (allData.size() % dto.getLimit() > 0) {
|
snippetCount++;
|
}
|
for (int i = 0 ; i < snippetCount; i++) {
|
int endLimit = dto.getLimit() * (i + 1);
|
if (endLimit >= allData.size()) {
|
endLimit = allData.size();
|
}
|
snippetData.add(allData.subList(dto.getLimit() * i, endLimit));
|
}
|
return snippetData;
|
}
|
|
/**
|
* 分发参数
|
*/
|
@Data
|
@AllArgsConstructor
|
public static class DistributeDTO {
|
|
// 数据限制
|
private Integer limit;
|
}
|
}
|