package com.doumee.core.job; import lombok.AllArgsConstructor; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * 分发器父类,所有分发器继承该父类 * @author Eva.Caesar Liu * @since 2025/03/31 16:44 */ public abstract class BaseDistributer { /** * 获取业务数据 * * @param jobParam JOB参数 * @return List */ public abstract List getBusinessData(JobParam jobParam); /** * 获取job分片数据 * * @param dto 分发参数 * @param jobParam JOB参数 * @return List> */ public List> getSnippetData (DistributeDTO dto, JobParam jobParam) { List> snippetData = new ArrayList<>(); List 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; } }